2013-02-01 32 views
0

我的想法是在一个表中使用两个条目(一个包含引用的表名,一个包含该表中的键)以引用其他几个表中的一个。具有多个(条件)可能值的MySQL外键

表的相关部分:

CREATE TABLE people 
    ( 
    peopleid SMALLINT UNSIGNED auto_increment, 
    name  VARCHAR(40) NOT NULL, 
    prevname VARCHAR(40), 
    role  ENUM('Teacher', 'Mentor', 'Administrator'), 
    roleid SMALLINT UNSIGNED 
) 

注:教师和导师的表。如果此人是管理员,则RoleID将为空。

我希望RoleID成为引用任何表在“角色”字段中引用的外键。我怎么做?

回答

0

SQL的设计目的不在于此。如果要链接到单独的表,您将需要单独的外键。

+0

不幸的是,在另一个地方,我有22张桌子可以链接,其中一个有66个字段。所以我的选择似乎是: 1)在单独的表中留下并且具有22个外键 2)将它们全部放在同一个表中,并且每个记录具有〜66个空值 –

+0

Bah!这里是整个评论: 似乎在这里被忽视的一个很大的能力。 不幸的是,在另一个地方,我有16个表可以链接,其中一个有66个字段,每个记录有15个保证空值似乎过多。 所以我的选择似乎是: 1)留在单独的表中,并有16个外键 2)将它们全部放在同一个表中,每个记录有大约66个空值 3)在期间不提及它们作为外键表设置,并使用变量在连接中进行匹配,并处理缓慢的处理。 至少这解释了为什么我找不到语法。 –

1

最好的办法是为角色和人分配一张桌子。这将提供一个规范化和关系模型。

+0

我不确定你说的角色是一个字段,而人们是一张包含个人信息的表格。角色字段可以包含'教师',角色ID可以保留教师表的关键字,或角色可以保存'导师',而roldID中的值将成为导师表中的关键字。 –

+0

@KarenRemick这就是我的观点。你必须从对象的角度来看它。一个人是一个物体,那个人可以扮演一个角色。您不需要为导师,教师或管理员提供一张表格。 – Kermit

+0

老师和导师表包含其他信息。这个人的角色是他们是谁的一部分。老师表拥有诸如他们工作的学校和他们的认证等信息,其中指导者表包含诸如他们的指导合伙人是谁以及他们正在工作的合同类型等信息。一个人要么是老师,要么是导师(或者管理员 - 我们没有单独的数据)。我希望该字段用附加数据指向表格。 –