Булевы атрибуты базы данных или FK для определения таблицы? - PullRequest
1 голос
/ 25 апреля 2011

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

create table MyTable (
   id int primary key not null,
   // more fields...
   has_x bool not null,
   has_y bool not null
);

Это глупо, потому что допускает потенциально противоречивые данные, если для обоих задано значение true. Я пытаюсь объяснить техническим, но не разработчикам, но не знаю, как объяснить, ПОЧЕМУ уместно изменить отношение «один ко многим» на определение, как показано ниже, когда «работает» оригинальный дизайн .

create table Attributes ( -- contains "x" and "y" records.
   id int primary key not null,
   name varchar(100) not null
);

create table MyTable (
   id int primary key not null,
   // more fields
   attribute_id int not null foreign key references Attributes(id)
);

Есть ли термин для этих моделей моделирования данных?

1 Ответ

2 голосов
/ 25 апреля 2011

Вы думаете о нормализации базы данных .

Однако вы можете обеспечить согласованность, внедрив ограничение CHECK , которое позволит только одному из логических полей быть установленным в true в любой момент времени.

...