我有一个包含两个表“locations”和“classes”的数据库。我很熟悉在我的数据库表中设置某种父/子情况,但这个情况让我感到厌恶。
这种关系与你期望的完全一样。 “位置”有多个“类”。但是一些“类”位于多个“位置”。那我该怎么设置呢?是否需要创建第三个表来处理关系?
我正在使用MySQL / PHP(如果重要的话)
答案 0 :(得分:3)
是的,你需要第三张桌子。这称为many-to-many relationship。该表(我建议)有一个主键,一个位置ID列和一个类ID列。
答案 1 :(得分:3)
是的,你需要第三张桌子,因为这是一对多关系。
-------- -----------------
|Class | | ClassLocation | ------------
|--------| |-----------------| | Location |
|Id | <---- |ClassId | |------------|
|Name | |LocationId | ----> |Id |
|... | ----------------- |Name |
-------- | ... |
------------
如果关系的方向很重要,甚至可能需要两个额外的表。如果“类属于位置”的含义与“位置属于类”的含义不同,则需要两个连接表,因为只有一个连接表不会告诉关系方向。但我猜你的情况并非如此。
答案 2 :(得分:2)
locations location_classes classes
+----+-------+ +-------------+----------+ +----+-------+
| id | title | | location_id | class_id | | id | title |
+----+-------+ +-------------+----------+ +----+-------+
| 1 | foo | | 1 | 1 | | 1 | clas1 |
| 2 | bar | | 3 | 1 | | 2 | clas2 |
| 3 | test | | 1 | 2 | +----+-------+
+----+-------+ | 2 | 2 |
| 3 | 2 |
+-------------+----------+
答案 3 :(得分:1)
您需要一个联接表:
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都是来自位置和类表的外键)