gpt4 book ai didi

mysql - 正确使用连接表?

转载 作者:行者123 更新时间:2023-11-30 00:01:27 24 4
gpt4 key购买 nike

我需要将一个表中的一行或多行记录或匹配到另一表中的一行或多行。我认为这适用于第三个表(连接表),但不确定。不关心速度或任何像自动取款机这样的花哨的东西,只关心可靠的 table 设计。这里的两个重要的报告要素是:

  1. 能够生成工资支票时间以及在同一报告中执行的任务列表
  2. 为了告诉谁在执行每项任务(因为数据可能没有单独的时间(即团队在任务上花费了 x 小时),我们并不总是能够准确地缩小每个员工的工作时间)一个团队专注于一项任务,我们可以接受这个限制)。

这是一个例子:

“工时表”记录工作时间。Fred 和 Joe 在第一天各工作 8 小时 - 所以这是数据库中的两行Frank 第 2 天工作 8 小时

    "HOURS TABLE"
eeid hours junction
1 8 1
2 8 1
3 8 2

第二个表记录了工作内容(称为单位表,但实际上想要记录任务的小时数)。第一天,Fred 和 Joe 搭了一张长凳(12 小时),开车绕了一圈(3 小时)并清理了商店(1 小时) - 所以这是“任务表”表中的三行
第 2 天,玛丽莲在同一张长凳上呆了 8 个小时,在“任务表”中排一排

    "TASK TABLE"
ItemID hours junction
1 12 1
2 3 1
3 1 1
1 8 2

第三个表是“JUNCTION TABLE”,除了将它们连接在一起之外没有其他用途,这是连接表

    "JUNCTION TABLE"
ID
1
2

问题:

  1. Fred 和 Joe 可能是 1 人团队,也可能是 10 人团队。
  2. 多名员工可能会从事相同的工作(例如搭建长凳),并且需要将“任务表”中的每一行与“工时表”中的行联系起来
  3. 不确定联结表应该只是一个引用,维基百科显示了一个它实际存储数据的示例,但我认为这在这里不合适
  4. 我不知道如何编写查询来完成我的报告,主要是因为我以前从未使用过连接表,无法想象它有那么难......

我想我可以建议我们强制员工提供单独的时间表,这将消除所有这些挑战,因为一条记录可以记录每项任务的小时数,并且这些记录可以按天求和以获得每天的小时数。 - 不知道联结表有多糟糕,不知道是否应该建议这样做。

最佳答案

SQL 中的多对多关系需要 JOIN 表。外键约束只能建模一对多关系,因此每一方都需要一个。

您的要求令人困惑,但这里有一个简单的示例,其中可以将一个或多个用户分配给一个或多个单元:

create table user (
id int not null auto_increment,
primary key(id)
);

create table unit (
id int not null auto_increment,
primary key(id)
);

create table user_unit (
user_id int,
unit_id int,
primary key(user_id, unit_id),
foreign key user_id references user(id),
foreign key unit_id references unit(id)
);

关于mysql - 正确使用连接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com