#database #data-modeling
#База данных #моделирование данных
Вопрос:
В рассмотренном мною устаревшем коде я нашел модель данных, которая создает логические поля соответствующих атрибутов, где ожидается, что только один из них будет истинным. Например:
create table MyTable (
id int primary key not null,
// more fields...
has_x bool not null,
has_y bool not null
);
Это глупо, потому что это допускает потенциально противоречивые данные, если для обоих установлено значение true. Я пытаюсь объяснить техническим пользователям, но не являющимся разработчиками, но не уверен, как объяснить, ПОЧЕМУ правильно менять отношение «1 ко многим» к определению, как показано ниже, когда оригинальный дизайн «работает».
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:
Вы думаете о нормализации базы данных.
Однако вы можете обеспечить согласованность, внедрив CHECK
ограничение, которое позволит в любой момент времени устанавливать значение true только для одного из логических полей.
Комментарии:
1. Внешний ключ обеспечивает только одно значение true из-за ограничения NOT NULL и таблицы атрибутов, содержащей записи для каждой возможности. Отношение «многие ко многим» в этом примере нежелательно.
2. np. Вы указали термин, который, кажется, соответствует этой ситуации. Спасибо!