(У меня немного мозговой пупок, и я не могу вспомнить имя этого проблемного класса, потому что я видел решения для этого раньше на SO, поэтому, пожалуйста, отметьте это как дубликат другого вопроса, если вы найдете здесь лучший ответ).Отношение «один ко многим» с дочерним экземпляром «default»
Представьте, что у нас есть база данных автомобилей и автомобилей. У каждого CarOwner есть много автомобилей (один-ко-многим), но у каждого CarOwner также есть любимый автомобиль.
Вот начальная схема:
CREATE TABLE Owners (
OwnerId bigint IDENTITY(1,1) PRIMARY KEY,
Name nvarchar(100)
)
CREATE TABLE Cars (
CarId bigint IDENTITY(1,1) PRIMARY KEY,
Vin varchar(17),
OwnerId bigint,
FOREIGN KEY (OwnerId) REFERENCES Owners(OwnerId)
)
для владельца, чтобы любимый автомобиль, Owners
таблицы должна быть расширена с помощью нового столбца FaveCarId bigint
с внешним ключом к Cars
таблице, но добавляет (например, если мы добавили Houses
или Computers
в базу данных, когда мы получим информацию об Владельце, нам все равно, что их FaveCar
. Это также добавляет проблему с курицей и яйцом, где FaveCar
столбец должен быть NULL
, способный создать Owner
, добавьте их новую строку Car
, затем добавьте новый CarID
обратно в столбец FaveCar
.
... так другое решение продлить Cars
колонку, чтобы добавить логическое IsFavourite
столбец, но это имеет проблема в том, что ничего не мешает кому-то давать два Car
с (которые принадлежат к одной и той же Owner
) множества IsFavourite
колонке стоимость. Уникальное ограничение (между OwnerId+IsFavourite
не поможет либо потому, что если владелец имеет 3 или больше автомобилей, 2 из них будет иметь IsFavourite=0
.
Я обновил свой ответ, чтобы включить схему наследования базы данных. –