将产品和规格分成两个表格,如下所示:
products
id name
specifications
id name value product_id
当您知道产品 ID 时,获取产品的所有规格:
SELECT name,
value
FROM specifications
WHERE product_id = ?;
当您知道产品 id、规范名称和该规范的值时,为产品添加规范:
INSERT INTO specifications(
name,
value,
product_id
) VALUES(
?,
?,
?
);
因此,在您向产品添加规格之前,该产品必须存在。此外,您不能重复使用多个产品的规范。这将需要一个更复杂的解决方案:) 即...
这次是三张桌子:
products
id name
specifications
id name value
products_specifications
product_id specification_id
当您知道产品 ID 时,获取产品的所有规格:
SELECT specifications.name,
specifications.value
FROM specifications
JOIN products_specifications
ON products_specifications.specification_id = specifications.id
WHERE products_specifications.product_id = ?;
现在,添加规范变得有点棘手,因为您必须检查该规范是否已经存在。所以这会比第一种方法要重一些,因为数据库上有更多的查询,应用程序中有更多的逻辑。
首先,找到规范的id:
SELECT id
FROM specifications
WHERE name = ?
AND value = ?;
如果没有返回id,则表示该规范不存在,所以必须创建:
INSERT INTO specifications(
name,
value
) VALUES(
?,
?
);
接下来,要么使用 select 查询中的 id,要么获取最后一个插入 id 以找到新创建的规范的 id。将该 id 与获得新规范的产品的 id 一起使用,并将两者联系在一起:
INSERT INTO products_specifications(
product_id,
specification_id
) VALUES(
?,
?
);
但是,这意味着您必须为每个特定规范创建一行。例如如果你有鞋子的尺码,那么每个已知的鞋码都会有一排
specifications
id name value
1 size 7
2 size 7½
3 size 8
等等。我认为这应该足够了。