【问题标题】:Extend Table with extra properties when type property is X类型属性为 X 时使用额外属性扩展表
【发布时间】:2013-09-14 20:55:28
【问题描述】:

两年前,我使用实体框架创建了一个 Web 应用程序。在此应用程序中,客户跟踪他们为客户所做的项目。

现在他们想要更新应用程序以添加一些新的项目类型。这些新类型将有一些额外的数据需要存储。

因此,此时一个项目有一个类型、开始和结束日期、描述......这些都存储在数据库中。但现在这些新类型需要一些额外的属性。

扩展当前数据库的最佳方法是什么?

只有当项目是新类型之一时,才会使用这些新属性。现有属性(日期、描述、...)在所有类型之间共享。

使用实体框架有哪些可能的解决方案?

编辑: 额外的属性将是另一个表的外键。 示例:类型 A 的项目将附有一张图片(存储在另一个表中)。

【问题讨论】:

    标签: database entity-framework database-design


    【解决方案1】:

    基本上,您可以做以下两件事之一:

    (1)创建一个链接到包含这些新属性的现有表的新表

    (2) 只需将这些新属性添加到现有表(在这种情况下,所有属性都必须可以为空,因为它们对于现有项目类型没有任何值)

    选项 #1 是有益的,因为在那个新的额外表中,您可以将这些新列定义为可为空或不可为空(根据您的业务规则的要求)。但不利的一面是,对于那些新的项目类型,您的数据现在被分成两个表,在这些情况下您需要加入这些表以获取所有信息。

    根据您使用的 .NET 版本以及所使用的实体框架,您可能会将大部分工作隐藏在将旧项目类型和新项目类型映射到一个或两个表 (something like shown in this blog post) 之后。

    选项 #2 更快、更明显 - 所有数据仍存储在一个通用表中。但由于旧项目类型没有这些新值,因此您的所有新列都必须可以为空 - 这可能不适合您的业务需求。

    【讨论】:

    • 您喜欢哪种解决方案?额外的属性将是其他表的外键,所以我认为选项 (1) 会更有意义。
    • @Beejee:如果这些真的只是指向其他表的 FK 链接,那么我只选择 #2 - 对于“旧”项目类型,它们将只是 NULL(无链接)
    • 是的,我的意思是选项 2。我切换了数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多