Я не уверен, почему никто еще не указал на это, но на самом деле довольно легко убедиться, что у человека есть только один супруг, используя почти ту же модель, что и у вас в вашем вопросе.
На данный момент я собираюсь игнорировать использование имени в качестве первичного ключа (оно может меняться, и дубликаты встречаются довольно часто, так что это плохой выбор), и я также собираюсь исключить возможную необходимость историческое отслеживание (вы можете добавить какую-нибудь эффективную дату, чтобы вы знали, КОГДА они были супругами - Джо Селко написал несколько хороших статей о временном моделировании, но я не помню, в какой книге это было в данный момент) , В противном случае, если я разведусь и снова выйду замуж, вы потеряете, что у меня был другой супруг в другое время - возможно, это не важно для вас.
Кроме того, вы можете разбить имя на имя, отчество, фамилию, префикс, суффикс и т. Д.
Учитывая эти предостережения ...
CREATE TABLE People
(
person_name VARCHAR(100),
CONSTRAINT PK_People PRIMARY KEY (person_name)
)
GO
CREATE TABLE Spouses
(
person_name VARCHAR(100),
spouse_name VARCHAR(100),
CONSTRAINT PK_Spouses PRIMARY KEY (person_name),
CONSTRAINT FK_Spouses_People FOREIGN KEY (person_name) REFERENCES People (person_name)
)
GO
Если вы хотите, чтобы супруги также появлялись в таблице «Люди», вы можете добавить для этого также FK. Однако в этот момент вы имеете дело с двунаправленной ссылкой, которая становится немного более сложной.