Oracle SQL约束,输入的名称必须是成员

时间:2015-12-05 15:42:23

标签: sql oracle constraints

我创建了一个网球俱乐部数据库。该数据库包含以下表格:

播放器

CREATE TABLE player
(
  member_id INT PRIMARY KEY NOT NULL, 
  member_name VARCHAR2(70) NOT NULL,
  date_of_birth DATE,
  member_address VARCHAR2(300),
  contact_number INT NOT NULL,
  gender VARCHAR2(1) NOT NULL CHECK(gender IN('f','m')),
  club_seeding INT NOT NULL,
  county_seeding INT NOT NULL,
  renewal_date DATE,
  m_type VARCHAR(9) NOT NULL CHECK(m_type IN('junior','student', 'senior', 'family', 'associate'))
);

这包括网球俱乐部的成员。

然后是团队

CREATE TABLE team
(
  team_id INT PRIMARY KEY NOT NULL,
  club_seeding INT,
  county_seeding INT,
  player1 VARCHAR2(70) NOT NULL,
  player2 VARCHAR2(70) NOT NULL,
  team_name VARCHAR2(145) NOT NULL
);

这用于输入2名球员组成双打球队。

我的问题是如何创建一个约束,只允许播放器表中的玩家(member_name)进入团队表?

1 个答案:

答案 0 :(得分:1)

您需要创建外键约束 请参阅文档here

但是在您的示例中,您需要更改从player1player2的{​​{1}}和varchar列的类型:

int

sample of alter table statements

在表格中创建FK约束的样本

-- Create foreign key constraints 
alter table TEAM
  add constraint fk_team_player_1 foreign key (PLAYER1)
  references player (MEMBER_ID);

alter table TEAM
  add constraint fk_team_player_2 foreign key (PLAYER2)
  references player (MEMBER_ID);

CREATE TABLE team ( team_id INT PRIMARY KEY NOT NULL, club_seeding INT, county_seeding INT, player1 INT NOT NULL, player2 INT NOT NULL, team_name VARCHAR2(145) NOT NULL ,constraint fk_team_player_1 foreign key (PLAYER1) references player (MEMBER_ID) ,constraint fk_team_player_2 foreign key (PLAYER2) references player (MEMBER_ID) );

if you want to use member names as PK