对联结表实现感到困惑

Posted

技术标签:

【中文标题】对联结表实现感到困惑【英文标题】:Confused about junction table implementation 【发布时间】:2019-05-30 18:24:50 【问题描述】:

首先,我不是程序员,这是我第一次从事数据库创建工作,这个实现是我目前在实习期间确定的需求的一部分。

我目前正在开发一个 MS Access 数据库,用于管理与体育教练的工作合同。该实施旨在迁移一系列一直存储在平面 Excel 数据库中的数据。

现在我在如何实现进行某些搜索所需的功能方面遇到问题。

Table A 有大约 200 名培训师,每个培训师都有自己的 ID 号和姓名,用于管理与其他表的关系(例如社会保障、电话号码、地址等)。 ID 是关键。如示例所示,它由三个字段构成。

[Trainer_ID] [Name]  [Last_Name]
1            Pedro   Pérez
2            María   Gómez
3            Hollman Vivas

Table B 是我们处理合同的(目前为 20 个)运动的列表。它有一个自动编号字段作为键,每项运动的名称作为短文本(仅使用小写字符)。该列表可以根据需求和教练注册情况更新更多运动。

[Sport_ID] [Sport_Name]
a          Soccer
b          Basketball
c          Tennis

最后,Table C 存储每个培训师拥有的特定认证,培训师 ID 作为密钥。在 Excel 版本中,它有四个字段。

[Trainer_ID] [Sport1] [Sport2]   [Sport3] [Sport4)
1            Soccer
2            Tennis   Soccer
3            Tennis   Basketball Soccer

Table C中的所有数据都是这样打乱的。

如您所见,每位培训师都拥有一项或多项认证,几乎可以实现无穷无尽的组合(例如1abc2c3ac)。更不用说,最终我们可以拥有一个拥有五项或更多认证的培训师,而数据库的设计并未考虑到这一点。

我需要找到一种方法来理解 MS Access 数据库环境中的数据,但我真的想不出最好的方法, 考虑到由于我们处理的信息量巨大,我们需要可以通过大量上传 .csv 文件轻松更新数据,同时也可以通过用于手动验证的表单进行更新。

需要在查询中使用,以便在需要时搜索特定的能力。

我尝试的第一件事是将数据保持原样(四个运动场),但事实证明处理起来很混乱。

然后是多值字段,这些字段在 10 分钟后被抓取,因为我对该主题的研究表明这是一个非标准实现,无法通过大量上传到库来更新。

进一步的研究使我想到了联结表,但考虑到网络上的大多数示例都基于两个表,而不是三个,我仍然没有弄清楚如何构建这个东西。

我正在考虑让认证表 (Table C) 没有关键字段,并且只存储碎片信息并重复使用 [Trainer_ID],但我担心这种缺乏规范化可能会导致未来出现问题。

正如我之前所描述的,数据库应该能够以一致的方式存储、显示和更新每位培训师的资格,无论他们拥有多少认证。

【问题讨论】:

【参考方案1】:

您将认证表与重复的培训师 ID 一起使用的想法没有任何问题。它不是冗余数据,因为您在表中也会有一个 Certification_ID 作为主键。您的另外两个字段将是另外两个表中的外键。

中间(连接表)表在运行数十亿美元公司的大型数据库中非常很常见,因此不必担心。

【讨论】:

以上是关于对联结表实现感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

jQuery实现广告对联

结婚的对联带横批

如何区分对联

对联组开除组员

为页面两边增加对联广告,增加关闭按钮,点击可以关闭对联 两边都关闭

新婚对联