对联结 table 实现感到困惑
Confused about junction table implementation
首先,我不是程序员,这是我第一次创建数据库,这个实现是我目前正在做的实习期间确定的需求的一部分。
我目前正在开发一个 MS Access 数据库,该数据库将用于管理与运动教练的工作合同。该实施旨在迁移一系列始终存储在平面 Excel 数据库中的数据。
现在我遇到了如何实现执行某些搜索所需的功能的问题。
Table A
有大约 200 名培训师,每个培训师都有自己的 ID 号和姓名,用于管理与其他 table 的关系(比如社保、phone 数字、地址等)。 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
中的所有数据都是这样打乱的。
如您所见,每位培训师都拥有一项或多项认证,这些认证几乎可以无限组合(例如 1abc
2c
3ac
)。更不用说,最终我们可以拥有一个拥有五个或更多认证的培训师,而数据库的设计并没有考虑到这一点。
我需要找到一种方法来理解 MS Access 数据库环境中的数据,但实在想不出最好的方法,
考虑到由于我们处理的信息量巨大,我们需要数据可以通过 .csv
文件的大量上传轻松更新,但也可以通过用于手动验证的表格进行更新。
需要时需要在查询中使用它来搜索特定能力。
我尝试的第一件事是保留数据原样(有四个运动场),但事实证明处理起来很麻烦。
然后是多值字段,这些字段在 10 分钟后被删除,因为我对该主题的研究表明它是一个非标准的实现,无法通过大量上传到基础进行更新。
进一步的研究驱使我找到 table 的交汇点,但考虑到网络上的大多数示例都是基于两个 table,而不是三个,我仍然没有弄清楚如何构建这个东西.
我正在考虑让认证 table (Table C
) 没有关键字段,只是存储重复使用 [Trainer_ID]
的零碎信息,但我担心缺少规范化可能会导致未来出现问题。
正如我之前所述,数据库应该能够以一致的方式存储、显示和更新每个培训师的资格,无论他们拥有多少证书。
您使用带有重复培训师 ID 的认证 table 的想法没有错。它不是冗余数据,因为您在 table 中也会有一个 Certification_ID 作为主键。您的另外两个字段将是另外两个 table.
的外键
中介(Junction-tables)table 非常 在 运行 Multi-Billion 美元公司的大型数据库中很常见,所以不用担心。
首先,我不是程序员,这是我第一次创建数据库,这个实现是我目前正在做的实习期间确定的需求的一部分。
我目前正在开发一个 MS Access 数据库,该数据库将用于管理与运动教练的工作合同。该实施旨在迁移一系列始终存储在平面 Excel 数据库中的数据。
现在我遇到了如何实现执行某些搜索所需的功能的问题。
Table A
有大约 200 名培训师,每个培训师都有自己的 ID 号和姓名,用于管理与其他 table 的关系(比如社保、phone 数字、地址等)。 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
中的所有数据都是这样打乱的。
如您所见,每位培训师都拥有一项或多项认证,这些认证几乎可以无限组合(例如 1abc
2c
3ac
)。更不用说,最终我们可以拥有一个拥有五个或更多认证的培训师,而数据库的设计并没有考虑到这一点。
我需要找到一种方法来理解 MS Access 数据库环境中的数据,但实在想不出最好的方法,
考虑到由于我们处理的信息量巨大,我们需要数据可以通过 .csv
文件的大量上传轻松更新,但也可以通过用于手动验证的表格进行更新。
需要时需要在查询中使用它来搜索特定能力。
我尝试的第一件事是保留数据原样(有四个运动场),但事实证明处理起来很麻烦。
然后是多值字段,这些字段在 10 分钟后被删除,因为我对该主题的研究表明它是一个非标准的实现,无法通过大量上传到基础进行更新。
进一步的研究驱使我找到 table 的交汇点,但考虑到网络上的大多数示例都是基于两个 table,而不是三个,我仍然没有弄清楚如何构建这个东西.
我正在考虑让认证 table (Table C
) 没有关键字段,只是存储重复使用 [Trainer_ID]
的零碎信息,但我担心缺少规范化可能会导致未来出现问题。
正如我之前所述,数据库应该能够以一致的方式存储、显示和更新每个培训师的资格,无论他们拥有多少证书。
您使用带有重复培训师 ID 的认证 table 的想法没有错。它不是冗余数据,因为您在 table 中也会有一个 Certification_ID 作为主键。您的另外两个字段将是另外两个 table.
的外键中介(Junction-tables)table 非常 在 运行 Multi-Billion 美元公司的大型数据库中很常见,所以不用担心。