适当使用接线台?

时间:2014-07-28 17:08:19

标签: mysql sql database

我需要将一个表中的一行或多行记录或匹配到另一个表中的一行或多行。我认为这适用于第三个表(联结表),但不确定。 不关心速度或任何类似于atm的东西,只是一个可靠的桌面设计。这里有两个重要的报告要素:

  1. 能够生成薪资小时和在同一报告上执行的任务列表
  2. 告诉谁负责每项任务(因为数据可能没有单独的时间进入(即一个团队在任务上花了x个小时),我们总是无法缩小每个任务的确切范围团队中的员工花在一项任务上,我们对此有限制。)
  3. 以下是一个例子:

    " HOURS TABLE"记录工作时间。 Fred和Joe每天在第1天工作8小时 - 所以这是db中的两行 弗兰克在第二天工作了8个小时

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

    第二个表记录了所处理的内容(被叫单位表,但实际上想要记录任务的小时数)。 第1天,弗雷德和乔建造了一个长凳(12小时),开车(3小时)并清理了商店(1小时) - 所以这是表中的三排"任务表"
    第2天,玛丽莲在同一条长凳上度过了8个小时,在#34; TASK TABLE"

        "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. 多名员工可能会在相同的事情上工作(比如建立一个工作台),并且需要将每一行绑定在"任务表"到" HOURS TABLE"中的行
    3. 不确定联结表应该只是一个参考,维基百科显示了一个实际存储数据的例子,但我认为这不适合
    4. 我不知道如何编写查询来执行我的报告主要是因为我之前从未使用过联结表,无法想象它更难......
    5. 我想我可以建议我们强制员工分别提供时间表,这样可以消除所有这些挑战,因为一条记录可以记录每个任务的小时数,这些记录可以按天计算得到每天的小时数。 - 不知道联结表有多糟糕,知道是否应该这样做。

1 个答案:

答案 0 :(得分:0)

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

您的要求令人困惑,但这是一个简单的示例,可以将一个或多个USER分配给一个或多个UNIT:

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)
);