Php 如何在mysql中存储商品的属性?
现在我正在规划数据库产品的结构。有一个关于货物储存选择/参数的问题。 例如,如果是货物的大小,那么创建三个宽度/高度/深度字段就足够了,但是如果有几十个参数呢? 假设参数列表可以更改,我看到了关于此结构: 1-宽度 2-高度 ... 11色 但我不能像商品一样绑定它——可以使用json类型创建字段 {1:“20”,2“30”,…,11:“白色”} 然后在样品上处理商品,但我不知道如何再做过滤参数Php 如何在mysql中存储商品的属性?,php,mysql,database,database-design,entity-attribute-value,Php,Mysql,Database,Database Design,Entity Attribute Value,现在我正在规划数据库产品的结构。有一个关于货物储存选择/参数的问题。 例如,如果是货物的大小,那么创建三个宽度/高度/深度字段就足够了,但是如果有几十个参数呢? 假设参数列表可以更改,我看到了关于此结构: 1-宽度 2-高度 ... 11色 但我不能像商品一样绑定它——可以使用json类型创建字段 {1:“20”,2“30”,…,11:“白色”} 然后在样品上处理商品,但我不知道如何再做过滤参数 谁能为正确的路径提供建议?基本上有两种方法可以做到这一点-您可以在表中创建一系列“udf”(用户定义
谁能为正确的路径提供建议?基本上有两种方法可以做到这一点-您可以在表中创建一系列“udf”(用户定义字段)列,如udf1、udf2等-然后在应用程序的其他地方说“udf1==颜色,udf2==重量” 另一种方法是创建productmeta表,其结构如下:
id BIGINT AUTO_INCREMENT PRIMARY KEY
product_id INT
property VARCHAR(16)
propvalue VARCHAR(64)
因此,对于产品ID 137,您可能有多个记录:
|------------------------------------------|
| ID | product_id | property | propvalue |
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
|------------------------------------------|
| id | product_id | meta_key | meta_value|
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
缺点是这些表可能会变得非常大,非常快。基本上有两种方法可以做到这一点-您可以在表中创建一系列“udf”(用户定义字段)列,如udf1、udf2等-然后在应用程序的其他地方说“udf1==颜色,udf2==重量” 另一种方法是创建productmeta表,其结构如下:
id BIGINT AUTO_INCREMENT PRIMARY KEY
product_id INT
property VARCHAR(16)
propvalue VARCHAR(64)
因此,对于产品ID 137,您可能有多个记录:
|------------------------------------------|
| ID | product_id | property | propvalue |
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
|------------------------------------------|
| id | product_id | meta_key | meta_value|
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
缺点是这些表可能变得非常大,非常快。这可以通过三种方法实现
产品表中添加所有独立列
产品表
的末尾添加一个带有longtext类型的列
,通过json编码或序列化在其中存储所有额外/动态参数CREATE TABLE product_meta()
id BIGINT AUTO_INCREMENT PRIMARY KEY, // Primary key of this table
product_id INT, // For joining purpose and reference
meta_key VARCHAR(16),
meta_value VARCHAR(64)
);
|------------------------------------------|
| ID | product_id | property | propvalue |
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
|------------------------------------------|
| id | product_id | meta_key | meta_value|
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
这件事可以通过三种方法实现
产品表中添加所有独立列
产品表
的末尾添加一个带有longtext类型的列
,通过json编码或序列化在其中存储所有额外/动态参数CREATE TABLE product_meta()
id BIGINT AUTO_INCREMENT PRIMARY KEY, // Primary key of this table
product_id INT, // For joining purpose and reference
meta_key VARCHAR(16),
meta_value VARCHAR(64)
);
|------------------------------------------|
| ID | product_id | property | propvalue |
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
|------------------------------------------|
| id | product_id | meta_key | meta_value|
|------------------------------------------|
| 3137 | 137 | size | large |
| 3138 | 137 | color | green |
| 3139 | 137 | height | 11.3 |
|------------------------------------------|
序列化它是行不通的——它几乎不可能进行任何适当的过滤(这是问题的一部分)。您要么在运行时反序列化每一列,要么使用复杂的正则表达式。这就是为什么我没有将其作为一个选项。您可以通过将
product\u元表
与products表
连接来进行过滤。您也可以对单独的列进行过滤,但在JSON中存储时,如果不使用正则表达式,或者使用类似于表达式的,则不可能进行过滤。序列化它将不起作用-它几乎不可能进行任何适当的过滤(这是问题的一部分)。您要么在运行时反序列化每一列,要么使用复杂的正则表达式。这就是为什么我没有将其作为一个选项。您可以通过将product\u元表
与products表
连接来进行过滤。您也可以对单独的列进行过滤,但在不使用正则表达式或类似于表达式的存储在JSON中时不可能这样做。谢谢。我希望你不要因为我选择的第一条而生气response@DmitriySkogorev因为它或多或少与我的回答完全相同,所以没关系;)非常感谢。我希望你不要因为我选择的第一条而生气response@DmitriySkogorev因为它或多或少与我的回答完全相同,所以没关系;)看我的,看我的。