0

我有一个包含特定类别产品的表格,但每个类别中的产品可以包含多个元数据跟踪字段

桌子: products

 id    name          category     metadata
 1   something          1      blue,red,purple
 2   something else     2      left,right,middle

我一直在尝试考虑拥有单个产品表的最佳方法,但似乎无法方便地压缩元数据。现在我已经创建了一个包含所有元数据和字段的表,用于跟踪相关类别(顺序是这样我可以使用下拉列表等对它们进行排序......)

更新表: products

 id    name          category   metadata
 1   something          1         1,2,3
 2   something else     2         4,5,6

桌子: metadata

 id   category   sequence   option
 1        1         1        blue
 2        1         2        red
 3        1         3        purple
 4        2         1        left
 5        2         2        right
 6        2         3        middle

如果这种格式有意义.. 我正在尝试生成一个查询,该查询将在我的产品表中搜索值并获取每个和所有相关的元值。我遇到的问题是试图在产品领域找到一个独特的价值。如果我进行 MySQL 搜索,LIKE(%1%)我将得到 1、11、21、31 等的匹配项......我想默认情况下在字段中添加一个前导和尾随逗号,然后搜索",1,"哪个是唯一的......但是有成为更好的方法...

有什么建议(关于格式或查询)?

4

2 回答 2

4

在单个数据库字段中使用逗号分隔的值并不是一个理想的设计。除了您提到的问题(难以搜索)之外,您的查询效率会降低,因为数据库将无法使用索引进行查找。

我建议制作一个与products 表具有多对一关系的单独表products_metadata 。拥有*metadata_id* 和*product_id*,这是一个链接回产品表的外键。这将使您的工作更轻松。

于 2012-04-25T10:11:25.367 回答
1

您想添加另一个表,将产品链接到它们的元数据。它将有两列:productid和分别引用和表metadataid中的相关条目。然后,您不再将元数据保留在表中,而是根据需要将它们放在一起。productsmetadataproductsJOIN

于 2012-04-25T10:10:48.273 回答