asp.net - 如何在数据库中维护产品的 "specification-value(s)"关系

标签 asp.net sql-server database

我有一个产品表作为 NodeID |父节点ID | NodeName 其中“节点”可以是“产品”或“类别”。比如说:

节点ID |父节点ID |节点名

0|| ||根

1|| 0 ||电子产品

2 || 1 ||手机

3 || 2 ||三星

4 || 2 ||苹果

5 || 2 ||诺基亚

6 || 5 ||诺基亚 1100

7 || 5 ||诺基亚 Lumia 800

等等..

现在,Root > Electronics > Nokia 是类别,Nokia 1100 是产品。 对于每个产品,我想要一组与产品相关的特定属性(规范)。 我在表 ProductAttributes 中维护这种关系,列为:AttributeId ||属性名 ||值(value)|| NodeID 我将在其中保留特定 NodeID(例如诺基亚 1100)的所有属性及其对应值。

因此当用户发布“Nokia 1100”时,他将在 UI 中拥有所有带有预填充值的属性。

假设现在用户发布的内容不在数据库中,例如。说他正在发布“三星焦点”。他现在可以选择要发布此请求的“类别”,在本例中为“手机”。

所以我想要的是以某种方式,应该向用户显示仅与手机相关的属性(有/没有默认值),然后用户可以选择适用的任何一个,然后发布请求。

为此,我正在考虑将一些默认属性放入“类别”,只要他选择该类别,这些属性就可用。

但我无法为这种方法和关系提出合适的表结构。我的意思是,单个类别可能有多个属性,每个属性可能有多个值。

我希望我能够描绘出我想在这里做的事情, 任何帮助表示赞赏。

最佳答案

听起来您正在寻找 EAV(实体属性值)模式

http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

请注意,尽管这种方法(有人说是反模式)布满了陷阱。

关于asp.net - 如何在数据库中维护产品的 "specification-value(s)"关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567437/

相关文章:

javascript - 自动登录网站,使用 ASP.NET

c# - 从 HttpWebResponse 反序列化 JSON 的方法

mysql - 日志 Rails 中未知的 SQL 平均查询

python - 使用 Linux 编写的 Windows GUI 实现数据库应用程序

asp.net - 页面不会填满浏览器的高度

jquery - 需要 jQuery datepicker 日历向左调整一点

sql-server - 为什么 DROP TABLE 在 SELECT INTO 之前似乎没有生效?

c# - 跟踪更改并从 Mysql -> MSSQL 进行更改的最佳方法

java - 在 SQL Server 中更改列的数据类型时保留非空 - Java

php - 在 Laravel 5 中使用中间件时找不到类 'App\Http\Middleware\DB'