允许用户使用自定义属性创建新数据类型



我正在做一个Web项目,用户应该能够创建自定义类型的商品,其中包含任意数量的不同类型的属性(数字,文本等(。例如:一个盒子,有名称、价格和物理尺寸,一个瓶子有名称、价格和体积。

在代码和数据库中表示这一点的最佳方式是什么? 我的第一个想法是为一件商品创建一个基本模板,并将所有自定义数据转储到一个字段中作为字符串化 JSON。缺点是这些数据不能用于IQueryable搜索,过滤,排序。

我还可以考虑创建一个单独的表,在其中存储所有商品的所有自定义字段,并通过关系引用它们。但是,这是否会导致缩放问题,因为我基本上将所有自定义属性存储在单个表中的任何位置。

这是最好的方法吗?当然,无法在 .NET Core 中动态创建新的类和数据库表,但还有哪些其他选项呢?

谢谢你的时间,

我在当前的副项目中这样做,过去我也这样做过。基本上,您将有一个基Product表(或任何您想命名的名称(。然后你还有诸如ProductAttributeTypeProductAttribute等表。

基本Product表将包含所有产品共有的属性,例如NamePrice

产品属性类型

ProductAttributeTypeCode VARCHAR(10)
AttributeTypeName        VARCHAR(50)

其中ProductAttributeTypeCode包含属性类型的简短/缩写代码(例如"BOOL"(,AttributeTypeName是友好名称(例如"布尔"或"是/否"(。

产品属性

ProductId                INT          -- Foreign key to Product table
ProductAttributeTypeCode VARCHAR(10)  -- Foreign key to ProductAttributeType table
AttributeName            VARCHAR(100) -- The name of the product attribute (e.g. "Volume")
AttributeValue           VARCHAR(MAX) -- Contains the actual value of the product attribute

ProductProductAttribute有一对多的关系。

这是我过去以及当前项目中采用的方法,效果很好。这似乎是解决此类问题的一种非常常见的方法。我能想到的唯一"缺点"是您需要确保ProductAttribute.AttributeValue列中的值与ProductAttributeType(Code)的适当类型匹配。如果你正确地设计了你的代码,并且经过深思熟虑,在我看来,它真的没有那么糟糕。

最新更新