存储对Mysql表的唯一引用

时间:2014-10-04 00:54:33

标签: mysql sql database performance database-design

我正在创建一个类似电子商务的网站。我希望使用不同产品的特定属性为我的用户提供完美的搜索功能。我计划创建1个产品表,存储产品之间共享的基本信息,如名称,描述,价格和其他一些。然后我打算创建几个"细节"表格中的categories_computers列有处理器,硬盘,内存等,而另一张表上写的table_shoes包含MATERIAL,SIZE,GENDER等列。

我是Mysql的新手,但不是数据库的概念。我不认为在将这些数据存储到每个表时会出现问题。我的问题来自于阅读。查询产品ID并不难,但我认为查询所有详细信息表以获取产品的详细信息非常浪费,因为1个产品只能有1个详细信息。

所以我的问题是如何在列中存储对表的引用,以便产品具有ID,Name,Description,Price,Details_Table_ID或类似的东西来保存查询。表中是否有Mysql中的唯一ID?或者Stackoverflow社区如何建议我这样做?感谢。

修改

愚蠢的我,我刚刚记得每个表名都是唯一的,所以我可以使用它,所以我的问题改为我如何编写一个包含表A中的一个单元的查询来用作对a的引用表名。

3 个答案:

答案 0 :(得分:0)

不要为每个类别使用单独的详细信息表,请使用可以存储任何属性的通用详细信息表。它的列将是:

Product_ID INT (FK to Products)
Attribute VARCHAR
Value VARCHAR

此表的唯一键是(Product_ID, Attribute)

因此,如果Product_ID = 1是计算机,则会有以下行:

1   Processor   Xeon
1   RAM         4GB
1   HDD         1TB

如果Product_ID = 2是鞋子:

2   Material    Leather
2   Size        6
2   Gender      F

如果您担心所有这些属性字符串使用的空间,您可以添加一个间接级别来减少它。创建另一个包含所有属性名称的表Attributes。然后在AttributeID表中使用Details。这会减慢一些查询,因为您需要进行额外的连接,但可以节省大量空间

答案 1 :(得分:0)

考虑只有一个像这样的ProductDetails表:

ProductDetailID (PK)
ProductID (foreign key to your Products table)
DetailType
DetailValue

这样,每次添加新的产品详细信息类型时都不必创建新列。并且每个productid都有很多ProductDetail行,这很好并且可以查询。请务必在ProductDetails.ProductID上添加索引!

答案 2 :(得分:0)

由于这是一个应用程序,因此您必须生成查询。所以让我们分2步生成它。我假设您可以在Product表中添加一列product_type_id,它将告诉您哪个子表用户。接下来创建另一个表Product_type,其中包含product_type_id和query列。此查询可用作创建最终查询的基本查询,例如

Product_type_id |查询

1 |选择计算机。*从计算机加入COMPUTERS上的产品.PRODUCT_ID = PRODUCT.PRODUCT_ID

2 |选择鞋子。*来自鞋子的产品加入COMPUTERS.PRODUCT_ID = PRODUCT.PRODUCT_ID

基于用户输入的product_id查找此表以构建基本查询。接下来将where子句附加到返回的查询中。