数据库设计的六个阶段详解

等等,前几天我帮邻居老王布置书房的时候,我发现他的笔记上全是超市会员系统的设计图,还有各种图表和箭头。
他一边翻着书页,一边说这都是经过半年的研究才决定的。
那时,他每天都去超市,清点每个会员每周买的东西。
他甚至还写了老里头每周三买两瓶啤酒的习惯。

需求分析其实和这个很相似。
如果你没有问清楚,你最终设计的系统可能只是一个啤酒库存记录系统,但你忘记了老王真正想知道的是会员买了什么、收到了什么免费促销。

概念结构设计更像是老王画的草图。
他用回形针将购买啤酒和酱油的会员联系起来,并写了一个标签,上面写着“经常一起购物”。
这就是ER图最初的样子,画出了那些看不见的看得见的关系。
但后来他发现,有些买酱油的会员实际上更喜欢买红酒,这个界限有点难以划清。

设计逻辑结构可能是其中最困难的部分。
手表和钥匙比超市的价格还多。
他对着电脑屏幕挠头,但儿子终于教会他,干脆把啤酒和酱油放在同一张桌子上。
反正买完啤酒,老李头就去看酱油了。
这就是反规范化,省事,但是偶尔检查数据会慢一点。

物理设计更加具体。
他研究了硬盘和内存,最后把啤酒数据放在内存驱动器上,把酱油数据放在存储驱动器上。
原来老王每周三都会来查看啤酒促销活动,但硬盘因存有酱油数据而被堵塞。
这是因为索引做得不好。
本来应该使用B树索引,但是却使用了哈希索引。

实施阶段更加现实。
他先是手动将前三个月的会员数据一一录入,然后突然发现根本没有人在使用系统。
他自己也忘记了如何导出报告。

维护阶段最考验你的耐心。
系统上线后,王先生抱怨说,他的会员卡坏了,无法查看数据。
每天早上开灯他做的第一件事就是检查服务器的温度,生怕硬盘过热。
有时我半夜醒来,听到风扇转得很快,我就赶紧去摸硬盘,生怕真的烧坏了。

你看,数据库设计就像组织一项研究。
最后你会发现,那些精心设计的图表可能只是为了记录你记得的一些事情。

数据库设计

说实话,数据库设计分为六个步骤。
看看这个流程图,就很清楚了。

第一步是需求分析 这一步主要是为了收集用户想要的东西。
列出所有必需的数据并创建数据字典。
为了满足要求,绘制数据流图。
记得当时做这个的时候,客户讲了很多功能,最后整理成了几十个数据元素。
2 000年,我们公司正在建设一个系统,花了一个月的时间。

第二步,概念结构设计 将收集和抽象的需求编译成E-R图。
该图像与所使用的特定数据库无关。
2 003 年刚学数据库的时候,老师就强调这张图很好,以后会省去很多麻烦。
画完图,我花了两天时间,画了十多个实体和关系。

第三步,设计逻辑结构 将E-R图转换为特定数据库支持的数据模型,例如关系模型。
当我们在2 005 年构建ERP系统时,这就是我们将E-R图转换为SQL表结构的步骤。
传输完成后,还需要进行优化。
我当时用了一个算法,先设计了多个关系的表。
改进表结构花了三周时间。

第四步,设计物理结构 这一步的目的是定义存储结构和访问方法。
2 01 0年的时候,服务器的内存超过了G,所以我们选择全表扫描并建立索引。
完成物理设计后,就可以进行测试运行了。
在测试过程中,我发现了一个错误。
添加太多索引,查询变慢。
我又改了,又试了两天。

第五步、数据库实现 使用SQL和C编写程序、构建数据库、运行程序和导入数据。
2 01 5 年我们做电商平台的时候,数据量非常大,导入需要两天时间。
试运行期间也发生了同样的情况。
我发现数据不一致,所以改了三天再试。

第六步、操作和维护数据库 系统投入运行后,必须不断进行调整。
2 01 8 年,我们的系统出现故障,部分数据丢失。
我们很快就恢复了,并在恢复后调整了备份策略。
这太棒了脚步永无止境。

事实上,这六个步骤并不是一条直线,而是经常重复的。
我2 002 年搭建的系统,经过需求分析,发现逻辑设计不好,就回去改需求。
2 02 0年我搭建的云系统其实已经设计好了,但是发现云平台不支持,只好从头开始。

如你所见,数据库设计其实并不像画图那么简单。
每一步都要精准,要与用户沟通,不断调整。
2 02 1 年,我们搭建了一个大数据平台,花了一年多的时间才上线。

数据库的发展经历了哪些阶段

我上周向你提到了数据库。

人工管理水平……确实相当原始。

2 02 3 年,数据将不再被存储。
一旦程序运行完毕,它就会消失。

数据完全由程序员自己管理。
没有特殊的软件。

不同程序数据不共享。
需要重新发明轮子。

当数据结构改变时,整个程序都要改变。
累人
文件系统级别...更好。

然后可以保存数据。
保存一个文件什么的。

有文件系统软件来管理数据。
程序员没那么累。

但是数据仍然没有很好地共享。
难以链接文件。

当结构改变时,程序也必须改变。
还没有独立。

还有冗余问题。
保留相同数据的多个副本。

数据库系统级别...这是一个严肃的数据库。

结构化数据。
有层次模型、网络模型和关系模型。

可共享性更好。
多个用户可以同时使用它。

数据自由度高。
逻辑上和物理上是独立的。

有DBMS统一管理。
有定义、操作和安全性。

数据完整性、一致性和安全性得到保证。

还支持并发控制和恢复机制。
提供高级功能。

我不确定这部分......忘记它吧。