如何为附加了两个关系集的实体编写create table语句?

时间:2014-09-20 17:37:06

标签: sql oracle entity-relationship

以此图片为例:enter image description here

**忽略ISA关系,因为我理解这个概念。

我的问题是为Team创建表格。我理解如何为实体和关系创建表,但是我对如何创建Team的表有点困惑,因为Team有两个与之相关的关系集。

我可能的解决方案:团队拥有SSN(来自教授)和SSN(来自GTA,来自它的ISA)的属性,我使用PRIMARY KEY(profssn,gtassn)来唯一地识别团队?如果我这样做,我将如何成功建模on_team_1和on_team_2?我想过让on_team_1拥有SSN属性(因为它是教授的主键),然后是来自Team实体的两个属性,例如team_profssn和team_gtassn。

这听起来是否可行,或者我完全不知道如何做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为你需要一个TEAM表,其中包含特定于团队的属性(NAME,至少),然后你似乎需要一个TEAM_MEMBER表来模拟个人和特定团队之间的关系。如果我理解你的数据,我认为TEAM_MEMBER只有TEAM_NAME和SSN - 尽管在委婉地称为"现实世界"没有办法,你可以放弃使用SSN来做这样的事情。例如,在我们的系统(大型国际零售商)中,任何个人身份识别数据(PID)都被埋没得如此之深,以至于大多数系统(包括我工作的系统)都无法看到任何此类数据。我建议,除非你的设计已经用钛金属激光蚀刻,否则你不应该使用SSN做任何事情 - 为人物ID产生独特的价值'改为使用序列。

CREATE TABLE TEAM
 (TEAM_NAME  VARCHAR2(50)
    CONSTRAINT PK_TEAM
      PRIMARY KEY
      USING INDEX);

CREATE TABLE TEAM_MEMBER
 (TEAM_NAME  VARCHAR2(50)
    CONSTRAINT TEAM_MEMBER_FK1
      REFERENCES TEAM(TEAM_NAME),
  PERSON_ID  NUMBER,
  CONSTRAINT PK_TEAM_MEMBER
    PRIMARY KEY(TEAM, PERSON_ID)
    USING INDEX);

祝你好运。