我被赋予了设计数据库的任务,以便为我们公司存储大量信息。因为任务相当大并且包含用户应该能够做的事情的多个模块,所以我担心为此设计一个好的数据模型。我只是不想最终得到一个设计糟糕的数据库。
我希望有一些合适的数据库结构示例,用于合同/计费/订单等,以便将它们组合在一个漂亮的关系数据库中。是否有任何资源可以帮助我提供一些相关的例子?
答案 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)
数据库不应该是模型。它用于在工作会话之间保存信息。
您不应该在数据模型上构建应用程序,而应该遵循遵循业务逻辑的良好的面向对象模型。
完成对象模型之后,考虑如何保存和加载它,以及随之而来的所有数据库设计。
(但显然贵公司只是想让你设计一个数据库?而不是应用程序?)