首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL约束,输入的名称必须是成员。

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

Stack Overflow用户
提问于 2015-12-05 15:42:22
回答 1查看 40关注 0票数 0

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

牌桌

代码语言:javascript
复制
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'))
);

这由网球俱乐部的成员组成。

然后是团队桌

代码语言:javascript
复制
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名球员组成一支双打队。

我的问题是,如何创建一个只允许从player表中的球员(Member_name)输入到team表的约束?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-05 15:57:21

您需要创建外键约束参见docs 这里

但是在您的示例中,需要将player1player2列的类型从varchar更改为int

sample of alter table statements

代码语言:javascript
复制
-- 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);

在表中创建FK控件的示例

代码语言:javascript
复制
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

代码语言:javascript
复制
CREATE TABLE player
( 
  member_name VARCHAR2(70) PRIMARY KEY 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

,constraint fk_team_player_1 foreign key (PLAYER1)
  references player (member_name)
,constraint fk_team_player_2 foreign key (PLAYER2)
  references player (member_name)  
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34107332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档