数据库设计原则

本文详细介绍了数据库设计的规范和原则,包括规范化要求、领域模型驱动设计、范式遵循、索引优化、存储过程的使用以及如何处理数据冗余。强调了数据库设计应考虑系统独立性、数据一致性和性能效率,提供了实用的设计指导和优化策略。
摘要由CSDN通过智能技术生成


数据库设计规范化的五个要求
一:表中应该避免可为空的列
二:表不应该有重复的值或者列
三:表中记录应该有一个唯一的标识符
四:数据库对象要有统一的前缀名
五:尽量只存储单一实体类型的数据

 

数据库表的设计原则
1)不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同 组件间所对应的数据库表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。

2)采用领域模型驱动的方式和自顶向下的思路进行数据库设计,首先分析系统业务,根据职责定义对象。对象要符合封装的特性,确保与职责相关的数据项被定义在一个对象之内,这些数据项能够完整描述该职责,不会出现职责描述缺失。并且一个对象有且只有一项职责,如果一个对象要负责两个或两个以上的职责,应进行分拆。

3)根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式:一个表中的所有非关键字属性都依赖于整个关键字。关键字可以是一个属性,也可以是多个属性的集合,不论那种方式,都应确保关键字能够保证唯一性。在确定关键字时,应保证关键字不会参与业务且不会出现更新异常,这时,最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。

4)由于第一点所述的领域模型驱动的方式设计数据库表结构,领域模型中的每一个对象只有一项职责,所以对象中的数据项不存在传递依赖,所以,这种思路的数据库表结构设计从一开始即满足第三范式:一个表应满足第二范式,且属性间不存在传递依赖。

5)同样,由于对象职责的单一性以及对象之间的关系反映的是业务逻辑之间的关系,所以在领域模型中的对象存在主对象和从对象之分,从对象是从1-N或N-N的角度进一步主对象的业务逻辑,所以从对象及对象关系映射为的表及表关联关系不存在删除和插入异常。

6)在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。这时,应根据反向工程的思路反馈给领域模型。如果表结构中存在多值依赖,则证明领域模型中的对象具有至少两个以上的职责,应根据第一条进行设计修正。第四范式:一个表如果满足BCNF,不应存在多值依赖。

7)在经过分析后确认所有的表都满足二、三、四范式的情况下,表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构。并且,我认为数据库中的表是用来持久化一个对象实例在特定时间及特定条件下的状态的,只是一个存储介质,所以,表和表之间也不应用强关联来表述业务(数据间的一致性),这一职责应由系统的逻辑层来保证,这种方式也确保了系统对于不正确数据(脏数据)的兼容性。当然,从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数据,单从另一个角度来说,脏数据的产生在一定程度上也是不可避免的,我们也要保证系统对这种情况的容错性。这是一个折中的方案。

8)应针对所有表的主键和外键建立索引,有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引,提高检索效率。虽然建立索引会消耗部分系统资源,但比较起在检索时搜索整张表中的数据尤其时表中的数据量较大

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android数据库设计原则是指在开发Android应用程序时,设计和使用数据库时应遵循的一些准则和最佳实践。以下是一些常见的Android数据库设计原则: 1. 数据库选择:选择适合你的应用需求的数据库类型,常见的选择包括SQLite、Room等。SQLite是Android平台默认的关系型数据库,适用于小型应用;而Room是Google官方提供的一个SQLite对象映射库,提供了更高级的抽象和便利性。 2. 数据库架构设计:根据应用需求和数据模型设计数据库架构。合理划分表和字段,避免冗余和重复数据,保持数据的一致性和完整性。 3. 数据库版本管理:使用数据库版本管理机制来管理数据库的升级和迁移。通过继承SQLiteOpenHelper类或使用Room库的Migration功能,可以在应用升级时对数据库进行结构变更。 4. 数据库操作封装:封装数据库操作,提供统一的接口和方法,方便其他模块或组件进行数据库操作。可以使用DAO(Data Access Object)模式或Repository模式来实现。 5. 异步操作:在进行数据库操作时,尤其是耗时的查询或写入操作,应该使用异步方式执行,以避免阻塞主线程,提高应用的响应性能。可以使用AsyncTask、RxJava等方式来实现异步操作。 6. 数据库安全性:保护数据库的安全性,包括对敏感数据的加密存储、防止SQL注入攻击、合理设置数据库权限等。 7. 数据库性能优化优化数据库的性能,包括使用索引来提高查询效率、合理使用事务来保证数据的一致性和完整性、避免频繁的数据库操作等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值