凤舞凰扬的关于数据库话题摘要

做过MIS系统的都知道,一般说来,数据分为两种:基础数据和业务数据。一般说来,业务数据中肯定包含多个基础数据,比如简单地说一张机票数据,它就包括:货币类型、机场、航空公司等多个基础数据,这个时候,如果都要建立FK的话,是没有任何意义的,更不需要去考虑什么级联删除的,结果只有一个,严重影响效率,而且结构凌乱。但是在业务数据中,机票的基本信息和机票的价格构成了一个整体,这个时候如果不使用FK,那么在设计上是个失误,在实现的时候也绝对是个隐患!比如删除的时候,删除了机票,但是留下了机票的价格,大家可以相信,这是多么荒谬的事情。
所以,使不使用FK,关键要区分基础数据和业务数据。
另外,一个好的数据库设计并不是纯粹考虑数据库,而是来源于好的业务建模和对象建模。
首先基础数据的不存在并不能代表业务数据的不存在或者逻辑错误,其次,比如基础数据,是不能随意删除的,当然,我们有很多的控制方法,比如失效等什么的。对于基础数据不用外键是综合各方面考虑的,不是说不能用外键,但是用了外键将导致一个非常可怕的问题,就是数据访问的问题,每访问一个业务数据,那么意味着有可能要join访问10个以上的表,效率会严重降低。
好的数据库设计不能是没有一点冗余,或者说严格符合关系要求,因为实际的应用是面向对象的,在将面向对象的数据转换为面向关系的数据时,是需要这样做的。从逻辑上说,一个基础数据的不存在,并不代表什么,比如说,你没有输入一个国家或者删除一个国家,并不代表没有了这个国家。而业务数据就不同了,如果你删除了一张业务数据,那么就代表了该业务数据已经不存在,而此时再存在与之相关的业务数据是不符合逻辑的(比如一个法规作废,那么与之相关的法规就都必须受影响)。

好的数据库设计来自于好的对象设计。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值