使用SQL Server创建一对多关系

Tim*_*Tim 50 sql sql-server sql-server-2005

如何使用SQL Server创建一对多关系?

OMG*_*ies 78

  1. 使用自己的主键定义两个表(示例A和B)
  2. 将表A中的列定义为具有基于表B的主键的外键关系

这意味着表A可以具有与表B中的单个记录相关的一个或多个记录.

如果已经有表,请使用ALTER TABLE语句创建外键约束:

ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id) 
Run Code Online (Sandbox Code Playgroud)
  • fk_b:外键约束的名称,对数据库必须是唯一的
  • b_id:表A中要创建外键关系的列的名称
  • b:表的名称,在本例中为b
  • id:表B中的列名称

  • 我认为这应该是:`ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY(b_id)引用b(id)` (6认同)
  • “将表 A 中的列定义为具有基于表 B 的主键的外键关系”的最简单方法是什么 (2认同)
  • @George:更新为包含 ALTER TABLE ADD CONSTRAINT 命令,假设表存在。 (2认同)

Tho*_*rin 59

这是一个典型的Order示例的简单示例.每个客户可以有多个订单,每个订单可以包含多个OrderLine.

您可以通过添加外键列来创建关系.每个Order记录中都有一个CustomerID,它指向Customer的ID.同样,每个OrderLine都有一个OrderID值.这是数据库图的外观:

在此输入图像描述

在此图中,存在实际的外键约束.它们是可选的,但它们可确保数据的完整性.此外,它们使数据库的结构对使用它的任何人都更清晰.

我假设你知道如何自己创建表.然后你只需要定义它们之间的关系.您当然可以在T-SQL中定义约束(由几个人发布),但也可以使用设计器轻松添加它们.使用SQL Management Studio,您可以右键单击Order表,单击Design(我认为它可能在2005年被称为Edit).然后在打开的窗口中的任意位置单击鼠标右键并选择" 关系".

你会得到另一个对话框,右边应该有一个网格视图.第一行中的一行是" 表和列规范 ".单击该行,然后再次单击右侧显示的小[...]按钮.你会得到这个对话框:

外键约束

订单表应该已经在正确的选择.选择左侧下拉列表中的Customer表.然后在左侧网格中,选择ID列.在右侧网格中,选择CustomerID列.关闭对话框,然后关闭对话框.按Ctrl + S保存.

拥有此约束将确保没有随附的客户记录就不能存在订单记录.

要有效地查询这样的数据库,您可能需要阅读JOIN.


小智 5

这就是我通常这样做的方式(sql server)。

Create Table Master (
MasterID int identity(1,1) primary key,
Stuff varchar(10)
)
GO
Create Table Detail (
DetailID int identity(1,1) primary key,
MasterID int references Master, --use 'references'
Stuff varchar(10))
GO
Insert into Master values('value')
--(1 row(s) affected)
GO
Insert into Detail values (1, 'Value1') -- Works
--(1 row(s) affected)
insert into Detail values (2, 'Value2') -- Fails
--Msg 547, Level 16, State 0, Line 2
--The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Detail__MasterID__0C70CFB4". 
--The conflict occurred in database "Play", table "dbo.Master", column 'MasterID'.
--The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,由于外键,第二次插入细节失败。这是一个很好的网络链接,它显示了在表创建期间或之后定义 FK 的各种语法。

http://www.1keydata.com/sql/sql-foreign-key.html