外键疑问 - mysql

时间:2011-04-24 17:37:32

标签: mysql database database-design

请问一个简单的问题。我有三张桌子。

的圈子

id    area
1   Multimedia
4   Education

就业

  id   foreign key(GROUP)     job
   1    1                   designer
   2    4                   professor
   3    1                   copy

现在假设我有这个

SpecificProperties

id  foreign key (Employment)      properties
1   1                             type of contract
2   1                             number of jobs 
3   2                             duration contract (no type of contract)
4   2                             number of jobs
在这种情况下,设计师和教授拥有工作的财产数量。基本上问题是,我需要重复每个职业的工作数量?还有什么办法可以避免吗?或者我可以拥有8个不同工作的8个外键的工作数量?一个用于设计师,另一个用于教授,另一个用于复制,等等?这样,第一个作业数就在外键1 ||中2 || 3

类似的东西:

**SpecificProperties**

    id  foreign key (Employment)      properties
    1   1                             type of contract
    2   1||2||3||4                    number of jobs 
    3   2                             duration contract (no type of contract)

感谢

1 个答案:

答案 0 :(得分:0)

您可以将属性名称放在附加表中,例如

Properties
id  name
1   type of contract
2   number of jobs 
3   duration contract (no type of contract)
然后使用 SpecificProperties

foreign key (Employment) foreign key (Properties)
1                        1
1                        2
2                        3
2                        2

作为反映多对多关系的联结表 - 一个或多个作业可以拥有一个或多个属性,因此不要放置"多个作业"对于你刚从属性表中输入id的每个工作。

@comments 但是,如果"工作数量"是一个字段,而不仅仅是要显示的文本,它不应该作为行值在SpecificProperties中。相反,它应该作为列名称,但不与合同信息一起。 例: 鲍勃是多媒体设计师,从某个日期开始工作直到某个其他日期,在x类型的合同上工作,等等。 具有列(id,user_id,job_id,start_date,end_date,salary)的表合同(或就业)可以保存有关该信息的信息,但由于更多人可以完全相同以避免存储冗余数据,因此我们可以将外键job_id用于作业带有列的表(id,group_id,job_name,number_available)。所以我们知道,无论他们实际签订什么合同,我们都可以让10名设计师从事多媒体工作。