【问题标题】:Extending business model and store it in database扩展业务模型并将其存储在数据库中
【发布时间】:2010-06-28 13:25:10
【问题描述】:

我有一个关于 C# 4.0、MS SQL 和通过 ADO.NET 实体数据模型生成的业务对象的(有点笼统的)问题。

假设我得到了带有行的 MS SQL 表 Foo:

  • ID 唯一标识符
  • 标题 nvarchar(20)
  • 描述文字
  • 附加数据图片

我最初的想法是将自定义数据(扩展属性及其值)序列化到 ADDITIONALDATA 字段。

但现在的问题是 - 我在哪里可以指定这些附加属性?在配置文件(即 web.config)中?还是有其他/标准的方法来实现这一点?

【问题讨论】:

    标签: sql c#-4.0 business-objects


    【解决方案1】:

    您能否提供更多详细信息,说明您究竟想在此处存储什么?如果您在“ADDITIONALDATA”中有一些序列化对象,那么几乎不可能使用任何其他工具来访问您的数据 - 例如,报告工具。

    在大多数情况下,您应该对实际存储在数据库中的内容进行建模。大多数时候,属性可以(大致)等同于数据库中的列。这允许您在某种程度上解耦数据库和应用程序。否则,您的应用程序将是唯一知道如何读取数据库的东西。

    编辑:

    您可以使用实体-属性-值模型,尽管这种方法有很多潜在的缺陷。另一种可能性是将数据作为 XML 存储在列中。同样,这也不是没有问题。虽然您至少可以使用 SQL 的 XML 函数在 XML 中进行搜索,但它的性能并不好。问题是你试图为一个没有完全充实的问题提出一个通用的解决方案。因此,您采取的任何方法都会出现问题。如果我必须选择,我可能会选择 EAV 模型,尽管我很讨厌它,而 XML 紧随其后。

    【讨论】:

    • 这个想法是让用户指定自定义产品属性。所以会有一组基本属性,比如价格、重量……但我想提供一种设置更多属性的可能性——比如说——颜色和大小(或者我现在想不到的其他奇特的东西,这就是重点)。有不同的方法吗?
    • 我对此的回答有点长,所以我把它作为我的回答的编辑。
    • 谢谢,这个 EAV 模型听起来不错,我试试看。在维基百科上阅读它时,我发现了熟悉的术语备用矩阵 - 我不知道这个“模型”可以应用于数据结构。
    【解决方案2】:

    因此,如果您计划序列化某些数据并将其放在列 (ADDITIONALDATA) 中,那么您的设计首先要注意几件事,该列不应该是图像类型。如果您使用 XML 类型,您将能够存储数据并且可以查询它,尽管查询它会有点麻烦。

    正如 Tom H 所指出的,您的设计存在一些缺陷。您会发现大多数时候您会看到 3 个表格用于您想要完成的任务。

    1. 存储 Foo 的表。
    2. 用于存储 Foo 属性类型的表。 Foo_Att_ID,Foo_Att_Name
    3. 用于存储附加 Foo 属性类型的值的表。 Foo_ID,Foo_Att_ID,值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多