gpt4 book ai didi

asp.net - 新产品属性的实体属性值 (EAV) 与 XML 列

转载 作者:数据小太阳 更新时间:2023-10-29 02:09:23 24 4
gpt4 key购买 nike

我有一个现有的成熟架构,我们需要向其添加一些新的产品属性。例如,我们有 Products.Flavor,现在需要添加新的属性,如 Weight、Fragrance 等。与其继续扩大 Products 表,我正在考虑其他几个选项。首先是一个新的 Attributes 表,它将有效地成为任意属性的属性包,以及一个 ProductsAttributes 表,用于存储特定产品属性的映射(和值)。这就是实体-属性-值 (EAV) 模式,正如我对它的理解。另一个选项是向 Products 表添加一个名为 Attributes 的新列,它是 XML 类型。在这里,我们可以在不添加新表的情况下任意向任何产品实例添加属性。

每种方法的优缺点是什么?我正在使用 SQL Server 2008 和 ASP.NET 4.0。

最佳答案

这是(恕我直言)经典的数据库设计问题之一。称之为“属性蠕变”,也许,因为一旦开始,总会有另一个属性或属性要添加。他们的关键决定是,您是使用数据库提供的基本工具(表和列)将数据存储在数据库中以构建和格式化数据,还是以其他方式(XML 和名称/值对)存储数据是最常见的替代品)。简单地说,如果您以 DBMS 系统不支持的形式存储数据,那么您将失去 DBMS 系统管理、维护和使用该数据的能力。如果您只需要将它存储为“blob 数据”(全部转储,全部抽出),这不是什么大问题,但是一旦您开始必须根据这些数据进行查找、排序或过滤,它就可以得到非常丑陋非常快。

话虽如此,我确实对名称/值对和 XML 有强烈的看法,但遗憾的是,没有一个是正面的。如果您确实必须以这种方式存储数据,并且是的,这可能是一个完全有效的业务/设计决策,那么我建议您长期认真地研究如何您需要将数据存储在数据库中将来会被使用和访问。根据每种方法的使用方式权衡每种方法的优缺点,然后选择最容易管理和维护的方法。 (不要选择最容易实现的那个,您支持它的时间会比您编写它的时间长得多。)

(它很长,但 the "RLH" essay 是名称/值对运行失控的典型示例。)

(哦,如果您正在使用它,请查看 SQL Server 2008 的“稀疏列”选项。听起来不像您需要的,但您永远不会知道。)

关于asp.net - 新产品属性的实体属性值 (EAV) 与 XML 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5378899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com