我使用SQL Server和Entity Framework作为ORM。
当前我有一个名为“Product”的表,其中包含所有种类的产品。不同种类的产品具有不同的属性。
例如:
- 所有类型的电视都具有标题、分辨率和对比度等属性 - 而所有汽车类型的产品都具有模型和马力等属性
基于这种情况,我创建了一个名为“Attribute”的表,其中包含产品的所有属性。
现在,要从数据库中获取产品,我必须始终连接所有属性。
要插入产品,我必须逐个插入所有属性作为单独的行。
该应用程序不仅仅是商店或类似的东西。它应该可以在不更改数据库的情况下随时添加/删除某种产品的属性。
但是,我仍然有以下几个问题:
- 这是一种不好的设计吗? - 是否有另一种方法来处理它? - 我的解决方案会显着减慢速度吗?(例如,假设产品有数百个属性,则插入需要几秒钟...)
更新:
问题在于我的应用程序非常复杂。有许多巨大的算法。该软件用于统计目的。
例如,一个问题是:在算法表中,我正在存储哪些属性用于过滤器。例如,管理员想要筛选所有马力小于100的汽车。过滤器是动态的,这意味着我有一个过滤器表,其中存储了过滤器类型(lessThan)和属性(马力)。如何使用建议的方法保持此灵活性(使用“硬编码”列)?
当前我有一个名为“Product”的表,其中包含所有种类的产品。不同种类的产品具有不同的属性。
例如:
- 所有类型的电视都具有标题、分辨率和对比度等属性 - 而所有汽车类型的产品都具有模型和马力等属性
基于这种情况,我创建了一个名为“Attribute”的表,其中包含产品的所有属性。
现在,要从数据库中获取产品,我必须始终连接所有属性。
要插入产品,我必须逐个插入所有属性作为单独的行。
该应用程序不仅仅是商店或类似的东西。它应该可以在不更改数据库的情况下随时添加/删除某种产品的属性。
但是,我仍然有以下几个问题:
- 这是一种不好的设计吗? - 是否有另一种方法来处理它? - 我的解决方案会显着减慢速度吗?(例如,假设产品有数百个属性,则插入需要几秒钟...)
更新:
问题在于我的应用程序非常复杂。有许多巨大的算法。该软件用于统计目的。
例如,一个问题是:在算法表中,我正在存储哪些属性用于过滤器。例如,管理员想要筛选所有马力小于100的汽车。过滤器是动态的,这意味着我有一个过滤器表,其中存储了过滤器类型(lessThan)和属性(马力)。如何使用建议的方法保持此灵活性(使用“硬编码”列)?
BaseProduct
表,包含通用属性,然后创建Cars
和TV
表引用基础产品表,并添加额外的属性;或者如果这仍然过于严格:**(2)** 在表上放置基本属性,将任何其他自定义属性存储到XML
列中 - 这只是我个人使用并取得巨大成功的两种选择 - 我相信还有许多其他选择! - marc_s