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

时间:2014-01-15 15:19:10

标签: sql sql-server entity-framework database-design

我有一些看起来像这样的表:

表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]

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

1 个答案:

答案 0 :(得分:0)

这是识别关系和生成的自然键的经典用例:

表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个外键)。

相关问题