gpt4 book ai didi

php - 改进比较网站的表结构设置

转载 作者:行者123 更新时间:2023-11-29 08:14:11 24 4
gpt4 key购买 nike

我创建了一个包含产品规范、产品名称、商店的数据库。规范表(product_specs_koppel)的设置如下:

pid | sid | value
1 | 1 | Y
2 | 1 | N
1 | 2 | 30
2 | 2 | 30

其中 pid = 产品 ID,sid = 规范 ID,value 是该规范的值。到目前为止没有问题,我存储规范的名称是一个不同的表,可以在 sid 上链接。

问题来自于数据库的选择。举个例子,我想选择所有 pid,条件如下:

  • sid 1 -> Y
  • sid 2 -> 30

我可以在主查询中创建两个子查询,但这不是一个可扩展的解决方案:

SELECT 
p.naam, k.pid, waarde
FROM
product_producten p
INNER JOIN product_specs_koppel k ON (k.pid = p.id)
WHERE
k.pid IN
(Select k1.pid from product_specs_koppel k1 where k1.sid = '1' AND
k1.waarde = 'Y') AND
k.pid IN
(select k2.pid from product_specs_koppel k2 where k2.sid = '2' AND
k2.waarde = '30')

如果有更好的方法来设置数据库或将我的查询更改/更新为更具可扩展性的解决方案,有什么建议吗?

最佳答案

您创建的设计通常称为“实体/属性/值”或 EAV。你的产品是实体,属性是规范,“值”列确实是值。

这种设计有优点也有缺点 - 在 Stack Overflow 上经常讨论 - 并且您已经发现了其中一个很大的缺点:在多个属性上构建查询确实很困难。您创建的设计中的另一个问题是您的“值”列不一定能很好地进行数字比较 - 想象一下您如何在 25 到 40 之间调整值。

据我所知,现在标准 EAV 模型可以解决这个问题。

大多数人使用 EAV 是因为他们拥有异构的、不可预测的数据模式。这种数据本质上很难容纳在关系模型中。

您可能需要考虑以文档为中心的解决方案(例如 XML)或 NoSQL 解决方案。

关于php - 改进比较网站的表结构设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20936468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com