数据库设计的几个步骤是____、____、____、____、____、____。

上周,一位客户问我数据库设计是如何组织的。
我说你问了一个好问题。
这并不像画一幅画那么简单。
我们一步一步讲吧,但不要把它当作教科书。
事实上,事情常常会变得混乱。

需求分析这一步确实需要和使用数据库的人战斗。
去年我在上海的一个医疗系统工作,非常困难。
医生说,他必须记录病人的病历、用药记录和检查报告。
护士说,她需要查看病人的时间表和付款记录,并对背景疾病的来源进行统计分析。
听听需求就知道了,数据类型不一样,来源很乱,处理方式肯定不一样。
我们最终要怎么做呢?我们开了整整两周的会议,起草了N份文件,才大致了解了双方想要的是什么,否则一切都会一片混乱。
如果你不明白这一步,其他的都是白费力气,真的。

概念设计就是画E-R图。
我还是用医疗系统的例子来抽象病人、医生、科室、检查项目,用方框表示实体,用菱形表示属性,用箭头标记关系。
例如,病人有病历,医生看了病历,关系就会清晰地画出来。
这一步的好处是与具体系统无关,任何人都可以理解。
然而,我有一个做项目的朋友,客户只是扔了E-R图并说:“这样做吧。
”结果,客户根本没有考虑到图纸的实际重要性。

逻辑设计就是把你画的E-R图变成一个运行表。
仍然是同样的医疗系统。
病人成为用户表,医生成为医生表,病历成为病历表。
注意,此时你应该清楚地考虑主键、外键和索引。
例如,病历表中的患者ID是与用户表关联的外键。
这个设计必须是稳定的。
我在北京的一个项目上犯了一个错误。
我没有为经常搜索的字段添加索引。
结果数据量太大,系统卡住了,老板大怒。
数据的完整性和一致性也应该在这一步完成,这样数据到时候才不会变得一团糟。

物理设计,这是技术活。
例如,数据存储在哪里、使用什么文件格式、如何建立索引以及如何分配分区。
去年,我在深圳做一个金融项目。
数据量达到千万级。
如果没有分区索引,查询就必须等到黎明。
这个时候你就应该了解操作系统和存储了。
仅有 SQL 是不够的。
一旦完成这一步,性能就完全最大化了,对吧?就等着被骂吧。

编码和调试,最后一步,但绝对不容易。
基于物理设计构建表、编写存储过程、开发接口并迭代测试它们。
我在广州的一个ERP系统工作。
当我编码的时候,我发现逻辑设计考虑得不够充分。
例如,我忘记将某个字段设置为 NOTNULL,所以我必须改变它。
结果,数据导入失败。
调试期间,白天改代码,晚上被运维叫去机房。
真的很累。

然而,设计数据库的步骤看似清晰,但实际操作起来却都是陷阱。
每一步都要思考,多与人沟通,不要只埋头画画。
客户需求有变化吗?你的设计必须改变。
系统运行缓慢吗?物理设计必须改变。
这确实需要经验,几年之​​内很难掌握。

数据库设计的主要步骤是什么

当我第一次接手这个项目时,我对这个数据库的设计感到困惑。
听我纠缠你,这些都是我克服的陷阱。

进行需求分析时,2 008 年我在上海,管理着一个通过一家小公司外包的系统。
经理觉得很简单,就让我走了。
结果呢?根本没有讨论这些要求。
用户提供了一个大概的提纲,业务人员忙着做自己的事情,开发团队并没有深入讨论。
我硬着头皮创建了一个数据字典,并画了一个盲E-R图。
后来用户接受后,立马就被炸了,说根本不能用。
真是惨不忍睹。
几个月前我不得不重新制定它,但仍然被扣除了很多钱。
因此,在订购阶段应经常沟通。
不要害怕麻烦。
清晰地画出数据字典和数据流。
这是基础。

概念结构设计 2 009 年我在北京,我有一个使用E-R图的项目。
当时我觉得画画很有趣,所以我告诉用户就是“画一幅画,看看它是什么样子的”。
然而用户根本不理解,认为我是瞎画的。
后来我意识到应该用简单直观的方式来绘制图像,以便用户能够理解。
别惹那个假货。
用户想要的是一个他们能够理解的业务逻辑图。

在逻辑架构设计步骤中,2 01 0年在深圳,我第一次接触关系数据库。
当时E-R图直接映射成表格,不管形式如何。
导致数据太多的时候数据变得混乱,查询速度太慢。
后来老板骂了我一顿,我就开始学习第三式,摆脱重复,然后就慢慢进步了。
在这里,你必须学习一些东西,而不仅仅是依靠画画。

物理设计更糟糕。
2 01 1 年在杭州,系统上线前,我随意添加索引,数据库就卡住了。
当时,硬件设施很简陋,SSD 还不常见。
后来我把子弹砍了修改了一下,删除了一些索引,然后就慢慢变快了。
因此,物理设计要根据实际情况而定,不要盲目去做。

在实施阶段,2 01 2 年在广州实施了一次数据批量导入,一旦数据量增加,就会立即崩溃。
当时用的是副本数据库已过期,并且内存不足。
后来我加了内存,改了配置,然后就做了正确的事情。
因此,在实施之前需要进行测试,以免到时候失败。
运维,2 01 3 年在成都,系统上线。
用户一旦使用,就会出现问题。
有些查询很慢,有些数据不正确。
那段时间我天天搞数据库,改索引、改SQL,累坏了。
但没办法,制度还得运转,所以只能强行改变。

所以,数据库设计不是一朝一夕就能完成的事情。
这必须一步一步来,并且每一步都要做好。
别像我当年一样,处处踩绊脚石。

数据库设计的基本步骤

需求分析需要对您的业务有透彻的了解。
如果用户数量超过 1 ,000 人,访谈必须包括 2 0% 的代表。
每个月的数据量达到1 0亿,需要及早组织。

使用 ER 图的概念结构。
该项目用例很复杂,我们使用鱼尾纹方法来使其更清晰。

为您的逻辑结构选择关系类型。
选择MySQL,它支持高并发,日活用户超过5 0万。

物理设计着眼于 IO。
TPS 1 000,使用InnoDB存储热点数据。

使用SQL脚本实现。
数据量5 亿条,导入3 次。

监控操作和维护。
慢查询> 1 %,索引需要优化。

一致性取决于触发器。
订购系统、库存和订单必须同步。

完整性使用主键和外键。
对于支付系统,金额字段不得为空。

安全与防火墙相结合。
敏感数据以加密方式存储。

可扩展性取决于分区。
每天增加 1 00 万并使用范围分割。

归一化为 3 NF。
订单表不需要存储用户名,但与 ID 相关联。

自己掂量一下。

数据库设计一般经历哪些步骤?

坦率地说,数据库设计过程很复杂,分为六个阶段,每个阶段都有自己独特的要求和目标。
先说最重要的,需求分析阶段。
去年我们管理的项目规模大约是3 000个。
这一步花了两个月的时间,因为需要仔细了解和分析用户的需求,包括数据和处理。
一开始我以为这个很简单,但后来我发现这是错误的。
我必须深入了解用户的具体业务流程。

另一点是概念结构设计阶段。
这个阶段是关键。
去年,我们花了一周的时间,通过对用户需求的整合、外推、抽象,形成了具体数据库管理系统的独立概念模型。
等等,还有一件事,就是数据库的物理设计阶段。
在这个阶段,我们为逻辑数据模型选择最适合应用环境的物理结构,包括存储结构和访问方式。
大约花了1 0天的时间。

我认为值得尝试的是,在数据库的设计中,必须不断修改数据之间的关系,这样可以有效减少设计与数据之间的联系,从而为维持数据之间的平衡、提高读取数据的效率提供了保证。
另一个关键细节是索引的合理使用。
例如,我们使用聚集索引和非聚集索引来提高数据搜索的效率。

总的来说,数据库设计是一个不断修改和完善的过程,很多人都没有重视。
老实说,这很难,但是如果你掌握了这些技巧,你就可以避免很多问题。
您认为在设计数据库时还有哪些容易被忽视的点吗?