gpt4 book ai didi

php - 插入多对多数据库和取消背后的逻辑

转载 作者:行者123 更新时间:2023-11-30 23:48:46 27 4
gpt4 key购买 nike

我正在建立一个网站,我对 php 和 sql 有一点了解。当涉及到数据库中的多对多关系时,我遇到了很多问题。

我有专门针对每种 Material 的产品,例如2种 Material 不能有相同的产品

Material 有真皮、仿皮、布料、PVC

使用领域是指该 Material 可以使用的领域:运动、休闲、工作

问题是 Material 可以用在很多领域,一个领域关联很多 Material ,所以是N:M

一个产品可以用于多个领域,一个领域可以用于多个产品,N:M也是如此

例如,皮革可用于工作、运动,布料可用于工作运动和办公室

产品可用于部分或所有应用领域,反之亦然。

要实现这一点,架构 A 还是架构 B 更好?

(产品始终具有相同的 Material 应用领域,不能属于具有应用领域 Material 的 Material 没有的产品)

A) http://i60.tinypic.com/27zdk4k.jpgB) http://i57.tinypic.com/2mhc03o.jpg

如果我理解正确的话,多对多关系在两者之间使用“中间”表。

所以,当涉及到在我的数据库中插入数据和值时,我所拥有的是:

Material

  • 1 皮革

  • 2布

MATERIAL_APPL_FIELD

  • 1 1
  • 1 2
  • 2 2

APPLICATION_FIELD

  • 1 名航海家
  • 2 休闲

这样,皮革就有了2个应用领域。但我如何才能以巧妙的方式填充中间表?

还有当我想取消某些东西时,哪种架构更好?我应该取消所有表吗?

最佳答案

这是另一个很好的解决方案:

创建表materials (material_id tinyiny unsigned not null auto_increment primary key, material varchar(60));

create table uses (use_id tinyiny unsigned not null auto_increment primary key, use varchar(60));

创建表应用程序(application_id int unsigned not null auto_increment primary key, material tinyint unsigned, use tinyint unsigned, active tinyint unsigned default = 1);

插入应用程序( Material ,用途)值(?,?);

问号代表 Material 的 ID 和用途的 ID。

最好不要实际删除表中的行。相反,您可能希望停用它们。试试这个:

更新应用程序 set active = 0 where application_id = ?;

更新应用设置 active = 0 where material = 1 and use = 2;

更新应用程序设置 active = 0 where material = (select material_id from materials where material = 'leather') and use = (select use_id from uses where use = 'sport');

关于php - 插入多对多数据库和取消背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22232338/

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