寻找数据库设计的好地方 - 最佳实践[关闭]

问题描述 投票:24回答:5

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

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

database
5个回答
10
投票

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

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

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

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

您需要存储哪些数据以及原因(这些数据是否可在其他地方使用)

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

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

你需要复制吗?

你需要审计吗?

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

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

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

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

大致有多少记录系统?您需要了解创建测试数据的大小。

你打算怎么查询数据。您将使用存储过程或ORM或动态查询吗?

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

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

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

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


22
投票

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

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

还要确保你有一个不错的数据建模工具。 SQL Power Architect非常适合免费工具。


2
投票

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

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


2
投票

数据模型资源手册。

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

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

通过通用结构有很多非常好的 - 但它们并不容易,因为它们涵盖了一切;但总是一个很好的起点。


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.