我曾参与过一个项目,该项目有一个类似这样的表格:
tbl_texts
id, item_id, item, type, lang, value
1, 44, 'product', 'name', 'en', 'Product Name'
2, 44, 'product', 'description', 'en', 'Product description'
3, 55, 'category', 'name', 'en', 'Category name'
4, 55, 'category', 'name', 'fi', 'Category finnish name'
在 6 个字段中,1 个是主键,4 个是组合索引。从未使用主键选择数据。始终使用 Item_id、item、type、lang 索引。
1)我想知道这是存储数据的好方法还是坏方法?
2)有一个必须连接两次的表是不是不好的设计(如果您想要产品的名称和描述)。
3)我应该将数据分成这样的表:
tbl_product_texts
id, product_id, type, lang, value
tbl_category_texts
(etc.)
4)或者像这样:
tbl_product_names
id, product_id, lang, name
tbl_product_descriptions
id, product_id, lang, description
(etc.)
5)或者甚至像这样:
tbl_product_names_en
id, product_id, name
tbl_product_descriptions_en
id, product_id, description
(etc.)
我真的很困惑哪种方法是最好的。
最佳答案
存储数据的“最佳”方式是一个非常开放式的问题。在设计数据存储架构时,您需要考虑多个方面:
- 您的数据是如何被访问的? (查询优化)
- 您的数据是如何创建的?
- 您的数据库架构将来发生变化的可能性有多大?
维基百科有一篇关于数据标准化的好文章:http://en.wikipedia.org/wiki/Database_normalization
我个人会根据基础数据创建有意义的表。如果产品与类别足够不同,那么我会将它们存储在不同的表中。虽然您只提供了一小部分数据样本,但我将假设每个产品都有多个名称和描述,但每种语言只有一个条目。这样你就会得到以下内容:
Products:
PK: id
...other columns that each product only has a single value for (price for example)
Product_Texts:
PK,FK: product_id
PK: language
name
description
(PK - 主键,FK - 外键)
如果您有搜索名称或描述的查询,则可以考虑根据需要在这些字段上添加更多键。
关于mysql - 在 MySQL 表中拆分数据的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709280/