primary key and Foreign Key someCopyIdea
所谓外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
至于主键:主关键字是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。
如上可知:若name是表B的主键,由于name还是表A的外键。由上面的定义可知表B是表A的主表,表A则是表B的从表
主健、唯一性约束,可以确保该列数据的唯一
同时在查询的时候用到这些列的话,效率会高写
外键,为了保持数据库的一致性,在主键表中更新或删除,以此主键为外键的表也会随之变化等
主健 本来就有唯一性。。。。用主健就能跟银行帐号一样!!一个帐号就能知道其他的属性!!
外键 数据保持完整性!!
说到底为了性能.
所有一切都是让你的数据库操作更加快速.
今天又发现自己以前的无知,关于数据库的外键,以前我一直以为不允许为空的,今天看到一个项目中使用了空的数据库外键,很惊讶,后来才发现是自己以前错误了。数据库外键是可以为空的。
不过为空的数据跟与之相关联的表就没有关系了。一般不采用。
虽然一般不建议使用允许空的外键来避免null对join的影响,但事实上,允许为空的外键几乎出现在了所有的系统中,很多时候还是一种比较好的方法的
个人意见:
我一般不用主外键,感觉没有什么优点可取。。外键关联几乎不 用。我只用主键。。
有外键在维护数据库,转移,迁移数据等等特别麻烦,而且一个表的外键太多,影响性能,有了外键数据 库内部操作必能会对此外键的约束进行查询与审核。。
我设计 的库几乎没有外键
理论称实践总会有偏差的,多年经验告诉我,外键只是说明两个表存在关联,分析时可以这么写,但在表结构设计及物理设计时,如果表的数据量比较大,而且对这个表的DML性能要求非常高,建议还是不要建外键。
主键大部份情况下还是要的,因为一方面主键起到数据完整性约束作用,另外主键建好后会自动建一个唯一索引,可以达到提高单笔记录访问的性能。如果你的表不需要单笔记录访问及DML性能要求非常高,比如说一些数据仓库的事实表,那可以考虑不建主键。
主键大部份情况下还是要的,因为一方面主键起到数据完整性约束作用,另外主键建好后会自动建一个唯一索引,可以达到提高单笔记录访问的性能。如果你的表不需要单笔记录访问及DML性能要求非常高,比如说一些数据仓库的事实表,那可以考虑不建主键。