确保两个表之间一致的共同引用

问题描述 投票:0回答:1

这是一个简单的 SQLite 架构:

CREATE TABLE Lots (
    Id INTEGER PRIMARY KEY
);

CREATE TABLE Parts (
    Id INTEGER PRIMARY KEY,
    LotId INTEGER NOT NULL REFERENCES Lots
);

CREATE TABLE Inspections (
    Id INTEGER PRIMARY KEY,
    LotId INTEGER NOT NULL REFERENCES Lots,
    PartId INTEGER NULL REFERENCES Parts
);

每个批次都有关联的零件和检查,但某些检查也与特定零件相关。问题在于,无法确保检验及其引用的零件都引用相同的批次。

我在我的应用程序中使用类似的东西作为本地数据存储,所以我不担心这些理论上的不一致,但我有兴趣学习如何正确处理这个问题。

sql database database-design
1个回答
0
投票

您可以在包含 LotId 列的零件表中添加额外的 UNIQUE 索引:

CREATE UNIQUE INDEX i1 ON Parts(Id, LotId)

然后您可以在外键约束中引用这个新的“超级键”:

CREATE TABLE Inspections (
    Id INTEGER PRIMARY KEY,
    LotId INTEGER NOT NULL REFERENCES Lots,
    PartId INTEGER NULL REFERENCES Parts,
    FOREIGN KEY (PartId, LotId) REFERENCES Parts (Id, LotId)
);

您是否选择不将简单的 FK 包含在

PartId
上取决于您。

© www.soinside.com 2019 - 2024. All rights reserved.