1) 一张表可以与多张表建立一对一的关系吗?
更明确地说,如果我想插入数据,第一个表将受到影响,但只有其中一张其他表会受到影响。
2) 如果可以,那么主键将是什么?
3) 另外,如果我想从这些表中检索多条记录,查询将是什么样子?
谢谢。
1) 一张表可以与多张表建立一对一的关系吗?
更明确地说,如果我想插入数据,第一个表将受到影响,但只有其中一张其他表会受到影响。
2) 如果可以,那么主键将是什么?
3) 另外,如果我想从这些表中检索多条记录,查询将是什么样子?
谢谢。
Create Table Parent
(
Id ... not null Primary Key
, ...
)
Create Table Child1
(
Id ... not null Primary Key
, Foreign Key ( Id ) References Parent ( Id )
...
)
Create Table Child2
(
Id ... not null Primary Key
, Foreign Key ( Id ) References Parent ( Id )
...
)
这种设置需要先在父表中输入一个值,然后按照任意顺序在子表中添加值。此外,您可以向其中一个子表添加值而不是另一个子表,因为它们都只依赖于父表中的值的存在,而不是彼此之间。
补充说明
要从子表中进行选择,需要像其他父子关系一样进行相同的过程。例如:
Select P.Col1, P.Col2...
, Child1.Col1, Child1.Col2...
From Parent
Inner Join Child1
On Child1.FKCol = Parent.PKCol
在这里使用内连接,我只返回存在子行的父行。如果您想要所有父行和仅匹配的那些子行,则应该使用左连接而不是内连接。如果您想同时从多个子表中选择数据,只需将它们包含在From子句中即可:
Select P.Col1, P.Col2...
, Child1.Col1, Child1.Col2...
, Child2.Col1, Child2.Col2...
, Child3.Col1, Child3.Col2...
From Parent
Left Join Child1
On Child1.FKCol = Parent.PKCol
Left Join Child2
On Child2.FKCol = Parent.PKCol
Left Join Child3
On Child2.FKCol = Parent.PKCol
SELECT * FROM ParentTable as pt
LEFT JOIN ChildTable1 as ct1
ON pt.id = ct1.ParentId
LEFT JOIN ChildTable2 as ct2
ON pt.id = ct2.ParentId
LEFT JOIN ChildTable3 as ct3
ON pt.ID = ct3.ParentId
我的问题是,为什么要将一对一的关系分成多个表?如果将所有数据都保存在一个表中,您也可以强制执行一对一的关系。这样做会使查询更清晰(没有联接)且性能更好。