实体框架/SQL多共享列外键



我有一些表如下所示:

表A

[Id] IDENTITY INT NOT NULL

表B

[Id] IDENTITY INT NOT NULL,
[TableAId] INT NOT NULL,
CONSTRAINT [FK_TableB_TableA] FOREIGN KEY [TableAId] REFERENCES [TableA]([Id])

表C

[Id] IDENTITY INT NOT NULL,
[TableAId] INT NOT NULL,
[TableBId] INT NULL,
CONSTRAINT [FK_TableC_TableA] FOREIGN KEY [TableAId] REFERENCES [TableA]([Id])

表B仅适用于某些用户,但表A和C适用于所有用户。这意味着需要外键[FK_TableC_TableA]

在数据库级别(或使用实体框架),当TableCTableB的引用不为空时,确保TableBTableC中的TableAId匹配的最佳方法是什么?

这是识别关系和由此产生的自然密钥的经典用例:

表B

TableAId INT,
TableBNo INT,
PRIMARY KEY (TableAId, TableBNo),
FOREIGN KEY TableAId REFERENCES TableA (Id)

表C

TableAId INT,
TableCNo INT,
TableBNo INT,
PRIMARY KEY (TableAId, TableCNo),
FOREIGN KEY TableAId REFERENCES TableA (Id),
FOREIGN KEY (TableAId, TableBNo) REFERENCES TableB (TableAId, TableBNo)

TableBNo为非NULL时,同一表A行必须是来自两个表的引用,因为两个外键使用相同的字段(TableAId)。

TableBNo为NULL时,不强制执行底部外键(因为MS SQL Server实现了MATCH SIMPLE外键)。

最新更新