【问题标题】:Relating MySQL-table content correctly正确关联 MySQL 表内容
【发布时间】:2015-07-26 07:13:26
【问题描述】:

我在数据库中有以下表:

  • 产品
  • 组装步骤
  • 零件
  • 警告

我想将这些表格的内容关联如下: 一个产品由许多组装步骤组成。一个 assembly_step 可以有不同的部分和警告。所以我建表

  • assembly_steps_has_parts
  • assembly_steps_has_warnings
  • products_has_assembly_steps

关联数据。 ...has...-表通过外键与其相关伙伴连接。我使用 MySQL-Workbench 对其进行了建模。

我对关联信息的机制感到困惑。我如何在 PHP 中进行编程?

我认为首先您将内容添加到最低级别,即部件和警告。然后添加组装步骤并关联数据。但我不知道该怎么做。

在这里您可以找到概述:Database-Model

【问题讨论】:

  • 你能告诉我们表结构吗?
  • 我希望链接有所帮助。如果没有,请告诉我您可能还需要什么帮助:-)。让我们只关注 products/assembly_steps/parts/warnings。
  • How do I program that 程序是什么?
  • 我如何用 PHP 告诉 MySQL 带有 ID a 的部分 X 与带有 ID b 的 assembly_step Y 相关

标签: php mysql relational-database


【解决方案1】:

关系数据库通过将实体/值一起记录在表中的一行中来关联实体/值。

要将 assembly_steps 与零件相关联,只需在 assembly_steps_has_parts 中插入一行,例如如果 $assembly_step_id 中有 assembly_step_id,$part_id 中有 part_id,则:

INSERT INTO assembly_steps_has_parts (assembly_steps_id, parts_id)
VALUES ($assembly_step_id, $part_id)

【讨论】:

  • 您的回答提出了正确的解决方案,但是我没有想到 mysql_insert_id() 函数。所以我仍然需要@nomistic 写的评论。
【解决方案2】:

你不会用 PHP 编程,你会用 mysql 完全处理它。在 mysql 中的结构方式是这样的:

assembly_steps   
assembly_id
assembly_description (or something like that

assembly_id 是主键

parts
part_id
part_name

part_id 是主键

assembly_steps_has_parts    
assemply_id
part_id

在此表中,您将有一个双主键。程序集和零件 ID 都是外键 AND 各自表的主键。

双主键的工作方式是有 两个 键组成一张表上的一个主键。这意味着,它不是限制为 1 个键,而是将表限制为这些键的任何 组合 之一以生成一个。

例如:

pk1  pk2
1     1
1     2
1     3
2     1
2     2
2     3

您可以像这样查询它们(这是一个通用查询,但基本思想)

select a.assembly_description, p. part_name
from assembly_id a
join assembly_steps_has_parts ats
on a.assembly_id = ats.assembly_id 
join parts p
on ats.part_id = p.part_id

你会为其他表做同样的事情。从那时起,您只需像处理任何其他查询一样在 php 中调用查询结果。

【讨论】:

  • 我不确定我是否只是没有线索,但我的问题是没有检索相关数据(幸运的是,我知道在选择数据时如何使用 JOIN)。我想用用作外键的 ID 填充这些 ..._has_...-tables。
  • 离你不远了。只需在这些“有”表中使用双主键。例如,您有表 1(主键:table1id)和表 2(主键 table2id)。表 3,“has”表只有 两个 主键,它们也是外键,table1id 和 table2id。这样它们就可以链接到其他两个表,并且允许两者之间的任何关系组合恰好一次。
  • 我想我已经有了。 table1id 和 table2id 都是它们的表的主键和 ..._has_...-表的外键。我的问题是我不知道如何用外键填充 ..._has_...-表中的行。
  • 我想我开始明白了。我必须加入 ..._has_...-table 中的两个主键?
  • 是的,完全正确。如果您的意思是如何在 php 中链接它们,请查找 insert_id。 php.net/manual/en/mysqli.insert-id.php 这基本上会抓取您刚刚输入的最后一个 id,并将其插入到另一个表中。这样,如果您正在创建一个新的 id,关系,它将确保您将相同的 id 插入到具有相同 id 的多个表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
相关资源
最近更新 更多