gpt4 book ai didi

sql-server - 在 SQL Server 中创建一对可选一约束

转载 作者:行者123 更新时间:2023-12-02 17:21:58 26 4
gpt4 key购买 nike

我有一个“主表”,称之为客户:

 CREATE TABLE Customers (
CustomerID int PRIMARY KEY NOT NULL,
FirstName nvarchar(50),
LastName nvarchar(50)
)

enter image description here

我有一个“卫星表”,称之为Customer_IllegallyObtainedInformation:

CREATE TABLE Customer_IllegallyObtainedInformation (
CustomerID int PRIMARY KEY NOT NULL,
CellPhonePin int,
SexualOrientation varchar(20),
EmailPassword varchar(50)
)

enter image description here

现在,我想要是从Illegal表返回到主Customers表的外键约束:

enter image description here

换句话说:

  • 可能客户没有非法条目
  • 但如果没有客户决不会存在非法条目

我的直觉是在 SQL Server 数据库图表中拖动

  • FROMIllegalTOCustomers

向 SQL Server 指示 Customers_IllegallyObtainedInformation 是关系中的“子项”。相反,SQL Server 中发生的事情使其成为一对一的关系:

enter image description here

这意味着如果您尝试插入客户,它将失败,因为不存在现有的非法信息。

如何在 SQL Server 中创建“父子”“一对可选一”关系?

<小时/>

注意:不要将示例与问题混淆。我可以在 Illegal 表中创建一个牺牲主代理键:

enter image description here

但这不是我的问题。

最佳答案

设计者似乎正在以相反的方向创建外键。

自己编写代码:

 CREATE TABLE Customers (
CustomerID int PRIMARY KEY NOT NULL,
FirstName nvarchar(50),
LastName nvarchar(50)
)

CREATE TABLE Customer_IllegallyObtainedInformation (
CustomerID int PRIMARY KEY NOT NULL,
CellPhonePin int,
SexualOrientation varchar(20),
EmailPassword varchar(50),

constraint fk_Customers foreign key (CustomerId) references dbo.Customers
)

-- succeeds:
insert into dbo.Customers
values(1, 'One', 'One'), (2, 'Two', 'Two')

--fails:
insert into dbo.Customer_IllegallyObtainedInformation
values(3, 1, '', '');

--succeeds:
insert into dbo.Customer_IllegallyObtainedInformation
values(1, 1, '', '');

关于sql-server - 在 SQL Server 中创建一对可选一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167633/

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