我是一个初学者,请问,我创建了两个表,如:
表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
搞定!