使用SQL Server创建一对多关系

时间:2009-08-20 19:31:30

标签: sql sql-server sql-server-2005

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

5 个答案:

答案 0 :(得分:78)

  1. 使用自己的主键
  2. 定义两个表(示例A和B)
  3. 将表A中的列定义为具有基于表B的主键的外键关系
  4. 这意味着表A可以有一个或多个与表B中单个记录相关的记录。

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

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

答案 1 :(得分:59)

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

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

enter image description here

在此图中,有实际的foreign key constraints。它们是可选的,但它们可确保数据的完整性。此外,它们使数据库的结构对使用它的任何人都更清晰。

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

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

Foreign key constraint

右侧已选择订单表。选择左侧下拉列表中的Customer表。然后在左侧网格中,选择ID列。在右侧网格中,选择CustomerID列。关闭对话框,然后关闭对话框。按 Ctrl + S 进行保存。

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

要有效地查询这样的数据库,您可能需要read up on JOINs

答案 2 :(得分:3)

这就是我通常的做法(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.

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

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

答案 3 :(得分:1)

如果你在谈论两种形式,比如老师和学生,你可以为每个创建两个表,第三个表来存储这种关系。第三个表可以有两列,比如teacherID和StudentId。 如果这不是您想要的,请详细说明您的问题。

答案 4 :(得分:1)

如果您不使用SSMS,则语法如下:

ALTER TABLE <table_name>
ADD <constraint_name> FOREIGN KEY 
(<column_name1> ,
<column_name2> )
REFERENCES <table_name>
(<column_name1> ,
<column_name2>)

http://infogoal.com/sql/sql-add-foreignkey.htm