我正在使用UML图创建数据库。我试图编写一个我从未有过的案例,这是一个(可选的)一个到(可选)的一个关系。
我有两个表,让我们称它们为A和B. A可以通过0..1关系引用B。问题是B最多应该由一个A对象引用。
我不确定如何处理这个问题。我应该在B中引用A和在B中引用B吗?我是否应该只在A中引用B(并强制另一个检查触发器或代码中)?
如果它可以提供帮助,这些链接将不会经常创建,并且只会逐个创建,因此如果在代码或触发器中进行检查,则不会出现性能问题。但我宁愿通过数据库设计禁止不良数据,也不仅仅是通过代码。
答案 0 :(得分:0)
请尝试这个例子,
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