Какая схема таблицы лучше? - PullRequest
0 голосов
/ 11 ноября 2011

какая структура лучше?

table1

postid category1 category2 category3
2            a         b        d

3            a         c       null

или

стол сообщений

postid
2
3

таблица категорий

category     option

category1      a
category2      b
category3      c
category4      d

таблица_опций_опции

post option
2      a
2      b
2      d 
3      a
3      c

кажется, что создание запроса для первой структуры проще, чем для второй структуры.

Ответы [ 6 ]

3 голосов
/ 11 ноября 2011

Эти две структуры моделируют разные вещи.Первая жестко допускает только (до) 3 категорий (и различает категории по позиции), а вторая может моделировать любое количество категорий (которые не различаются по позиции).Какой из них лучше, на самом деле зависит от того, чего вы пытаетесь достичь ...

На чисто техническом уровне второй может потребовать JOIN для некоторых запросов, где первый может удовлетворить запрос от одного (итолько) таблица.Является ли это проблемой или нет, опять же, зависит от обстоятельств ...

2 голосов
/ 11 ноября 2011

Второй лучше.Первым является нарушение первой нормальной формы:

http://en.wikipedia.org/wiki/First_normal_form#Repeating_groups_across_columns

2 голосов
/ 11 ноября 2011

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

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

В этом случае важно понять, что означает «вероятный».Это не значит, что вы, дизайнер, не думаете, что он будет расти.Это означает, что список категорий понятен и зрел, и поэтому вряд ли будет расти.Я продолжал искать примеры, но ни один из них не приходил на ум.

Есть веские причины выбрать первый, но делайте это с осторожностью - переход на второй вариант в производственной системе станет кошмаром.

2 голосов
/ 11 ноября 2011

Зависит от требований ...

Ожидаете ли вы увеличения количества вариантов с течением времени?

Ваш первый вариант гораздо проще для кодирования, второй вариант гораздо более модульный и масштабируемый.

2 голосов
/ 11 ноября 2011

2-й лучше. это типично для многих со случаем таблицы соединений.

если вы сделаете это 1-м способом, что вы будете делать, если появятся новые категории категории 4,5,6,7,8 ... придут? добавить новые столбцы в таблицу?

И, я не знаю, есть ли у вас требование типа "сколько сообщений с опцией категории" c ""? 2-й легко сделать статистику, но 1-й ...

0 голосов
/ 11 ноября 2011

category_option должен иметь идентификатор категории, чтобы создать таблицу соединения с opton_post, иначе нет смысла создавать эту 2-ю структуру таблицы.

две вещи, которые вы можете достичь здесь с этой структурой.

1) установить связь один на один с постом в категории. (это означает, что вы можете добавить больше категорий в будущем, если это необходимо)

2) в этой структуре нулевые значения автоматически исключаются. это означает, что больше не нужно обрабатывать нулевые значения в таблице или в SQL-запросах.

надеюсь, это поможет.

...