社区
MS-SQL Server
帖子详情
讨论外键在数据库设计中的地位。
PhilexPei
2007-09-12 04:46:18
我先起个引子。
毫无疑问很多人都会对外键维护的复杂进行妥协,对它的性能产生怀疑,但在下一直固执的认为,外键就是系统完成性的一部分,不但要使用,而且要在符合语义环境的前提下尽量多的使用。
...全文
269
18
打赏
收藏
讨论外键在数据库设计中的地位。
我先起个引子。 毫无疑问很多人都会对外键维护的复杂进行妥协,对它的性能产生怀疑,但在下一直固执的认为,外键就是系统完成性的一部分,不但要使用,而且要在符合语义环境的前提下尽量多的使用。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mengmou
2007-09-12
打赏
举报
回复
邹老大快出来讲讲啊。
hb_gx
2007-09-12
打赏
举报
回复
外键还是少用或者不用,在程序中判断就很好了
其实就我个人认为最重要的是在开发和测试阶段太多的外键,影响工作,降低效率
PhilexPei
2007-09-12
打赏
举报
回复
to fellowcheng(鹰击长空)
是否可以用异常来代替那些复杂的逻辑检查呢?
PhilexPei
2007-09-12
打赏
举报
回复
to: wangtiecheng(不知不为过,不学就是错!)
我试着量化一下吧,这里说到外键的性能,肯定就要涉及到索引的性能,是否可以这么说除了那些不断大量增加数据的表,包含大量历史数据表,要慎重考虑性能,而其它的那些表,则必须要考虑外键。
dobear_0922
2007-09-12
打赏
举报
回复
需要关联约束的地方,全部由前台代码保证
-------------------------------------
这是很危险的,一个小小的bug或者一次误操作就可能使数据库中的数据违反业务逻辑。
---------------------
确实如此,那个系统用长了就会产生一些垃圾数据,这些垃圾数据在前台永远都用不到,不过也不影响系统正常运转,,,
sp4
2007-09-12
打赏
举报
回复
外键 我是经常用的,尤其是关系比较多的主表 与子表关系。
因为代码来维护这个感觉成本太高。
当然对于一些逻辑关系比较平淡的实体,可以忽略。
总之这东西不建议完全抛弃,毕竟是个好东西。
性能损失是有的,适当应用,我觉得挺好的
PhilexPei
2007-09-12
打赏
举报
回复
to:wgzaaa
“实际中的逻辑不可能象程序员要求的那样严格” 说的很实在。
PhilexPei
2007-09-12
打赏
举报
回复
相信到这个帖子来讨论的人,都是经历过不少系统设计工作的,今天拿这个很老套的问题出来讨论,就是想把很多问题量化、实例化,答疑解惑,分享经验,以怡后学。
mengmou
2007-09-12
打赏
举报
回复
需要关联约束的地方,全部由前台代码保证
-------------------------------------
这是很危险的,一个小小的bug或者一次误操作就可能使数据库中的数据违反业务逻辑。
fellowcheng
2007-09-12
打赏
举报
回复
前台逻辑保证完整性采用的还是多的
OracleRoob
2007-09-12
打赏
举报
回复
如果程序能做到很严谨,外键少,固然能提高数据库性能,但往往程序的严谨性很难保证,需要合理的平衡外键与性能的关系。
wgzaaa
2007-09-12
打赏
举报
回复
外键多复杂谈不上,不过实际中的逻辑不可能象程序员要求的那样严格,所以还是少用
PhilexPei
2007-09-12
打赏
举报
回复
to : libin_ftsafe(子陌红尘:TS for Banking Card)
当然凡事得有度,我们可就这个度做一个衡量。
先说你提到的这一点吧,程序逻辑对数据完整性的检查和使用外键作为对数据完成性检查的优缺点。
lost_queen
2007-09-12
打赏
举报
回复
我个小屁孩也来说一句:
我觉得外键在很多情况下是必要的,它能让使用者少操很多心。
对于使用者来说,设计合理的外键能大大减低SQL语句的复杂性。
当然,如果外键的存在大幅降低了效率,或者让维护者无所适从的时候,也可以考虑使用其他方法保证完整性。
dobear_0922
2007-09-12
打赏
举报
回复
偶以前做的一个项目就完全没有外皱起约束,需要关联约束的地方,全部由前台代码保证。
dobear_0922
2007-09-12
打赏
举报
回复
严重支持钻钻,,,
子陌红尘
2007-09-12
打赏
举报
回复
外键约束可以保障性能的完整性,而其他的业务逻辑也可以从一定程度上完成类似的功能;
反之,在某些情况下,不使用外键约束与使用外键约束,对某些业务逻辑的性能影响是很明显的。
子陌红尘
2007-09-12
打赏
举报
回复
其实不然,完整性固然重要,但效率也非常重要,势必要在利用外键约束完整性与效率等因素之间寻求一个平衡点。
Java学习指南(8) MySQL
数据库
与JDBC框架
一、课程简介『Java学习指南系列』的第8篇教程 ,介绍MySQL
数据库
的安装使用,常见SQL语句,以及使用JDBC进行
数据库
开发的技术。二、主要内容 * MySQL的安装和使用* 常用SQL语句,增删改查操作* 高级SQL查询,多表关联查询* 表的
设计
:主键,索引,内连接外连接,
外键
* MySQL配置管理: 用户授权,远程访问,备份还原* JDBC连接: 使用JDBC连接
数据库
,执行增删改查操作* 基于JDBC
数据库
框架的
设计
(afsql框架),以此阐述
数据库
框架的
设计
原理* JDBC连接池,JDBC
数据库
开发的必备技术*
数据库
事务 Transaction 的支持 * SQL的转义,
数据库
注入攻击的预防*
数据库
的动态访问:获取
数据库
和表的结构,根据表的结构自动生成POJO三、课程体系〖Java学习指南系列〗:包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络通信Socket,数据结构与算法等课程。〖网站开发系列〗:包含网页基础、网站入门、
数据库
、网站
中
级、FreeMarker、网站高级、项目应用、MyBatis、Redis等课程。
数据库
主键和
外键
一、什么是主键、
外键
: 关系型
数据库
中
的一条记录
中
有若干个属性,若其
中
某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其
中
每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其
中
课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表
中
单一一个属性无法唯一标识
数据库
外键
争论
数据库
设计
中
一个矛盾:
数据库
外键
,用还是不用?你怎么看.? 最近在做一个派单系统
数据库
设计
,在
设计
中
有些疑惑的地方
中
午在网上发起一个话题
讨论
. 我把这个
讨论
流程.发过来 大家可以可以看看. 也可以发表一下自己的意见. 对于主/
外键
/索引来说,在一些开发团队
中
被认为是处理
数据库
关系的利器,也被某些开发团队认为是处理某些具体业务的魔鬼,您的观点呢?在实际应用
中
您会采取哪种
SQL
数据库
管理系统的优化方案(表的主键、
外键
、索引
设计
)
在基本表
设计
中
,表的主键、
外键
、索引
设计
占有非常重要的
地位
,但系统
设计
人员往往只注重于满足用户要求,而没有从系统优化的高度来认识和重视它们。实际上,它们与系统的运行性能密切相关。现在从系统
数据库
优化角度
讨论
这些基本概念及其重要意义: (1)主键(Primary Key):主键被用于复杂的SQL语句时,频繁地在数据访问
中
被用到。一个表只有一个主键。主键应该有固定值(不能为Null或缺省值,要
SQL表的主键、
外键
、索引
设计
在基本表
设计
中
,表的主键、
外键
、索引
设计
占有非常重要的
地位
,但系统
设计
人员往往只注重于满足用户要求,而没有从系统优化的高度来认识和重视它们。实际上,它们与系统的运行性能密切相关。现在从系统
数据库
优化角度
讨论
这些基本概念及其重要意义:(1)主键(Primary Key):主键被用于复杂的SQL语句时,频繁地在数据访问
中
被用到。一个表只有一个主键。主键应该有固定值(不能为Null或缺省值,要有相对
MS-SQL Server
34,593
社区成员
254,589
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章