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

问题描述 投票:0回答:1

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

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

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

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

谢谢您的时间,

.net-core entity-framework-core software-design
1个回答
0
投票

我在当前的副项目中正在执行此操作,并且过去也已执行过。基本上,您将有一个基本的Product表(或任何您想命名的表)。然后,您还有诸如ProductAttributeTypeProductAttribute之类的表。

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

ProductAttributeType

ProductAttributeTypeCode VARCHAR(10)
AttributeTypeName        VARCHAR(50)

[ProductAttributeTypeCode包含属性类型的短/缩写代码(例如“ BOOL”,并且AttributeTypeName是友好名称(例如“ Boolean”或“ Yes / No”)。]]

ProductAttribute

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)的适当类型匹配。如果您正确地设计代码,并且经过深思熟虑,我认为它的确还不错。

© www.soinside.com 2019 - 2024. All rights reserved.