Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实体框架/SQL多共享列外键_Sql_Sql Server_Entity Framework_Database Design - Fatal编程技术网

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

实体框架/SQL多共享列外键,sql,sql-server,entity-framework,database-design,Sql,Sql Server,Entity Framework,Database Design,我有一些类似这样的表格: 表A 表B 表C 表B仅适用于某些用户,但表A和C适用于所有用户。这意味着需要外键[FK_table C_table A] 在数据库级别或使用实体框架时,确保TableC中对TableB的引用不为空时,TableB和TableC中的TableAId都匹配的最佳方法是什么?这是识别关系和生成的自然键的经典用例: 表B 表C 当TableBNo为非NULL时,同一个表A行必须是来自两个表的引用,这仅仅是因为两个外键使用相同的字段TableAId 由于MS SQL Serve

我有一些类似这样的表格:

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


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

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

表B

表C

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


由于MS SQL Server实现外键,因此当TableBNo为NULL时,不会强制执行底部外键。

表2是指表A和C中的表B、表1和表3吗?是的!修好了,抱歉,这是漫长的一天!
[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])
TableAId INT,
TableBNo INT,

PRIMARY KEY (TableAId, TableBNo),

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

PRIMARY KEY (TableAId, TableCNo),

FOREIGN KEY TableAId REFERENCES TableA (Id),
FOREIGN KEY (TableAId, TableBNo) REFERENCES TableB (TableAId, TableBNo)