1. 数据库到底用不用外键
外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在操作上的一致性与完整性。
优点:
精简关联数据,减少数据冗余
避免后期对大量冗余处理的额外运维芹前操作。
降低应用代码复杂性,减少了额外的异常处理
相关数据管理全由数据库端处理。
增加文档的可读性
特别是在表设计开始,绘制 ER 图的时候,逻辑简单明了,可读性非常强。
性能压力
外键一般会存在级联功能,级联更新,级联删除等等。在海量数据场嫌耐清景,造成很大的性能压力。比如插入一亩闹条新记录,如果插入记录的表有 10 个外键,那势必要对关联的 10 张表逐一检查插入的记录是否合理,延误了正常插入的记录时间。并且父表的更新会连带子表加上相关的锁。
其他功能的灵活性不佳
比如,表结构的更新等。
缺点:
2. 数据库的五种约束关系是什么主外键有什么用。求教
额,这是数据库原理的基础知识,比如连接,分左外连接,右外连接,外连接。
以左外连接为例
代码大概为
select
*
from
data1
left
join
data2
on
data1.num=data2.num
where
data1.name='我'
可以连接不同的表。
主键,外键等的都是基础的东西,主键相当于一列数据的身份证号码,是唯一的。
外键就是说这个单元格的数据,是别的表的主键
。。。。。。
建议lz买本《数据库原理》看看,一个星期就看会了。这个需要系统的学一下,半路出家学不到什么东西
关于sql语句代码,只有4种,select,update,insert,delete
非常简单
3. 数据库该不该用外键
明确说,不该用。
1. 外键属于业务需求
2. 在数据量稍微大点的数据库极大影响性能。
3. 影响业务扩展,并且业务本身能够代替处理一致性关联。
即便业务端忘记处理关联信息的删除,也不影响最终查询结果。比如user和user_info表, user删除了,user_info忘记删除。正常关联user_info表, 左连user结果正常。仅仅增加冗余数据而已。相比检索写入性能的指数级降低,业务处理更好。况且,现在也不会真的删除一条记录,仅仅一个标记。忘记标记某给表,影响不大。
4. 如何解决PDM生成sql脚本的过程中,无法生成外键约束
先将斗敏数据库修改成sqlserver2000,
双击存在问题的约束,选择Integrity选项携桐卡,辩销坦修改Implementation属性值为Declarative。
再次选择Preview选项卡
ok,现在一切正常,这时再把数据库变成sqlserver2008。