数据库设计的一些有效经验

简介:

以下是针对事务型数据库:
1.是否使用联合主键?个人倾向于少采用联合主键。因为这样会降低索引的效率,联合主键一般都要用到至少一个业务字段,往往是字符串型的,而且理论上多字段的索引比单字段的索引要慢些。看上去似乎也不那么清爽。
在实际的设计中,我尽量避免使用联合主键,有些时候“不得不”使用联合主键。

2.PK采用无意义的字段(逻辑主键)还是有意义的字段(业务主键)?个人倾向于“逻辑主键”,理由是这样设计出的数据库模型结构清晰、关系脉络清楚,往往更符合“第三范式”(虽然不是故意的,呵呵)。而且更容易避开“联合主键”,而且可以使用索引效率高的字段类型,比如int、long、number。缺点是用无意义的字段建立表间的关系,使跨表查询增多,效率下降。(矛盾无处不在,前面刚说完可以提高效率,这里马上又降低效率)。“业务主键”可以提升查询编码的简洁度和效率。
个人使用实际状况,总体来说“逻辑主键”比“业务主键”执行效率低,但不会低到无法满足需求。采用“逻辑主键”比采用“业务主键”更利于数据库模型的结构、关系清晰,也更便于维护。
对于分析型数据库,如数据仓库,千万不要这样做。

3.不要使用多对多关系?个人倾向于少使用多对多关系。这个问题其实不是数据库设计的问题了,在数据库设计中,多对多关系也仅仅存在于概念模型(E-R)阶段,物理模型不在有多对多关系,实际数据库中也不会有“多对多”关系。这是使用ORM时的问题,比如使用Hibernate,多对多关系有时会使编码看起来灵活一些,代价是效率的明显降低。
个人实际使用中,设计时基本不考虑多对多关系,但编码时总会有小组成员使用一些多对多关系,自己建立多对多的ORM,使自己编码方便些,用在数据量小的地方,影响不大。大数据量,则“禁止使用”。

4.为每个表增加一个state字段?我习惯在设计时给每个表设一个state字段,取值0或1,默认值为1,具体业务意义或操作上的意义可以自定义。可以作为一个状态控制字段,如查询、更新、删除条件,单据是否有效(业务单据对应的表会有业务意义上的“有/无效”或“状态”字段,这种情况下,我还是会再加一个state字段),甚至仅仅是控制一条数据是否“有效”(有效的意义你自己定)。在数据迁移(如转入分析用的数据库)时也可能会发挥作用。

5.为每个表设置一些备用字段?没办法,我总是设计不出“完美”的数据表,给每个表加几个备用字段(我一般用字符串型,随你)可以应付“不时之需”,尤其是需要长期维护的、业务可能有临时性变动的系统。

6.尽量不要在一个表中存入其关联表的字段?建议不存!这样做确实可以提高查询效率,但在一个有很多表,并且关联表多的情况下,很难保持数据的一致性!数据库结构也比较糟糕。而且不存,也不会使效率十分低下。

7.不要去直接修改数据库?个人认为这点很重要,当需要修改时,应该先去修改模型,然后同步物理数据库,尤其是团队开发,否则要多做更多的事情来搞定,也可能会引入更多的错误。 

本文转自博客园执着的笨蛋的博客,原文链接:数据库设计的一些有效经验,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
存储 SQL 数据库
数据库设计案例:电商系统数据库设计实践
数据库设计案例:电商系统数据库设计实践
601 1
|
5月前
|
关系型数据库 网络安全 数据库
一些数据库设计的基本知识和学习指导
【6月更文挑战第17天】**数据库设计概览** - 从需求到结构,转化业务规则为关系型数据库。 - 遵循ER模型,定义实体、属性与联系。 - 步骤:需求分析、数据收集、ER图到物理设计,及优化。 - 范式理论确保数据无冗余,1NF至5NF逐步规范。 - 反规范化平衡查询效率与数据一致性。 - 优化策略:索引、简化查询、分区、延迟加载和并行处理。 - 安全措施:权限控制、加密、审计日志和防火墙。 - 实践与理解原理是成功设计的关键。
86 3
|
2月前
|
自然语言处理 算法 JavaScript
『软件工程11』结构化系统设计:解决软件“怎么做”问题
该文章讲述了结构化系统设计的核心理念与实践方法,旨在解决软件开发过程中“怎么做”的问题,并涵盖了设计原则、模块化、信息隐藏、耦合与内聚等关键概念。
『软件工程11』结构化系统设计:解决软件“怎么做”问题
|
3月前
|
存储 SQL 监控
闭眼建表所需的“军规”:数据库设计的严谨之道
【8月更文挑战第19天】在软件开发的浩瀚征途中,数据库设计无疑是基石中的基石。一个优秀的数据库设计,不仅能够提升系统的性能与稳定性,还能极大地简化后续的维护与扩展工作。然而,在实际操作中,许多开发者在“闭眼建表”时往往忽略了诸多关键要素,导致后续问题频发。本文将以“闭眼建表所需的‘军规’”为主题,分享一系列数据库设计时的技术干货,帮助你在工作学习中少走弯路。
36 2
|
数据可视化 安全 数据建模
数据库设计理论与实践
数据库设计理论与实践
77 0
|
关系型数据库 网络安全 数据库
数据库设计知识学习指导
数据库设计知识学习指导
94 2
|
存储 SQL 数据采集
一文带你了解数据库设计基础
什么是数据库设计? 数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。
2713 0
一文带你了解数据库设计基础
|
存储 算法 测试技术
【软件工程题库】第二章 可行性分析
【软件工程题库】第二章 可行性分析
1134 1
|
自然语言处理 数据可视化 架构师
「需求分析」业务架构师需求分析技术权威指南
「需求分析」业务架构师需求分析技术权威指南