我有一些看起来像这样的表:
[Id] IDENTITY INT NOT NULL
[Id] IDENTITY INT NOT NULL,
[TableAId] INT NOT NULL,
CONSTRAINT [FK_TableB_TableA] FOREIGN KEY [TableAId] REFERENCES [TableA]([Id])
[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]
。
在数据库级别(或使用实体框架)确保TableB
中TableC
的引用不为空时,TableAId
TableB
的最佳方法是什么? }和TableC
匹配?
答案 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个外键)。