论坛首页 综合技术论坛

sql语句建立表和关系

浏览 8729 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-07-26   最后修改:2010-07-26
用了sqlserver很长时间了,从没有想过有一天需要用一个外键去引用多个主键,这样可以吗?如何使用?还有我想知道的是在数据库里建立约束好呢,还是在页面上控制好?有时候挺迷茫的,不知道这些关系究竟要如何才能把握好。希望新手老手讨论一下,对数据库有研究的,讨论一下这个问题,谢谢了!
   发表时间:2010-07-26  
个人看法
数据库只存数据,一切约束程序来控制
0 请登录后投票
   发表时间:2010-07-26  
嘻嘻,主外键约束总归是个例外,不是吗?那个一个外键引用多个主键解决了,却不知道如何用一个表中的两个外键引用同一个主键。
0 请登录后投票
   发表时间:2010-07-28  
znn1980 写道
个人看法
数据库只存数据,一切约束程序来控制


说的很对  就算有那样的需求   只要不是追求性能 

第一选择应该是交由程序控制  至于你说的那个需求  能不能说的具体点  也许不一定得要这样
0 请登录后投票
   发表时间:2010-07-28  
嗯,我也很迷茫,因为数据库不是我设计的,我的任务就是把他们设计的数据库用语句写出来,却没有想到一个表中会有那么多的引用,就是
a aid
b bid
c cid
d did
e eid fid(引用abc) gid(引用bcd)
关系搞的特别复杂,所以我总觉的一个外键引用多个主键可以,可是一个表中多个外键引用了同一个主键,怎么说都有问题,可是数据库就是这样设计的,也只能这样做下去了。
0 请登录后投票
   发表时间:2010-07-28   最后修改:2010-07-28
建立外键约束的好处是保证了数据参照的完整性,坏处是降低性能。
因此是否建立外键取决于你看重的是数据完整性还是性能,你要在两者之间进行取舍。

很多情况下,数据建模都是一种取舍和平衡的过程。
0 请登录后投票
   发表时间:2010-07-28  
嗯,那我的语句应该怎样写呢?如果我就是想要两个外键引用同一个主键,这样可以用语句实现吗?
0 请登录后投票
   发表时间:2010-07-28  
欧石楠 写道
嗯,我也很迷茫,因为数据库不是我设计的,我的任务就是把他们设计的数据库用语句写出来,却没有想到一个表中会有那么多的引用,就是
a aid
b bid
c cid
d did
e eid fid(引用abc) gid(引用bcd)
关系搞的特别复杂,所以我总觉的一个外键引用多个主键可以,可是一个表中多个外键引用了同一个主键,怎么说都有问题,可是数据库就是这样设计的,也只能这样做下去了。


刚才在MySQL里面尝试了下,对于一个表的列上面的,确实可以生成两个外键,分别引用不同表的主键。
相当于表的列可以支持多对多的外键。
一个列,多个表主键。
一个表主键,多个列引用。

然后因为一个列有多个外键关联到不同表的主键,例如c中的reference_id引用到a.id和b.id。
那么创建c的时候,a和b必须都存在要输入的主键,例如两个表都有2,才能设置c.reference_id成功。
我尝试a有1,2.
b有1.
然后在c.reference_id插入2.因为我觉得a中有2就应该可以符合外键约束了。
没有想到不会成功。

尝试之后觉得,外键多少个都可以设置。然后插入,更新,删除的时候,对于每一个作用于列的外键都会一个一个检查过去,只有全部的外键都符合外键约束了,才会通过。
0 请登录后投票
   发表时间:2010-07-28  
拥抱变化之美 写道
建立外键约束的好处是保证了数据参照的完整性,坏处是降低性能。
因此是否建立外键取决于你看重的是数据完整性还是性能,你要在两者之间进行取舍。

很多情况下,数据建模都是一种取舍和平衡的过程。

嗯,说得很中肯!
0 请登录后投票
   发表时间:2010-07-29  
嗯,那两个外键可以引用同一张表中的主键吗?
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics