定义表时的IS-A关系

时间:2015-04-04 19:04:52

标签: sql oracle11g ddl

我正在尝试在表之间实现IS-A关系。 假设我有singerband artists

我希望每个artist都有一个由bandsinger继承的ID。

在我写的代码中,似乎bandsinger可能具有相同的ID。我该如何预防呢?有没有更好的方法来实现这个?阅读材料当然是受欢迎的。

CREATE TABLE artists
( id number not null primary key
);

CREATE TABLE singers
( id number not null primary key,
  name char(50) not null,
  last_name char(50) not null,
  foreign key(id) references artists(id)
);

CREATE TABLE bands
( id number not null primary key,
  name char(50) not null unique,
  contact char(50) not null,
  participants number not null,
  check (participants > 0),
  foreign key(id) references artists(id)
 );

insert into artists(id) values(1);
insert into singers(id, name, last_name) values(1, 'an', 'Bish');
insert into bands(id, name, contact, participants) values(1,'un','an',2);

你可以看到我能够在相同的“父母”下添加一个乐队和一个具有相同ID的歌手。

0 个答案:

没有答案