设计可扩展的数据库模型

时间:2010-05-02 16:33:55

标签: model-view-controller design-patterns database-design

目前我正在做一个规格不明确的项目 - 好吧谁没有。我想知道设计数据库的最佳开发策略是什么,迟早会扩展其他表和关系。我想要包括“可变性”。

我主要担心的是我想应用设计模式(这是一个大学项目),我想通过选择合适的设计模式将常数因素与那些因素分开 - 在我的案例中是MVC和一组子模式在模型层面。 然而,当涉及到DB时,我可能不得不在我的MVC方法中重新设计我的模型,因为我的域模型在稍后阶段需要一组表示DB表的不同类。我使用Hibernate作为数据库和应用程序之间的抽象层。

你会从一个非常小的数据库开始,只是几个表和关系?如果我想要一个高效的数据库怎么办?我想知道在现实世界中应用了哪些策略。例如,在改变需求时,利益相关者分析并不是一个充分的规划解决方案。我认为 - 在数据库级别 - 我的设计模式结束了。因此,我希望通过智能策略将影响降到最低点。

5 个答案:

答案 0 :(得分:4)

在不清楚的情况下,我更喜欢简约的数据库设计,支持现在已知的需求。我的经验是,任何聪明的努力,为未来需求建模都会使模型更加复杂。当新的需求出现时,它们往往处于不可预见的领域。针对未来需求的额外建模不符合新的需求,而是使得所需的重构更加困难。

由于您已经选择了Hibernate来分离数据库设计和OO模型,我认为坚持使用尽可能简单的数据库是一个不错的选择。

答案 1 :(得分:3)

“目前我正在做一个规格不明确的项目”

鉴于'database'标签,我假设您在数据库上下文中询问此问题。

请记住,数据库是一组 ASSACTTIONS OF FACT (大写意图)。

如果不清楚您的用户想要由数据库注册什么样的“事实断言”,那么您根本无法定义数据库的(结构)。

首先尝试清除所有不清楚的内容,然后您将帮助自己和用户。

答案 2 :(得分:2)

在一个简单的答案中:BE MINIMALISTIC。

尝试找出主要实体。不要担心属性,稍后您将填写它们。然后,创建实体之间的关系。使用你最喜欢的ORM(Hibernate?)创建一个测试应用程序,构建一些单元测试,并且你有最小的数据库操作。 :)

答案 3 :(得分:1)

您所描述的几乎是每个项目的典型内容。但是你可以做一些事情。

尝试隔离问题域的概念(而不是它们的实现)。请记住:扩展数据模型几乎总是很容易(添加新表,新列等),但更改数据模型很困难,需要数据迁移。

我提倡使用敏捷开发流程:仅实现您现在所需的内容,但请确保在建模之前了解完整的问题。

在开始破解代码之前,您应该检查的另一件事是您选择的基础设施是否合适。当您想要经常更改模式时使用关系数据库通常是不匹配的。文档数据库是无模式的,因此更灵活。我认为您应该使用关系数据库进行评估,这对您的应用程序来说非常合适。

答案 4 :(得分:1)

没有任何项目始于完全已知和固定的要求。使用敏捷,迭代的方法进行数据库设计,以便在开发过程中适应变化。

所有数据库设计都是可扩展的,并且在其生命周期内可能会发生变化。不要试图避免改变。只需确保您拥有合适的人员和流程,以便在发生变更时有效地管理变更。