MySQL添加关系而不创建重复

时间:2019-02-06 21:41:27

标签: mysql database duplicates

我这样创建了一个表(t_subject)

| id | description | enabled |
|----|-------------|---------|
| 1  | a           | 1       |
| 2  | b           | 1       |
| 3  | c           | 1       |

还有另一个这样的表(t_place)

| id | description | enabled |
|----|-------------|---------|
| 1  | d           | 1       |
| 2  | e           | 1       |
| 3  | f           | 1       |

现在t_subject记录中的每条记录都使用t_place中的数据,以显示HTML下拉列表以及t_subject中的所有结果。

所以我只是做

SELECT * FROM t_subject WHERE enabled = 1

现在仅对t_place条记录中的一条记录,应隐藏t_subject中的一条记录。 我不想简单地使用javascript删除它,因为我希望能够自定义所有下拉列表(如果发生任何更改)。

因此,我要做的第一件事就是向place_id添加一个t_subject列。 但这意味着我必须复制所有t_subject记录,每个记录要有3个,除了一个记录要有2个。

有什么办法可以避免这种情况?

我认为要在id_exclusion上添加一个t_subject列,这样我就只能在t_place的另一个ID中排除一条记录时才复制记录。

那有多糟??这样,到目前为止我将没有重复。

希望所有这些都是有道理的。

1 个答案:

答案 0 :(得分:2)

虽然您只需要排除一门课程,但我仍建议您建立一个完整的“地方课程”关联。尽管没有显式链接表,但您实际上具有多对多关系。

我建议使用一个附加的“桥接”或“ associative entity”表来表示在哪些地方提供哪些课程。该新表将具有两列-一列ID为t_subject的外键,另一列为ID t_place的外键。

例如(t_place_course):

| place_id | course_id |
|----------|-----------|
| 1        | 1         |
| 1        | 2         |
| 1        | 3         |
| 2        | 1         |
| 2        | 2         |
| 2        | 3         |
| 3        | 1         |
| 3        | 3         |

如您在上面的示例中所见,地点3不提供课程2

在这里,您可以通过查询place_id来查询该地点的所有可用课程:

SELECT * from t_place_course WHERE place_id = 3

以上内容将同时返回课程13

您可以选择使用JOIN获取有关路线或地点的其他信息,例如说明:

    SELECT `t_course`.`description`
      FROM `t_course`
INNER JOIN `t_place_course`
        ON `t_course`.`id` = `t_place_course`.`course_id`
INNER JOIN `t_place`
        ON `t_place`.`id` = `place_id`