假设我有一家商店销售属于不同类别的产品......并且每个类别都有相关的属性......比如钻头可能有涂层,直径,螺旋角等等。问题是我希望用户能够编辑这些属性。如果我不想让用户更改属性,并且我正在为一组特定类别构建商店,那么我会有一个用于钻头的表,等等。或者,我可以在线修改模式但是似乎没有经常进行(除非我们正在谈论phpmyadmin或其他东西),并且加上它与模型与表格耦合的方式完全不符合。
一般情况下,我有兴趣在mysql中实现具有各种数据类型的多表数据库结构(因为直径可能是小数,涂层将是表中的字符串/索引等)。知道如何做到这一点吗?
答案 0 :(得分:1)
如果我正确地理解了您的要求,那么,一个公认的hacky解决方案就是拥有一个products
表,该表必须与相关表product_properties
和product_properties_lookup
(或某些表)相关联更好的名称)其中product_properties_lookup
为product
可以拥有的每个可能属性都有一个条目,其中product_properties
包含属性值作为字符串,其中包含属性的ID和ID产品。然后,您可以将属性值强制转换为您想要的任何类型。不太理想,但我不确定还有什么不能为数据库中的属性类型添加单个列。
答案 1 :(得分:1)
只需使用数据库。它已经做到了这一切。免费。而且很快。如何让产品表指向一个属性表,其数据类型与具有列的表有任何不同?不是。保存,如果使用DBs表,则可以使用SQL以各种简洁有效的方式查询它,与您自己的(SQL dbs中的交叉表相同)进行查询。
获取新产品,制作新表。没什么大不了。获取一个新属性,改变表格。如果该表中有1M个产品,那么,它可能是一个缓慢的更新(取决于数据库)。你有1M产品吗?我不认为WalMart有1M产品。
在数据库之上构建数据库是一件很蠢的事情。只需使用那里的那个。它是腻子在你手中。随心所欲地塑造它。
答案 2 :(得分:1)
首先创建属性表。这将包含所有属性。它应该(至少)有一个Name列和一个Type列('string','boolean','decimal'等)。注意:所有这些表都隐含了主键。
接下来,创建一个 CategoryProperty 表。在这里,您可以将属性分配给类别。它应该包含以下列:CategoryID,PropertyID。两个外键。
然后,创建类别表。这描述了类别。它应该有一个Name列,可能还有其他一些列,如Description。
然后,创建 ProductCategory 表。在这里,您将为每个产品分配类别。它应该包含以下列:CategoryID,ProductID。两个外键。
接下来,创建一个 PropertyValue 表。在这里,您将“实例化”属性并为它们赋值。列包括ProductID,PropertyID和PropertyValue。主键可以包含ProductID和PropertyID。
最后,创建一个产品表,该表仅描述名称,价格等列的每个产品。
注意每个关系如何有一个单独的表。如果您只想为每个产品分配一个类别,则可以取消使用ProductCategory表,只需在Product表中放置一个CategoryID字段即可。同样,如果您希望每个属性只属于一个类别,则可以将PropertyID列放在Category表中,并删除CategoryProperty表。
最后,您将无法验证每个属性的数据类型,因为每个属性都有不同的类型(它们是行,而不是列)。因此,只需将PropertyValue列设为字符串,然后以触发器或在应用程序中执行验证,方法是检查该属性的Property表的Type列。
答案 3 :(得分:1)
如果您使用的是最新版本的mysql(5.1.5或更高版本),则可以将数据作为XML存储在数据库中。然后,您可以使用这样的符号查询该数据。
假设我有一个包含一些项目的表,并且我有一个包含许多项目的widgetpack 小部件。我可以得到我的小部件总数:
SELECT SUM( EXTRACTVALUE( infoxml, '/info/widget_count/text()' ) ) as widget_count
WHERE product_type="widgetpack"
假设表有一个infoxml列,每个widget包的infxml列包含看起来像这样的XML
<info>
<widget_count>10</widget_count>
<!-- Any other unstructured info can go in here too -->
</info>
数据纯粹主义者会对此感到畏缩,这有点像黑客。但通常更容易将所有非结构化数据保存在一个地方。
答案 4 :(得分:0)
在 DatabaseAnswers.org 上查看此数据库架构:
http://www.databaseanswers.org/data_models/products_and_generic_characteristics/index.htm
答案 5 :(得分:0)