Tash1moto
@Tash1moto

Как структурировать таблицу mysql?

Всем привет, нужна помощь в структурировании таблицы для товаров.
Для каждого товара свой row, но в некоторых ячейках есть поля, которые состоят из 50 вариаций. была идея аппэндить все нужные значения в одну ячейку инкрементируя псевдо-айди(префикс) в начале значения и потом работать с ними с помощью регулярок ) но подозреваю что так будет глупо.
3m6jl9m.jpg

подскажите как лучше сделать
  • Вопрос задан
  • 169 просмотров
Решения вопроса 1
valerium
@valerium
Изобретая велосипед
Специально для таких случаев придумана связь один-ко-многим. Каждое поле, которое может принимать одни значение из фиксированного набора, должно быть указателем на id в другой таблице, которая перечисляет все возможные значения этого поля. Гуглите по словам «нормализация» и «внешний ключ».
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
эээ а отношения один-ко-многим у вас уже отменили?
добавляем дополнительную таблицу, в которую складываем все цвета, что есть у товара, отдельную под размеры и так далее...
Если еще немного подумать - то можно обойтись таблицей вида "id_товара;название_свойства;значение_свойства"
И будет в этой таблице лежать:
тов_1;цвет;красный
тов_1;цвет;синий
тов_1;размер;XL
...
Ответ написан
Комментировать
@Arik
Можно посмотреть в сторону NoSQL, используем MongoDB, в целом очень даже хорошо
Ответ написан
Комментировать
svd71
@svd71
Все опреднляется размером хранимых данных и удобностью и использования. Например размер можно оставить и как char3 и как varchar3. При условии что более символов не добавляется. Этообуславливается тем, что расположение отдельной таблицы для значения поля размер и хранение индекса в этой конкретной таблице преввшает ражмер и скорость указанных типов.

С цветом довольно непонятная ситуация. Дело в том, что стандартное представление цвета - это 4 байта данных. Значит обычного значения integer для него достаточно. Если же имеется ввиду, что цвет будет храниться в виде символьного значения (например red, green, blue, magenta .. и т д), то удобнее строить отдельную таблицу для цвета, хранить в таблице инбес на него и в запросе джойнить обе таблицы.

С принтом вроде бы однозначно нужно ттдельную таблицу и индекс.

С имиджами такая штука: если для разных записей в этой таблице используются разные (неповторяющиеся) значения, то тогда конструируется поле типа varchar на максимальную длинну допустимых значений. Если все таки имеет место повторение, то конструируется отдельная таблица и индекс.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы