Да, просто поместите PRIMARY KEY
s обоих объектов в таблицу ссылок, определив ключ UNIQUE
для обоих объектов:
myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))
Таким образом, если entityA = 1
относится к entityB = 2
:
entityA entityB
1 2
, вы не можете связать ни entityA = 1
с любым другим entityB
, ни entityB = 2
с любым другим entityA
.
Если ваше отношение симметрично (то есть entityA
и entityB
принадлежат одному домену и относятся entityA
к entityB
, также означает относительное entityB
к entityA
), тогда определите дополнительная CHECK
постоянная:
entityA entityB
UNIQUE(entityA)
UNIQUE(entityB)
CHECK(entityA < entityB)
и преобразовать нормализованное отношение в каноническое с помощью этого запроса:
SELECT entityA, entityB
FROM myrel
UNION
SELECT entityB, entityA
FROM myrel
Это отношение (0-1):(0-1)
.
Если вы хотите, чтобы это было отношение 1:1
, определите эту таблицу как домен для entityA
и entityB
:
myrel(entityA, entityB, UNIQUE(entityA), UNIQUE(entityB))
A(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityA))
B(id, PRIMARY KEY(id), FOREIGN KEY(id) REFERENCES myrel (entityB))
Удаляя FOREIGN KEY
из определения любой таблицы, вы изменяете соответствующую часть отношения с 1
на (0-1)
.