У вас может быть таблица Product и отдельная таблица ProductAdditionInfo с тремя столбцами: идентификатор продукта, дополнительное информационное имя, дополнительная информация. Если цвет используется многими, но не всеми видами Продуктов, вы можете иметь его столбцом с нулевым значением в таблице Product или просто поместить его в ProductAdditionalInfo.
Этот подход не является традиционным методом для реляционной базы данных, но я видел, что он много использовал на практике. Он может быть гибким и иметь хорошую производительность.
Steve Yegge называет это шаблоном Properties и написал длинный пост об использовании его.
У нас есть API с сотнями результатов в каждом запросе или, возможно, пост / патч. Мы по-прежнему используем:
'data.relationships.users.data.*.id' => [
'string',
'unique:api_groups,name,' . ($this->route('group')->id ?? 0),
]
Так что для вас
'contacts.*.email' => 'required|email|unique:exists:users,id'
Работает отлично. Это не становится более сложным или что-то еще.