我想从经验丰富的程序员那里了解他们认为在设计新数据库时最重要的考虑因素.
首先,最重要的是学习和理解业务领域.
1)您是在寻找像繁忙网站这样的高交易率,还是像小型公司人力资源系统那样使用率低
2)安全性是一个大问题 - 您是在处理个人详细信息还是财务数据.或者它只是一个产品目录
3)您的用户是否会进行多次更新/插入,或者主要是只读
4)有多少用户,使用模式是什么(峰值负载或均匀分布)
5)您是否需要24x7,16x5或其他正常运行时间,24x7更难以完成,因为您没有停机时间进行维护
6)数据库有多大?如果它真的很大,你将不得不设计你的表来考虑到和/或分区
7)您是否需要查看具有热故障转移的企业集群,或者只是正常托管
8)如何管理数据库,在大多数数据库项目中95%的工作花费在为用户及其应用程序开发上,数据库管理员被遗忘
9)DB Admin,以前包括备份,对其他系统的更改,与其他系统的集成,数据加载
10)实际上,加载和使用现有数据的数据本身就是另一个大问题.
这是一个开始
数据库是业务流程设计的辅助数据库,应该以直接和简单的方式干净地支持您的业务流程.从一个索引到这里和那里,你将从一个结构良好,干净的实体模型中获得更多的好处.因此,一旦定义了您的流程,您就可以将其分解为"实体",尽可能干净利用有意义的关系.一旦了解了您的实体,它们就会转换为数据库表.
最重要的事情之一是不要overarchitect.
为了给你一些牙齿的答案,让我们以"车辆"实体为例.车辆有多个车轮.您有一个关键的决定,要知道车辆上会有多个车轮.您有两个选择 - 您可以将"轮子"设为单独的实体,或者您可以在"车辆"实体中将"轮数"设为整数字段.
如果你完全知道你需要存储关于每个轮子的大量变化信息,那么创建一个"轮子"实体.您现在拥有实体(汽车和车轮)之间的关系.
如果没有,一个简单的领域就可以了.
在设计数据库时,考虑这些关键决策并使事情变得尽可能简单是我最重要的事情.当您构建应用程序的下一层时,它可以使事物之间的区别变得非常简单和非常困难.
1 - 一致性
随着时间的推移,您的数据库将发生变化,其他人将需要使用它.做你自己和他们一个忙,并确保结构的命名方式,任何具有基本领域知识的合理的人将能够预测表的内容.花点时间写下(可能是一个简单的记事本)你使用的一些基本结构.
例子:
主键全部以IdTableName开头
表名称的套管是Pascal
外键都是TableNameId
转...
您是否选择使用下划线(替换任何其他转换为下划线)在一天结束时并不重要,只要您使用或不使用它们的方式一致.
您的数据库是数据完整性的最后一道防线.通过存储过程访问所有数据,并使用检查约束,外键等强制数据的完整性.正确键入数据,当CHAR(5)更具体和准确时,不要使用VARCHAR(50).
其他人提到了保持简单的事情.最后但并非最不重要的是不要建立一些东西,因为你"想"你下个月需要它.事情变化很快,你最终会对你"认为"你要使用的东西做更多的维护,而不是你填充数据库时所使用的东西,这些东西没有用处.
保真度与数据库应该建模的真实世界实体.