设计数据库时最重要的考虑因素是什么?

时间:2009-02-24 02:31:41

标签: database database-design

我想从有经验的程序员那里了解他们认为在设计新数据库时最重要的考虑因素。

12 个答案:

答案 0 :(得分:22)

首先,最重要的是学习和理解业务领域。

1)您是在寻找像繁忙的网站这样的高交易率,还是像小型公司人力资源系统那样使用率低

2)安全性是一个大问题 - 您是在处理个人详细信息还是财务数据。或者它只是一个产品目录

3)您的用户是否会进行多次更新/插入或主要是只读

4)有多少用户,使用模式是什么(峰值负载或均匀分布)

5)您是否需要24x7,16x5或其他正常运行时间,24x7更难以完成,因为您没有停机时间进行维护

6)数据库有多大?如果它真的很大,你将不得不设计你的表来考虑到这个和/或分区

7)您是否需要查看具有热故障转移的企业集群,或者只是正常托管

8)如何管理数据库,在大多数数据库项目中,95%的工作用于为用户及其应用程序开发,数据库管理员被遗忘

9)DB Admin,从以前开始包括备份,对其他系统的更改,与其他系统的集成,数据加载

10)实际上,加载和使用现有数据的数据本身就是另一个大问题。

这是一个开始

答案 1 :(得分:16)

数据库是您业务流程设计的次要数据库,应该以直接和简单的方式干净地支持您的业务流程。您将从一个结构良好,干净的实体模型中获得比实体模型更多的好处。你将来自一个指数。因此,一旦定义了您的流程,您就可以将其分解为“实体”,尽可能干净利用有意义的关系。一旦了解了您的实体,它们就会转换为数据库表。

最重要的事情之一就是不要overarchitect。

为了给你一些牙齿的答案,让我们以“车辆”实体为例。车辆有多个车轮。您有一个关键的决定,要知道车辆上会有多个车轮。您有两个选择 - 您可以将“轮子”设为单独的实体,或者您可以在“车辆”实体中将“轮数”设为整数字段。

如果你完全知道你需要存储关于每个轮子的大量变化信息,那么创建一个“Wheel”实体。你现在有了实体(汽车和车轮)之间的关系。

如果没有,一个简单的字段就可以了。

在设计数据库时,考虑这些关键决策并使事情变得尽可能简单是我最重要的事情。当你构建应用程序的下一层时,它可以使事情变得非常简单和非常困难。

答案 2 :(得分:7)

1 - 一致性

随着时间的推移,您的数据库将发生变化,其他人将需要使用它。做你自己和他们一个忙,并确保结构的命名方式,任何具有基本领域知识的合理的人将能够预测表的内容。花点时间写下(可能是一个简单的记事本)你使用的一些基本结构。

示例:

  • 主键全部以IdTableName
  • 开头
  • 表名称为Pascal
  • 外键都是TableNameId
  • 分机...

您是否选择使用下划线(替换任何其他转换为下划线)在一天结束时并不重要,只要您使用或不使用它们的方式一致。

您的数据库是数据完整性的最后一道防线。通过存储过程访问所有数据,并使用检查约束,外键等强制数据的完整性。正确键入数据,当CHAR(5)更具体和准确时,不要使用VARCHAR(50)。

其他人提到了保持简单的事情。最后但并非最不重要的是不要建立一些东西,因为你“想”你下个月需要它。事情变化很快,你最终会对你认为你将要使用的东西进行更多的维护,而不是你填充数据库时所使用的东西,这些东西没有用处。

答案 3 :(得分:6)

与数据库应该建模的真实世界实体的保真度。

答案 4 :(得分:4)

我个人建议拿起或借用“数据库设计用于凡人”。您在设计数据库时需要考虑的所有内容都将列在该书中,并且它是一个非常有条理和逻辑的顺序,您可以在其中构建数据库。表格和列定义很繁琐,但值得在最后使用的每一分钟。

我相信您可以通过Google图书或Amazon.com上的页面预览阅读第一章。

您可以随着时间的推移或从本网站了解一些花絮作为“最佳实践”,但没有什么能够在第一次尝试时以正确的方式从头开始设计它。

答案 5 :(得分:2)

了解您的数据。

答案 6 :(得分:1)

一组基本要点:

  • 确定系统的用途。
  • 确定系统需要的实体。
  • 确定每个实体应提供的信息。
  • 确定实体之间的现有关系
  • 用户想要了解和处理您的数据的内容。
  • 概念和逻辑数据库设计
  • 规范化和ERD
  • 识别具有唯一值的字段。
  • 为您的字段选择适当的数据类型。
  • 数据库重构。

答案 7 :(得分:1)

您还必须了解数据库的用途。如果它是用于事务(OLTP),它应该尽可能规范化,目标是尽可能快地完成事务。如果它是用于分析和/或报告(OLAP),它应该在您将要执行聚合的许多地方进行非规范化。 OLTP数据库的设计注意事项不适用于OLAP数据库,反之亦然。

答案 8 :(得分:1)

谁将建立和维护它,在哪里,如何以及用什么。你有没有这样做的方法,程序和流程,或者只是为了实现这一目标。 当然,业务需求驱动所需的数据,这些数据应该在独立于实现的ERD中捕获。 但是,您还必须考虑谁将随着时间的推移维护数据。 以及谁“拥有”数据。谁拥有实体和属性定义。

答案 9 :(得分:1)

信息要求是最重要的部分。

这是从CMS提供的回复中说出“确定系统目的”的另一种方式。

概念数据建模只是收集和呈现信息需求的有组织方式。数据库存储和提供的每个值都连接到一个属性,每个属性都连接到一个域。反过来,属性描述实体之间的实体或关系。主题实体和关系构成了数据描述的“现实世界”的概念结构。从概念模型构建ERD很容易,尽管很乏味。

之后,您可以选择DBMS,设计逻辑数据库,设计物理数据库和构建。在每个步骤中,由于数据独立性,您做出的决策更具可逆性。数据独立性将设计决策封装在数据库中,但性能后果除外。当然,你必须知道你的工具。

拥有一个用于管理模型并将其转换为图表和脚本的工具对于加快此过程并减少错误非常有帮助。

但如果您的信息要求存在严重错误或遗漏,那么任何巧妙的设计或实施都无法弥补这一点。

答案 10 :(得分:1)

一个好的数据库可以判断如下:

如果数据库设计得当,您应该能够通过查看架构来了解业务的运作方式。

换句话说,数据库业务。如果数据库没有反映业务的运行方式,则说明数据库错误或业务错误。

数据库也是你真正需要预先确定的少数事情之一。您总是可以修复错误的代码,但很少能退出错误的架构更改。确保做得对。

答案 11 :(得分:0)

  • 命名约定:坚持一套规则
  • 规范化:(规范化程度) - 这将取决于读取次数与数据实体的更新次数比较。
  • 关系完整性和其他限制:有些人提倡使用外键而有些则没有,但你必须根据你的要求和个人喜好选择,因为这是一个很大的争论,但我总是选择使用FKs
  • 尽可能创建数据库图表,与团队进行分析和讨论。