sql – 如何为实体的自定义属性建模?
发布时间:2020-12-12 06:52:04 所属栏目:MsSql教程 来源:网络整理
导读:假设我们有一个应该能够存储所有类型产品的应用程序.每个产品至少具有ID和名称,但是所有其他属性可以由用户自己定义. 例如他可以创建一个包含属性容量和生成的产品组Ipods 例如他可以创建一个具有属性大小和颜色的产品组TShirts 我们需要存储产品的定义和具体
假设我们有一个应该能够存储所有类型产品的应用程序.每个产品至少具有ID和名称,但是所有其他属性可以由用户自己定义.
>例如他可以创建一个包含属性容量和生成的产品组Ipods 您如何根据上述要求对架构进行建模? 注意:要求4.很重要! 感谢大家的贡献和讨论方法.我在过去看到过这个问题的一些解决方案,但没有一个能让我轻松分组:( 解决方法分组并不容易,因为你要在“颜色”上使用哪个聚合运算符?请注意,无法在案例2中使用您的要求4.在任何情况下,由于数据类型的变化,聚合只是困难,并且可以通过以更加类型安全的方式接近它来减轻 – 知道添加苹果和橙子永远不会有意义. 这是经典的EAV模型,它在精心设计的数据库中占有一席之地.为了使其更加类型安全,我已经看到了这些值存储在类型安全表而不是单个自由形式varchar列中的情况. 而不是价值观: EntityID int,AttributeID int,Value varchar(255) 你有多个表: EntityID int,ValueMoney money EntityID int,ValueInt int etc. 然后获得每代的iPod容量: SELECT vG.ValueVarChar AS Generation,SUM(vC.ValueDecimal) AS TotalCapacity FROM Products AS p INNER JOIN Attributes AS aG ON aG.AttributeName = 'generation' INNER JOIN ValueVarChar AS vG ON vG.EntityID = p.ProductID AND vG.AttributeID = aG.AttributeID INNER JOIN Attributes AS aC ON aC.AttributeName = 'capacity' INNER JOIN ValueDecimal AS vC ON vC.EntityID = p.ProductID AND vC.AttributeID = aC.AttributeID GROUP BY vG.ValueVarChar (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |