寻找数据库设计 - 最佳实践示例的好地方

时间:2010-03-09 10:05:24

标签: database

我被赋予了设计数据库的任务,以便为我们公司存储大量信息。因为任务相当大并且包含用户应该能够做的事情的多个模块,所以我担心为此设计一个好的数据模型。我只是不想最终得到一个设计糟糕的数据库。

我希望有一些合适的数据库结构示例,用于合同/计费/订单等,以便将它们组合在一个漂亮的关系数据库中。是否有任何资源可以帮助我提供一些相关的例子?

5 个答案:

答案 0 :(得分:22)

Barry Williams已经发布了一个包含大约六百种数据模型的库,可用于各种应用程序。几乎可以肯定,它将为您的所有子系统提供“十个启动器”。访问此库是免费的check it out

听起来这是您组织想要的大型“企业级”应用程序,而您似乎是数据库的初学者。如果可能的话,你应该从一个子系统开始 - 例如,订单 - 然后开始工作。不只是数据库表构建,而是一些骨架前端。一旦足够好,就可以添加另一个相关的子系统,例如Billing。你不想最终成为一个庞大的怪物。

还要确保您拥有一个不错的数据建模工具。 SQL Power Architect对于免费工具来说已经足够了。

答案 1 :(得分:10)

在开始阅读规范化之前,直到你完全没有问题为止。如果你只是在学校这样做,你可能还不太了解它的设计。

仔细收集每个模块的要求。你需要知道:

业务规则(特定于应用程序并且必须在数据库中强制执行,因为它们必须在所有记录上强制执行,无论来源如何),

是否存在法律或监管方面的问题(例如HIPAA或Sarbanes-Oxley要求) 安全性(数据是否需要加密?)

您需要存储哪些数据以及原因(此数据可在其他任何位置使用)

哪些数据只有一行数据,哪些行需要多行

您打算如何强制执行每个表中行的唯一性?你有自然钥匙还是需要代理钥匙(几乎在所有情况下都建议使用代理钥匙)

你需要复制吗?

您需要审核吗?

如何将数据输入数据库?它是来自应用程序一次一个记录(甚至来自多个应用程序),还是来自ETL工具或其他数据库的批量插入。

您是否需要知道谁进入了记录以及何时进入(很可能在企业系统中这是必要的。

您需要什么样的查找表?当您可以使用查找表并将用户限制为值时,数据输入会更加准确。

您需要什么样的数据验证?

系统有多少记录?您需要知道如何创建测试数据。

您将如何查询数据。您将使用存储过程或ORM或动态查询吗?

您设计中需要记住的一些非常基本的事情。为您的数据选择正确的数据类型。不要在字符串字段中存储您打算进行数学计算的日期或数字。将不适合数学的数字(部件号,邮政编码,电话号码等)存储为字符串数据,因为您可能需要前导零。不要在字段中存储多条信息。因此,没有逗号连接列表(这些表示需要相关表格),如果您发现自己正在执行类似phone1,phone2,phone 3的操作,请立即停止并设计相关表格。使用外键来实现数据完整性。

您的设计一直考虑数据完整性。没有完整性的数据毫无意义且毫无用处。进行性能设计,这在数据库设计中至关重要,并不是过早优化。数据库不容易重构,因此在第一次正确获得性能方程中最关键的部分非常重要。实际上,所有数据库都需要设计用于数据完整性,性能和安全性。

不要害怕有多个连接,正确索引这些将表现得很好。不要试图将所有内容都放入实体值类型表中。尽可能少地使用它们。尝试学习如何处理数据集,这将有助于您的设计。数据库经过优化,可以集中处理。

还有更多,但这足以开始消化。

答案 2 :(得分:2)

数据模型资源手册。

http://www.amazon.com/Data-Model-Resource-Book-Vol/dp/0471380237/ref=dp_cp_ob_b_title_0

重要的东西,但是很好。总共3卷...

在通用结构方面有很多很好的东西 - 但它们并不容易,因为它们涵盖了所有内容;)但总是一个很好的起点。

答案 3 :(得分:2)

尽量将您的疑虑分开。能够更新数据库的用户更多的是“应用程序设计”问题。如果你的数据库设计正确,那么应该为它开发一个漂亮的前端。

首先要看的是Normalization。这是从表中删除任何冗余数据的过程。这有助于保持数据库的整洁,并且只存储与您的需求相关的信息。

答案 4 :(得分:0)

数据库不应该是模型。它用于在工作会话之间保存信息。

您不应该在数据模型上构建应用程序,而应该遵循遵循业务逻辑的良好的面向对象模型

完成对象模型之后,考虑如何保存和加载它,以及随之而来的所有数据库设计。

(但显然贵公司只是想让你设计一个数据库?而不是应用程序?)