gpt4 book ai didi

sql - 如何表示(可选)一对(可选)关系

转载 作者:行者123 更新时间:2023-12-04 20:25:31 26 4
gpt4 key购买 nike

我正在从 UML 图创建一个数据库。我试图编写一个我从未遇到过的案例,它是(可选)一对(可选)一个关系。

我有两个表,我们称它们为 A 和 B。A 可以通过 0..1 关系引用 B。问题是 B 最多应该被一个 A 对象引用。

我不确定我应该如何处理这个问题。我应该在 B 中引用 A 并在 a 中引用 B 吗?我是否应该只在 A 中放置对 B 的引用(并强制在触发器或代码中进行其他检查)?

如果有帮助,这些链接不会经常创建,并且只会一个一个地创建,因此如果在代码或触发器中进行检查,则不会出现性能问题。但我宁愿通过数据库设计来禁止不良数据,而不仅仅是通过代码。

最佳答案

请试试这个例子,

    CREATE TABLE dbo.TableA
(
col tinyint NOT NULL ,
Primary KEY(Col)
);

CREATE TABLE dbo.TableB
(
colRef tinyint NULL
);

Alter Table TableB
ADD FOREIGN KEY (ColRef)
REFERENCES TableA(Col)

INSERT dbo.TableA VALUES (1);
INSERT dbo.TableA VALUES (2);

GO
CREATE VIEW dbo.TableBUnique
WITH SCHEMABINDING AS
SELECT b.colRef
FROM dbo.TableB AS b
WHERE b.colRef IS NOT NULL;

GO
CREATE UNIQUE CLUSTERED INDEX uci
ON dbo.TableBUnique (colRef);
GO
INSERT dbo.TableB VALUES (1);
INSERT dbo.TableB VALUES (2);
INSERT dbo.TableB VALUES (NULL);
INSERT dbo.TableB VALUES (NULL);

-- Error
INSERT dbo.TableB VALUES (1); -- Duplicate Data
INSERT dbo.TableB VALUES (3); -- Reference Not Exist

GO

关于sql - 如何表示(可选)一对(可选)关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31078342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com