【问题标题】:Entity Framework / SQL Multiple Shared Column Foreign Key实体框架/SQL 多共享列外键
【发布时间】:2023-03-06 19:20:01
【问题描述】:

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

表 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 引用不为空时,TableAIdTableBTableC 中匹配的最佳方法是什么?

【问题讨论】:

  • “表2”是指“表B”和“表13 ”和“表AC”一样吗?
  • 是的!已修复,抱歉,拖了这么久!

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多