MySQL вставлять несколько данных в один столбец или несколько строк - PullRequest
0 голосов
/ 30 октября 2009

просто хочу спросить мнение относительно mysql. какое из них лучше?

case1: хранить в 1 ряду: -

product_id: 1

attribute_id: 1,2,3

когда я получаю данные, я делю строку на ','

Я видел какую-то базу данных, таким образом хранятся данные, запись является продуктом, в столбце хранится атрибут продукта:

а: 3: {s: 4: "спецификации"; а: 2: {я: 1; s: 6: "черный"; я: 3; s: 2: "37";} s: 21: "spec_private_value_id"; а: 2: {я:;: 11: "12367591683", я: 1 с 3; s: 11: "12367591764";} s: 13: "spec_value_id"; а: 2: {я: 1 ; s: 1: "5" I: 3, s: 2: "29";}}

или

Вариант 2: хранить в 3 ряда: -

product_id: 1

attribute_id: 1


product_id: 1

attribute_id: 2


product_id: 1

attribute_id: 3


это нормальный способ хранения 3 строк для атрибута записи.

С точки зрения производительности и пространства каждый может сказать мне, какой из них лучше. Из того, что я вижу, case1 экономия места, но необходимо обрабатывать данные в PHP (или других сценариях на стороне сервера). case2 более прямой, но используйте пробелы.

Ответы [ 4 ]

1 голос
/ 30 октября 2009

Экономия места? Шутки в сторону? Вы говорите об экономии байтов, когда один терабайтный диск стоит 70 долларов?

А может быть, вы даже не сохраняете байты. Если вы храните атрибуты как «12234,23342,243234», это как 30 байтов для 3 атрибутов. Если вы сохраните их как smallint, они будут занимать 6 байтов.

0 голосов
/ 30 октября 2009

Необходимо учитывать операторы SELECT, которые будут использовать эти значения. Если вы хотите искать записи, которые имеют определенные атрибуты, гораздо эффективнее хранить их в отдельных столбцах и индексировать их. В противном случае вы выполняете операторы «LIKE», обработка которых занимает гораздо больше времени.

0 голосов
/ 30 октября 2009

В случае 1 , хотя вы экономите место, на расщепление строки тратится время.

Вы также должны позаботиться о размере своего поля: если у вас есть 50 товаров с 2 атрибутами и одно со 100 атрибутами, вы должны сделать поле ~ varchar (200) ... Вы вообще не сэкономите место.

Я думаю, case 2 - лучшее и рекомендуемое решение.

0 голосов
/ 30 октября 2009

Зависит от того, важны ли атрибуты для поиска позже, например.

Это может быть хорошо, если вы сохраняете атрибуты как сериализованный массив только в одном поле, если вы на самом деле их не интересуете и если вам, например, не нужно будет выполнять запрос, чтобы показать все продукты, которые есть один атрибут.

Однако, поиск всех продуктов, имеющих один атрибут, будет по меньшей мере «паршивым», если у вас есть атрибуты как разделенные запятыми (вам нужно использовать LIKE), и если вы храните атрибуты как сериализованные массивы, они совершенно непригодны любой вид сортировки или группировки с использованием SQL-запросов.

Использование отдельной таблицы для множественных отношений между продуктами и атрибутами гораздо лучше, если они имеют какое-либо значение для выбора / группировки / сортировки других данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...