Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置MySQL数据库关系_Mysql_Database_Database Design - Fatal编程技术网

如何设置MySQL数据库关系

如何设置MySQL数据库关系,mysql,database,database-design,Mysql,Database,Database Design,我有一个数据库,它有两个表“位置”和“类”。我熟悉在数据库表中设置某种父/子情况,但这一次让我陷入了一个循环 这种关系的运作方式与你所期望的完全一样。“位置”有多个“类”。但有些“类”位于多个“位置”。那我该怎么设置呢?是否需要创建第三个表来处理这些关系 我正在使用MySQL/PHP(以防万一)是的,您需要第三个表。这被称为一个。该表(我建议)将有一个主键、一个位置ID列和一个类ID列。是的,您需要第三个表。这被称为一个。该表(我建议)将有一个主键、一个位置ID列和一个类ID列。您需要一个联接表

我有一个数据库,它有两个表“位置”和“类”。我熟悉在数据库表中设置某种父/子情况,但这一次让我陷入了一个循环

这种关系的运作方式与你所期望的完全一样。“位置”有多个“类”。但有些“类”位于多个“位置”。那我该怎么设置呢?是否需要创建第三个表来处理这些关系


我正在使用MySQL/PHP(以防万一)

是的,您需要第三个表。这被称为一个。该表(我建议)将有一个主键、一个位置ID列和一个类ID列。

是的,您需要第三个表。这被称为一个。该表(我建议)将有一个主键、一个位置ID列和一个类ID列。

您需要一个联接表:

tbl_location
ID: int
Name: Varchar(20)

tbl_class
ID: int
Name: Varchar(20)


tbl_classlocation
ID: int
locationID: int
classID: int
沿着这些线,基本上classlocation表连接了另外两个(locationId和classID都是位置表和类表的外键)

您需要一个连接表:

tbl_location
ID: int
Name: Varchar(20)

tbl_class
ID: int
Name: Varchar(20)


tbl_classlocation
ID: int
locationID: int
classID: int

沿着这些线,本质上是classlocation表连接其他两个表(locationId和classID都是location表和class表的外键)

是的,您需要第三个表,因为这是一个多对多关系

 --------         -----------------
|Class   |       | ClassLocation   |        ------------
|--------|       |-----------------|       | Location   |
|Id      | <---- |ClassId          |       |------------|
|Name    |       |LocationId       | ----> |Id          |
|...     |        -----------------        |Name        |
 --------                                  | ...        |
                                            ------------
-------------------
|类| |类位置|------------
|--------||--------------------位置|
|Id | | Id|
|...     |        -----------------        |名字|
--------                                  | ...        |
------------

如果关系的方向很重要,您甚至可能需要另外两个表。如果“类属于位置”的含义与“位置属于类”的含义不同,则需要两个联接表,因为只有一个联接表不能说明关系的方向。但我想你的情况并非如此。

是的,你需要第三张桌子,因为这是一个多对多的关系

 --------         -----------------
|Class   |       | ClassLocation   |        ------------
|--------|       |-----------------|       | Location   |
|Id      | <---- |ClassId          |       |------------|
|Name    |       |LocationId       | ----> |Id          |
|...     |        -----------------        |Name        |
 --------                                  | ...        |
                                            ------------
-------------------
|类| |类位置|------------
|--------||--------------------位置|
|Id | | Id|
|...     |        -----------------        |名字|
--------                                  | ...        |
------------

如果关系的方向很重要,您甚至可能需要另外两个表。如果“类属于位置”的含义与“位置属于类”的含义不同,则需要两个联接表,因为只有一个联接表不能说明关系的方向。但我想你的情况并非如此。

你能描述一下这种情况吗?ClassLocation表中的字段如何不足以表示关联的方向?你能描述一下这种情况吗?ClassLocation表中的字段如何不足以表示关联的方向?