使用SQL Server创build一对多的关系

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

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

这意味着表A可以有一个或多个与表B中的单个logging相关的logging。

如果已经有了这些表,可以使用ALTER TABLE语句来创build外键约束:

ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id) 
  • fk_b :外键约束的名称,对于数据库必须是唯一的
  • b_id :您在表A上创build外键关系的列的名称
  • b :表格的名称,在这种情况下b
  • id :表B中列的名称

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

您可以通过添加外键列来创build关系。 每个订单logging都有一个CustomerID,它指向客户的ID。 同样,每个OrderLine都有一个OrderID值。 这是数据库图表的外观:

SQL一对多图personal/external/stackoverflow/sql-one-to-many.png

在这个图中,有实际的外键约束 。 它们是可选的,但它们确保数据的完整性。 而且,他们使数据库的结构更清晰,使用它的任何人。

我假设你知道如何自己创build表。 那么你只需要定义它们之间的关系。 您当然可以在T-SQL中定义约束条件(由多个人发布),但也可以使用devise器轻松添加。 使用SQL Management Studio,您可以右键单击订单表,单击devise (我认为它可能在2005年被称为编辑)。 然后在打开的右键单击并select关系的窗口中的任何地方。

你会得到另一个对话框,在右边应该有一个网格视图。 第一行的一行是“ 表格和列说明 ”。 点击该行,然后再次点击右侧出现的小button。 你会得到这个对话框:

外键约束personal/external/stackoverflow/sql-fk.png

订单表应该已经被选中了。 select左侧下拉菜单中的客户表。 然后在左侧的网格中selectID列。 在右侧的网格中,selectCustomerID列。 closures对话框,然后closures。 按下Ctrl + S保存。

拥有这个约束将确保在没有伴随的客户logging的情况下不存在订单logging。

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

这是我通常如何做(SQL服务器)。

 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. 

正如你所看到的第二次插入细节失败,因为外键。 这是一个很好的networking链接,它显示了在表创build或之后定义FK的各种语法。

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

如果你说的是两种情况,比如说老师和学生,你可以创build两个表格,第三个表格存储关系。 这第三个表格可以有两列,比如teacherID和StudentId。 如果这不是你要找的,请详细说明你的问题。

如果你不使用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