mysql - 存储对 Mysql 表的唯一引用

标签 mysql sql database performance database-design

我正在创建一个类似电子商务的网站。我想利用产品之间不同的特定属性为我的用户提供完美的搜索能力。我计划创建 1 个产品表,存储产品之间共享的基本信息,即名称、描述、价格和其他一些信息。然后我计划创建几个“详细信息”表,例如categories_computers,其中包含处理器、HDD、RAM 等列,另一个表为table_shoes,其中包含MATERIAL、SIZE、GENDER 等列。

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

所以我的问题是如何在列中存储对表的引用,以便产品具有 ID、名称、描述、价格、Details_Table_ID 或类似的内容以在查询时保存。 Mysql 中的表有唯一的 id 吗?或者 Stackoverflow 社区建议我如何解决这个问题?谢谢。

编辑

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

最佳答案

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

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。然后使用 Details 表中的 AttributeID。这会减慢一些查询的速度,因为您需要进行额外的联接,但可以节省大量空间

关于mysql - 存储对 Mysql 表的唯一引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26188594/

相关文章:

mysql - 有没有一种方法可以选择一个值并将其他相同的值转换为 null

mysql - 具有相同标识符的多行,如何通过多个左连接选择具有最高值的行(忽略其余行)?

java - JPA/Hibernate 中的单独表与额外列

java - 如何正确使用hibernate session ?

php - 使用 mySQL 和 PHP 登录时出现问题

php - 如何转义\in mysql查询

mysql - 本地主机页面响应时间太长

mysql - 我如何离开加入子查询

database - 选择多模型DBMS时应考虑哪些因素? (OrientDB与ArangoDB)

PHP MySQL 打印光标到网页?