SQL数据库中怎么建立两个表之间的关系?
展开全部
一对一:在这种关系中,关系表的每一边都只能存在一个记录。每个数据表中的关键字在对应的关系表中只能存在一个记录或者没有对应的记录。这种关系和一对配偶之间的关系非常相似——要么你已经结婚,你和你的配偶只能有一个配偶,要么你没有结婚没有配偶。大多数的一对一的关系都是某种商业规则约束的结果,而不是按照数据的自然属性来得到的。如果没有这些规则的约束,你通常可以把两个数据表合并进一个数据表,而且不会打破任何规范化的规则。
一对多:主键数据表中只能含有一个记录,而在其关系表中这条记录可以与一个或者多个记录相关,也可以没有记录与之相关。这种关系类似于你和你的父母之间的关系。你只有一位母亲,但是你母亲可以有几个孩子。
多对多:两个数据表里的每条记录都可以和另一个数据表里任意数量的记录(或者没有记录)相关。例如,如果你有多个兄弟姐妹,这对你的兄弟姐妹也是一样(有多个兄弟姐妹),多对多这种关系需要引入第三个数据表,这种数据表称为联系表或者连接表,因为关系型系统不能直接实现这种关系。
建立关系在开始着手考虑建立关系表之间的关系之前,你可能需要对数据非常熟悉。只有在熟悉数据之后,关联会比你刚开始的时候更明显。你的数据库系统依赖于在两个数据表中找到的匹配值来建立关系。如果在数据库系统中发现了一个匹配值,系统将从两个数据表中提取数据并创建一个虚拟的记录。例如,你可能想要查看某个特定的作者所写的全部书籍,在本文中,系统将从“Books”和“Authors”这两个数据表中查找相关的匹配值。需要注意的是,在大多数情况下,查询的结果是动态的,这意味着对这条虚拟记录所做的任何改动都将可能作用到底层的数据表上,这一点是非常重要的。
进行匹配的值都是主键和外键的值。(关系模型不要求一个关系必须对应的使用一个主键来确定。你可以使用数据表中的任何备选关键字来建立关系,但是使用主键是大家都已经接受的标准。)主键(primary key)唯一的识别表中的每个记录。而外键(foreign key)只是简单的将一个数据表中的主键存放在另外一个数据表中。同样地,对于你来说也不需要做太多的工作——只是简单地将主键加到关系表中,并将其定义为外键。
唯一需要注意的是,外键字段的数据类型必须和主键的数据类型相同。但是有些系统可以允许这条规则有一个例外,它允许在数字和自动编号(autonumbering)字段(例如在SQL服务器系统中访问Identity和AutoNumber)之间建立关系。此外,外键的值可以是空(Null),尽管强烈建议在没有特别原因的情况下,不要让外键为空。你有可能永远都不会有机会来使用需要这项功能的数据库。
展开全部
设计表-在要建关系的字段上点右键-关系-添加-表和列的规范
这个是SQLSERVER2005的方法
这个是SQLSERVER2005的方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据另一张表修改表中的数据
update Admin_FCOutDt set oLastId=T.contractID
from
(select crm_contract.contractTopic,crm_contract.contractID from Admin_FCOutDt
left join crm_contract
on Admin_FCOutDt.ContractName=crm_contract.contractTopic
)T
where Admin_FCOutDt.ContractName=T.contractTopic
--把查询另一张表
insert into Admin_FCOutDt(protype,number)
select '测试',num from crm_contract
--根据另一张表删除表中的数据
delete from Admin_FCOutDt where LastId in (select id from Admin_FCOut where prod like '%EF%')
--两表合并查询(两个表之间的查询只列出这一个。会有单独的章节介绍)
select fnumber ,fname from Admin_FCOutDt
where state=1
union all
select nub as fnumber,fname from crm_comtract
update Admin_FCOutDt set oLastId=T.contractID
from
(select crm_contract.contractTopic,crm_contract.contractID from Admin_FCOutDt
left join crm_contract
on Admin_FCOutDt.ContractName=crm_contract.contractTopic
)T
where Admin_FCOutDt.ContractName=T.contractTopic
--把查询另一张表
insert into Admin_FCOutDt(protype,number)
select '测试',num from crm_contract
--根据另一张表删除表中的数据
delete from Admin_FCOutDt where LastId in (select id from Admin_FCOut where prod like '%EF%')
--两表合并查询(两个表之间的查询只列出这一个。会有单独的章节介绍)
select fnumber ,fname from Admin_FCOutDt
where state=1
union all
select nub as fnumber,fname from crm_comtract
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |