前提声明,个人观点:
没有最好的,只有最合适的。
对不同的视角,所谓的“最合适”也是不同的。
设计总是伴随者“妥协”的。
请不要在讨论中试图证明个人的观点是“最好的”。
大家都提出自己的经验、思路、教训等等,让参与讨论的人根据自己的条件(这个我们无法完全为他人设想),有所取舍的得到“我所正需要的”。
-----------------------------------
以下是针对事务型数据库:
1.是否使用联合主键?个人倾向于少采用联合主键。因为这样会降低索引的效率,联合主键一般都要用到至少一个业务字段,往往是字符串型的,而且理论上多字段的索引比单字段的索引要慢些。看上去似乎也不那么清爽。
在实际的设计中,我尽量避免使用联合主键,有些时候“不得不”使用联合主键。
2.PK采用无意义的字段(逻辑主键)还是有意义的字段(业务主键)?个人倾向于“逻辑主键”,理由是这样设计出的数据库模型结构清晰、关系脉络清楚,往往更符合“第三范式”(虽然不是故意的,呵呵)。而且更容易避开“联合主键”,而且可以使用索引效率高的字段类型,比如int、long、number。缺点是用无意义的字段建立表间的关系,使跨表查询增多,效率下降。(矛盾无处不在,前面刚说完可以提高效率,这里马上又降低效率)。“业务主键”可以提升查询编码的简洁度和效率。
个人使用实际状况,总体来说“逻辑主键”比“业务主键”执行效率低,但不会低到无法满足需求。采用“逻辑主键”比采用“业务主键”更利于数据库模型的结构、关系清晰,也更便于维护。
对于分析型数据库,如数据仓库,千万不要这样做。
3.不要使用多对多关系?个人倾向于少使用多对多关系。这个问题其实不是数据库设计的问题了,在数据库设计中,多对多关系也仅仅存在于逻辑模型(E-R)阶段,物理模型不在有多对多关系,实际数据库中也不会有“多对多”关系。这是使用ORM时的问题,比如使用Hibernate,多对多关系有时会使编码看起来灵活一些,代价是效率的明显降低。
个人实际使用中,设计时基本不考虑多对多关系,但编码时总会有小组成员使用一些多对多关系,自己建立多对多的ORM,使自己编码方便些,用在数据量小的地方,影响不大。大数据量,则“禁止使用”。
4.
为每个表增加一个state字段?我习惯在设计时给每个表设一个state字段,取值0或1,默认值为1,具体业务意义或操作上的意义可以自定义。可以作为一个状态控制字段,如查询、更新、删除条件,单据是否有效(业务单据对应的表会有业务意义上的“有/无效”或“状态”字段,这种情况下,我还是会再加一个state字段),甚至仅仅是控制一条数据是否“有效”(有效的意义你自己定)。在数据迁移(如转入分析用的数据库)时也可能会发挥作用。
5.
为每个表设置一些备用字段?没办法,我总是设计不出“完美”的数据表,给每个表加几个备用字段(我一般用字符串型,随你)可以应付“不时之需”,尤其是需要长期维护的、业务可能有临时性变动的系统。
6.
尽量不要在一个表中存入其关联表的字段?建议不存!这样做确实可以提高查询效率,但在一个有很多表,并且关联表多的情况下,很难保持数据的一致性!数据库结构也比较糟糕。而且不存,也不会使效率十分低下。
7.
不要去直接修改数据库?个人认为这点很重要,当需要修改时,应该先去修改模型,然后同步物理数据库,尤其是团队开发,否则要多做更多的事情来搞定,也可能会引入更多的错误。
分享到:
相关推荐
这份文档的编写是为了详细阐述数据库的结构、命名规则以及安全策略,为开发团队提供清晰的数据库设计蓝图,便于开发、维护和管理数据库,同时防止因数据操作不当导致的问题。 1.2 术语表 文档中可能包含一些专业...
工资管理系统数据库设计报告是信息技术学院信息管理与信息系统专业的一份课程设计报告,旨在通过实际操作来学习和理解数据库系统的设计与实现。这份报告涵盖了多个关键阶段,包括需求分析、概念设计、逻辑设计以及...
数据库设计是IT领域中的核心部分,它涉及到数据的组织、存储和访问策略。在这个"健身房数据库设计作业"中,我们可以预想它会涵盖健身房信息管理系统的方方面面,包括会员信息、健身课程、教练安排、设施使用等关键...
数据库设计是信息系统开发的核心环节,它涉及到数据的组织、存储和访问策略,旨在创建一个高效、稳定、可扩展的数据库...通过本章的学习,读者将能够按照规范化的步骤,运用各种设计技术,解决实际的数据库设计问题。
下面将详细讨论多级目录数据库设计的相关知识点。 首先,我们要理解多级目录的概念。在计算机科学中,目录通常表示为一种树状结构,其中每个目录可以包含其他子目录或文件。多级目录意味着目录结构可以有多个级别,...
**标题:“这是一个很好的数据库设计问题”** 提示了本文将围绕一个优秀的数据库设计案例展开讨论。数据库设计是信息技术领域的一个重要分支,它涉及到如何有效地组织数据,使得这些数据能够被各种应用程序高效地...
在数据库设计中,信息模型是数据库设计的基础。数据库设计的目的是为了建立一个能够满足应用系统需求的数据库。数据库设计需要考虑到应用系统的需求、数据的特征、存储设备的限制等因素。 在本章中,我们将通过一个...
数据库设计是信息系统开发过程中的关键环节,它确保了数据库能够高效、可靠地支持应用程序和用户需求。本节将深入探讨数据库设计的各个阶段,特别是需求分析。 首先,数据库设计概述涵盖了设计方法和步骤。数据库...
在“Dbapp”这个压缩包中,可能包含的是整个数据库应用的源代码、数据库设计文档、数据库脚本、测试数据以及可能的实验报告。源代码将展示如何使用C#进行数据库连接、查询和操作。数据库设计文档可能包含了实体关系...
此外,还讨论了面向对象模型在现代数据库设计中的应用。 5. **数据完整性约束**:数据库设计中必须考虑数据完整性,包括实体完整性、参照完整性和用户定义的完整性,以防止数据错误和异常。 6. **安全性设计**:...
PML数据库设计讨论1 数据库设计是一种复杂的系统设计过程,涉及到数据模型、数据结构、数据存储和数据管理等多个方面。以下是PML数据库设计讨论的主要知识点: 一、数据库设计原则 数据库设计的主要原则包括数据 ...
本文讨论了数据库设计中用户权限的设计问题,特别是基于基本权限功能的设计。文章首先介绍了项目中权限控制的需求,接着讨论了 zwei 疑惑:一是是否应该在底层截取用户权限,控制用户对方法或者类的访问;二是权限...
数据库设计的准则是指在设计数据库时需要遵循的一些基本原则,这些原则旨在确保数据库的正确性、完整性和可扩展性。以下是数据库设计的准则: 1.第三范式:数据库设计的目标是遵循第三范式,以确保数据库的正确性和...
数据库设计是信息系统开发过程中的关键环节,它直接影响到系统的性能、稳定性和可扩展性。这份“数据库设计文档(PDF)”提供了一个详细的学习资源,涵盖了数据库设计的基础理论、最佳实践和实际案例,对于理解...
《UML数据库设计应用》是一本深入探讨UML(统一建模语言)在数据库设计中的应用的专业教材。书中详尽地介绍了UML的基础概念、核心元素以及如何利用这些元素进行有效的数据库设计。对于初学者来说,它提供了一个系统...
数据库设计报告是软件开发过程中的重要文档,它详尽地阐述了数据库的规划、结构和使用方式,确保数据库能够高效、稳定地服务于预期的应用程序。以下是对报告模板中各部分的详细解释: 1. **引言**:这部分的目的是...
【CMMI数据库设计说明书模板】是软件开发过程中的一个重要文档,它为数据库的设计提供了详细的指导,确保项目按照成熟度模型集成(CMMI)的标准进行。CMMI是一种用于评估和改进组织在软件工程、系统工程和服务工程等...
进销存《数据库设计报告》详细地阐述了一个用于库存、销售和采购管理的数据库系统的设计。这份报告的主要目的是为了提供一个清晰的蓝图,以便于开发人员理解和实施该系统的数据库部分。文档涵盖了从环境说明到安全性...