MySql 添加关系而不创建重复项

标签 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 的所有结果。

所以我只是这样做

从 t_subject 中选择 *,启用 = 1

现在,对于 t_place 记录之一,应隐藏 t_subject 中的一条记录。 我不想简单地用 JavaScript 删除它,因为我希望能够在发生任何变化时自定义所有下拉菜单。

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

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

我想向 t_subject 添加一个 id_exclusion 列,这样只有当一条记录被 t_place 中的另一个 ID 排除时,我才能复制记录。

那会有多糟糕?这样到目前为止我就不会出现重复的情况。

希望这一切都有道理。

最佳答案

虽然您只需要排除一门类(class),但我仍然建议建立一个完整的“地点类(class)”关联。尽管没有显式链接您的表,但您本质上具有多对多关系。

我建议额外使用“桥接”或“associative entity” ' 表代表哪些类(class)在哪些地方提供。这个新表将有两列 - 一列用于 t_subject ID 的外键,一列用于 t_place ID 的外键。

例如(t_place_course):

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

正如您在上面的示例中看到的,地点 3 不提供类(class) 2

在这里,您可以通过查询 place_id 来简单地查询某个地点的所有可用类(class):

SELECT * from t_place_course WHERE place_id = 3

以上将返回类(class) 13

您可以选择使用JOIN来获取有关类(class)或地点的其他信息,例如描述:

    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`

关于MySql 添加关系而不创建重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54562977/

相关文章:

php - 在选择可用房间时使用 MySQL 查询

mysql - 显示连续出现的值

mysql - Grafana 变量 MySQL

sql - 在数据库重构期间映射 ids 的最简单方法

java - 使用 Java 的 SQL 提供程序

mysql - 快速删除MySQL中的重复记录

php - 无法连接到 AWS 上的数据库

mysql - 网站连接本地数据库,如何实现远程访问?

python - Pandas 'dupout' 如何查看删除的重复文件

Python (2.7) 队列重复