存储和使用动态属性

Cog*_*nic 4 c# architecture asp.net design-patterns

所以,我正在研究电子商务应用程序,我的客户希望能够创建类别和产品......显然.现在,假设客户将拥有大约100个类别和20,000个产品.

客户端需要能够创建对过滤有意义的类别属性....因此,类别硬盘驱动器可能具有以下属性:

  • 容量
  • RPM包
  • 构成因素

虽然类别投影仪可能具有以下属性:

  • 亮度
  • 对比度
  • 原始分辨率

我的问题是如何解决允许动态创建自定义属性的问题,但是能够使用这些属性进行搜索,过滤和报告?

不可能为每个类别创建单独的表和对象,因为我不知道它们将创建哪些类别(即HardDriveProperties,ProjectorProperties).

我想也许我可以在数据库中创建一个额外的列并将自定义属性序列化为JSON,但这仍然需要我为每个类别创建一个特定的属性对象以将JSON反序列化为一个或者一般的ProductProperties列表......我认为这可能会非常昂贵.

其他人如何解决这个问题?

Jef*_*nal 5

实体-属性-值模型(又名"开放模式")是解决这一问题的途径之一.

模式的本质是将列创建为行.而不是HardDrive(和Projector)表看起来像这样:

HardDrive(HardDriveID, Capacity, RPMs, FormFactor)
------------------    
1 1TB 7200 External
Run Code Online (Sandbox Code Playgroud)

你有Category,CategoryPropertiesCategoryPropertyValues表:

Category(CategoryID, Description)
--------
1 Hard Drive
2 Projector

CategoryProperties(CategoryPropertyID, CategoryID, Description)
------------------
1 1 Capacity
2 1 RPMs
3 1 FormFactor
4 2 Brightness
5 2 Contrast Ratio
... etc.

CategoryPropertyValues(ItemID, CategoryPropertyID, PropertyValue)
------------------
1 1 1TB
1 2 7200
1 3 External
Run Code Online (Sandbox Code Playgroud)