Ответ механически получен из идеи функциональной зависимости.
Чтобы значение существовало в одном отношении, это означает, что значение должно существовать в другом.Когда это так, будет ограничение внешнего ключа от зависимой таблицы (первой) к независимой таблице (второй)
Другой способ взглянуть на это состоит в том, что отношение один к одному на самом деле простоособый случай отношения один ко многим;только вместо многих вам разрешен только один.
в SQL:
CREATE TABLE independent (
id INTEGER PRIMARY KEY
);
CREATE TABLE dependent (
independent_id INTEGER UNIQUE NOT NULL FOREIGN KEY REFERENCES independent(id)
);
Как и «один ко многим», «многие» имеют внешний ключ к «одному», ночтобы превратить «много» в «одно», просто сделайте это unique
.Обычно удобно выразить все это, сделав столбец внешнего ключа для зависимого отношения первичным ключом для этого отношения:
CREATE TABLE dependent (
independent_id INTEGER PRIMARY KEY FOREIGN KEY REFERENCES independent(id)
);
Редактировать : я заметил, что ваш заголовок задает другой вопросчем ваше тело, кажется, спрашивает.Вышеуказанное отвечает названию.
С точки зрения нормализации базы данных, вероятно, предпочтительнее использовать несколько таблиц, как указано выше, в пользу обнуляемых атрибутов.Нули являются своего рода внеплановым способом сказать, что значение определенного атрибута в некотором роде «особенное», но на самом деле не обеспечивает какой-либо конкретной интерпретации того, что это может означать.Нуль manager_id
, вероятно, означает что-то совершенно отличное от нуля birthdate
, даже если они имеют одинаковую отметку.
Добавление таблиц ни в коем случае не считается плохой вещью, если речь идет о строго абстрактном или академическомточка;ни один не добавляет атрибуты.Выбор всегда должен быть основан на том, какие данные вам действительно нужно смоделировать.
Тем не менее, существуют некоторые очень реальные практические причины для использования одного или другого.Наиболее очевидная причина производительности связана с космическими затратами на использование одного или другого.Когда обычно используется необязательное значение, дополнительное пространство, используемое внешним ключом и соответствующим индексом, не окупается.Аналогично, если необязательное значение используется редко;это более компактно, чтобы поместить эти значения в другое отношение.Наличие атрибута NULL может занять место в таблице, которое почти никогда не используется.
Выяснение, для чего в основном требуются фактические данные, и тестирование производительности этих (и, возможно, других) конфигураций, чтобы определить, какая из них работает лучше всего