关于主键和外键sql server

我是一个初学者,请问,我创建了两个表,如:
表1的结构:number(主键),name(unique约束),sex,birthday,address
表2的结构:name(外键),bookname,telphone,country
我的认为是在表1被操作的时候,表2也会随着变化,例如,向表1加数据,表也会把相应的数据填写进去,是吗?

还有一个问题就是,用哪种数据类型好varchar,char!!
请向告,非常感激!!
---------------------------------------------------------------

设置一个关系 表1name和表2name
用varchar好
---------------------------------------------------------------

级连更新,删除!!!在设计表右键
---------------------------------------------------------------

对于你的问题,我觉得应该先找一本入门的书籍看一下。
但在此我想说一下pengdali(大力)提出的级联的问题,很多初学者都很喜欢(即便是一些有一点经验的数据库管理员)都很喜欢用级联的关系,而且Microsoft在它的产品Access和sql server里都很容易实现,但是我必须警告设计者,这是一种非常危险的做法,尤其在删除的时候,很容易破坏数据库的完整性。
为了删除数据而冒着破坏数据完整性的做法是不值得的。事实上数据量的大小往往并不是影响查询速度的主要原因,主要原因是查询的算法,有经验的数据库设计者很少删除数据,而是给要删除的数据做一个标记,真正要物理删除也不可能交给级联去处理。
因此,再次警告数据库的使用者,慎用级联关系。
---------------------------------------------------------------

外键为其他表的关键字,当insert数据时如果表中存在外键约束的话,首先检索插入的数据在另外一个表中是否存在,如果存在才能插入成功,当delete
时要先删除另一表中的当前数据后,才能删除带有外键约束的表中的数据
---------------------------------------------------------------

这样设计的表也不是太好,表2对表1只是部分函数依赖,不满足第2范式。在数据库不断变化后会引起问题的。
---------------------------------------------------------------

第一步删除约束
ALTER TABLE 表2
DROP CONSTRAINT 外键约束名
GO
第二步重键约束
ALTER TABLE 表2
ADD FOREGIN KEY(name)REFERENCES 表1(name)ON DELECT CASCADE ON UPDATE CASCADE
GO
搞定!

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus