【问题标题】:Should I use and add on to the existing denormalized DB structure, or create my own?我应该使用并添加到现有的非规范化数据库结构,还是创建自己的?
【发布时间】:2011-10-01 03:19:15
【问题描述】:

我们有一个第 3 方软件,我被要求为其创建一个扩展程序。该扩展将处理当前软件中存在的数据,并包含一些附加数据。

现有数据极度非规范化。我将使用的大部分数据(大约 4-5 个不同的实体)都存在于一个表中。我需要为这些实体中的大多数添加额外的字段。

我看到了两种方法:

  1. 为新字段创建一个新表,与现有表 1:1 匹配并使用它们使用的相同非规范化样式

    优点:适合现有的非规范化数据库结构,并且易于创建

    缺点:非常非规范化,而且我有点痴迷于规范化我的数据库。当前表已经有超过 50 列,它应该真正分成 4-5 个不同的表。

    我也不认为我可以轻松地将 EF 与当前的数据库结构(我使用数据库的首选方式)一起使用,并且必须在代码中手动创建数据模型,而不是使用 EF 来生成它们

  2. 创建一组全新的表并使用触发器来同步表之间的数据

    优点:可以按照我想要的方式创建表,并且可以使用 EF 处理数据库操作,并为我生成数据模型

    缺点:需要使用触发器与现有表同步数据

你认为哪个更好?

【问题讨论】:

    标签: database sql-server-2005 entity-framework database-design


    【解决方案1】:

    我认为这取决于您正在查看多少扩展程序。如果您要在现有界面中添加一些花里胡哨,尤其是如果您不必包装现有界面,那么您最好还是忍住鼻子并忍受丑陋的基础数据结构。

    这一切都归结为要构建和维护的代码堆更小:

    1. 因非规范化基数 + 扩展属性而变得丑陋的扩展代码 - 或 -

    2. 干净的扩展代码+所有丑陋的表同步触发代码。

    在我看来,如果扩展真的很大,那么 2 可能会小于 1。但是,如果您只看那些花里胡哨的东西,那么 1 可能会很多小于 2。

    【讨论】:

      【解决方案2】:

      我认为答案是如何最好地利用您的时间以及您现在和将来对牌桌的控制程度。就我个人而言,我会创建一个具有某种关系的备用表。如果您选择修改现有表,您不仅现在必须对应用程序进行回归测试并测试您的新应用程序,而且您还要承担未来更新破坏这两个应用程序的风险。所以我说,用你能控制的东西工作。您的时间将得到更有效的利用,并且您在未来的风险更低。为您智能,为企业智能。希望对您有所帮助。

      【讨论】:

      • 我可能应该改写第一个选项...我实际上不会编辑现有表,而是使用相同的数据库样式创建一个 1:1 链接到它的新表以获取其他数据。这是我们过去为他们的其他桌子所做的。
      • 我会遵循选项一。我认为选项二太过分了,可能是管理方面的噩梦。考虑一下在没有您帮助的情况下将其转移给其他开发人员的难易程度。我想我的立场是减少工作量、减少数据管理、易于维护和可靠性。
      • 我非常同意 Jeff 在上述评论中的立场。对喜欢的图案或风格的“痴迷”不足以做出商业决策。我可以理解它,并尝试改变现有的东西或以我自己的风格扩展它(反对那里的东西)。就所消耗的时间和金钱而言,这几乎总是一个错误。除非您的扩展非常庞大并且您有足够的时间(这将允许您在数据库中建立自己的基础),否则我会与痴迷作斗争并更喜欢简单模式。在可以从头开始的项目中遵循您的偏好。
      猜你喜欢
      • 2013-07-26
      • 2018-07-08
      • 2017-01-27
      • 2011-05-18
      • 1970-01-01
      • 2017-09-12
      • 2010-10-07
      • 1970-01-01
      • 2010-10-07
      相关资源
      最近更新 更多