如何使用SQL Server创建一对多关系?使用SQL Server创建一对多关系
回答
- 定义的两个表(例如A和B),用自己的主键
- 定义于表A中的列作为基于表B的
主键具有外键关系这意味着该表中可以有一个或多个与在表B.
一个记录的记录如果您已经到位的表,使用ALTER TABLE语句创建外键约束:
ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id)
fk_b
:外键约束的名称,必须是唯一的数据库b_id
:在表A中所创建的b
的外键关系列的名称:表的名称,在这种情况bid
:表b列的名称
如果你在谈论关于两类不同enitities的,老师和学生说,你会为每个创建两个表,第三个存储关系。这第三个表格可以有两列,比如teacherID和StudentId。 如果这不是你正在寻找的,请详细说明你的问题。
我不认为这是我想要的。我规范化了一张桌子,现在我想创建一个关系。 – Tim 2009-08-20 19:38:38
由于所提供的解决方案是向下投票,因此是多对多关系之一。即使使用一对多,当必须运行连接时,这也是额外的开销。另外,您必须在3个表格内部连接,因此需要更多类型的连接。 – andrewWinn 2009-08-20 19:40:00
这个是用来创建m-n关系的:) – nXqd 2011-01-14 20:37:05
如果你不使用SSMS那么这里是语法:
ALTER TABLE <table_name>
ADD <constraint_name> FOREIGN KEY
(<column_name1> ,
<column_name2>)
REFERENCES <table_name>
(<column_name1> ,
<column_name2>)
这是怎么了,我通常做(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.
正如你可以看到第二个插入到细节,因为外键的失败。 这是一个很好的网络链接,它显示了在表创建或之后定义FK的各种语法。
这是一个典型的例子令一个简单的例子。每个客户可以有多个订单 s,并且每个订单可以包括多个订单行 s。
您可以通过添加foreign key列来创建关系。每个订单记录都有一个CustomerID,它指向客户的ID。同样,每个OrderLine都有一个OrderID值。这是数据库图表的外观:
SQL one-to-many diagram http://www.subbot.net/personal/external/stackoverflow/sql-one-to-many.png
在此图中,有实际foreign key constraints。它们是可选的,但它们确保数据的完整性。另外,它们使数据库的结构更清晰,以供使用它的任何人使用。
我假设你知道如何自己创建表。那么你只需要定义它们之间的关系。您当然可以在T-SQL中定义约束(由多人发布),但也可以使用设计器轻松添加。使用SQL Management Studio,你可以右击订单表,点击设计(我认为它可能被称为2005年编辑)。然后,在打开右键单击的窗口中的任意位置选择关系。
你会得到另一个对话框,在右边应该有一个网格视图。第一行的其中一行显示“表格和列说明”。点击该行,然后再次点击右侧出现的小[...]按钮。你会得到这个对话框:
Foreign key constraint http://www.subbot.net/personal/external/stackoverflow/sql-fk.png
的订购表应该已经在正确的选择。选择左侧下拉菜单中的客户表。然后在左侧网格中,选择ID
列。在右侧网格中,选择CustomerID
列。关闭对话框,然后关闭对话框。按Ctrl + S保存。
拥有这个约束将确保在没有伴随的客户记录的情况下不存在订单记录。
要有效地查询这样的数据库,您可能需要read up on JOINs。
- 1. 如何在SQL Server中创建真正的一对一关系
- 2. 使用SQL插入一对多关系
- 3. 创建多对一的关系
- 4. Sequelize:创建一对多关系
- 5. 使用NHibernate创建一个虚拟的多对多关系
- 6. 使用Mongoid嵌入多对一关系创建对象
- 7. SQL Server:使用一对一和一对多关系获取所有外键
- 8. 无法创建表关系 - SQL Server 2005
- 9. SQL Server帮助创建外键关系
- 10. SQL Server:无法创建关系
- 11. 多对多关系:获取或创建
- 12. sql在一对多关系中创建视图
- 13. 使用一对多关系为3个表创建ORMapping
- 14. SQL Server的许多一对多的关系
- 15. 创建一个具有多对多关系的对象
- 16. Sql Server的一个一对多的关系
- 17. 如何在SQL中创建时态多对多关系?
- 18. 在Laravel 5中创建与多对多关系的关系
- 19. 建模多对多的一元关系和1:一元关系
- 20. SQL - 多个一对多关系
- 21. SQL查询许多一对多关系
- 22. 使用Spring Roo创建多对多关系
- 23. 问题在SQL Server 2005中创建一个简单的关系
- 24. 创建PostgreSQL表格+关系 - 带关系的问题 - 一对一
- 25. 多对多的SQL关系
- 26. 针对多对多关系的SQL Server查询 - 如何查询?
- 27. Laravel - 使用belongsTo关系创建对象
- 28. 如何创建一个一对一的关系(SQL)
- 29. EF一对一关系不会创建
- 30. 使用SQL搜索一组一到一对多的关系
我在USC的教授告诉我们这个简单的规则:当有一对多的关系时,把'一边'作为外键放在'多边'一边。当有多对多的关系时,把两个键作为外键放在第三个表中。 – user3885927 2017-08-02 22:22:18