Насколько строго я должен быть при создании отдельной таблицы ассоциации? - PullRequest
0 голосов
/ 04 августа 2010

Допустим, у меня есть таблица со столбцом report_type, и у меня только 2 типа отчетов. Стоит ли создавать из них таблицу report_types, а затем ссылаться на нее с внешним ключом этой таблицы? Или допустимо хранить тип отчета в виде строки в этом столбце?

Ответы [ 5 ]

2 голосов
/ 04 августа 2010

По возможности, вы всегда должны планировать нормализацию своих баз данных и абстрагирование вашего кода. Однако чем больше вы делаете это, тем больше «косвенности» вы получаете в своей системе. Лучший вопрос заключается в том, сколько накладных расходов вы потратите на нормализацию таблицы с точки зрения усилий по сравнению с затратами на перестройку кода в будущем.

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

1 голос
/ 04 августа 2010

Что следует учитывать:

  • есть ли вероятность добавить новые типы отчетов в будущем?
  • есть ли у вас другие таблицы, которые также ссылаются на типы отчетов (например, для статистикисбор или аудит)?
  • вы, вероятно, будете использовать эти значения в других контекстах (таких как раскрывающиеся виджеты GUI)?
  • вам нужно связать дополнительные данные (например, длинное описание)Тип отчета?

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

0 голосов
/ 04 августа 2010

Если все отчеты имеют одинаковый набор столбцов, но вы используете тип отчета только для ускорения фильтрации, тогда вы можете просто использовать:

report_model_v1

Если с ReportType (например, ReportTypeDescription) есть дополнительные столбцы, используйте:

report_model_v2

Если каждый тип отчета имеет свой набор столбцов - например, все отчеты имеют несколько общих столбцов (Col1, Col2, Col3), а затем каждый тип имеет несколько определенных столбцов (Type1_Col1, * 1021). *) (Type2_Col1, Type2_Col2) - затем используйте:

report_model_v3

0 голосов
/ 04 августа 2010

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

Если вы хотите, чтобы пользователь увидел, что для определенного типа отчета есть ноль записей, тоВы хотите использовать связанную таблицу.

0 голосов
/ 04 августа 2010

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

...