Как проектировать таблицы для поддержки имеет много отношения со значением по умолчанию? - PullRequest
1 голос
/ 28 марта 2019

Как проектировать таблицы для поддержки имеет много отношения со значением по умолчанию?

Например:
В стране много городов.Один город по умолчанию для страны.

Вариант оформления таблиц 1:
Город Таблица будет иметь логическое поле - is_default .

Вариант оформления таблиц 2:
Страна Таблица будет иметь поле внешнего ключа - default_city .

Запросы, которые будут записаны:
Обновите и выберите город по умолчанию и измените, какой город является городом по умолчанию.

Какой вариант лучше и почему?

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 28 марта 2019

В этом вопросе есть как философские, так и практические аспекты.

Философский вопрос: «Какая организация должна знать о статусе по умолчанию - страна или город?».Может ли страна существовать без города по умолчанию?Является ли «стандартность» атрибутом, который вы можете связать с городом?Существуют ли какие-либо другие атрибуты, которые могут относиться к отношениям между городом и деревней?

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

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

Затем возникают некоторые практические проблемы.

Как пишет @SaadAhmad, если "город по умолчанию" является атрибутом страны, и вы хотите сделать его обязательным, запись о городе должна существовать до того, как вы создадите страну иэто невозможно, потому что «страна» является обязательным полем для «города».

Другой практический вопрос: «Как обеспечить соблюдение бизнес-правила, согласно которому страна должна иметь 1 и только 1 город по умолчанию»?Это легко, если создать «город по умолчанию» как ненулевое поле для страны, но сложно сделать так, чтобы «is_default» являлся атрибутом города - уникальный индекс для «country_id, is_default» означает, что в каждой стране может быть только один город по умолчанию,но не соблюдает правило о том, что должно быть хотя бы 1.

Итак, ответ таков:

  • выяснить, что сначала говорит вам бизнес-домен.
  • сделать "is_default" атрибутом города практически проще всего, потому что вам не нужно беспокоиться о городах, существующих при создании страны.
  • вам приходится иметь дело с бизнес-правилом, требующим этогобыть ровно одним городом по умолчанию для каждой страны
1 голос
/ 28 марта 2019

В долгосрочном плане, поскольку развитие развивается, хранение города в стране может быть не лучшим. Лучше иметь атрибут города. И тогда вместо логического значения создайте код, где, скажем, 1 означает значение по умолчанию. Позже в других городах могут появиться другие атрибуты, такие как финансовая столица, столица и т. Д. Таким образом, придание городам их атрибутов, вероятно, лучше.

Например, в компании есть сотрудники, а один сотрудник - генеральный директор. Поэтому лучше иметь звание сотрудника в компании, а не в компании, в которой есть сотрудник.

Также при создании записи о стране, поскольку города еще не существуют, вы не сможете создать запись. Вы оставите это поле пустым, создадите город и вернетесь к настройкам по умолчанию.

...