表示oracle sql中的泛化

时间:2011-08-11 15:28:56

标签: sql oracle database-design

我正在尝试将类图(光盘租赁商店的学校项目)翻译成sql,但我仍然处于一种普遍的关系中。

我有Disc的父类,以及音乐,电影和游戏的子类。 我怎样才能在sql(oracle)中表示这些?

到目前为止我写的是:

CREATE TABLE Disc
(
disc_id numeric(10) not null,
disc_title varchar2(50) not null,
disc_cost numeric(10) not null

CONSTRAINT disc_pk PRIMARY KEY (disc_id)
);

--extends Disc
CREATE TABLE Music
(
);

然而我不知道如何处理音乐表,或者即使我走向错误的方向......或者即使我使用了错误的术语:P

任何帮助都是适用的:)

2 个答案:

答案 0 :(得分:4)

去过那里,做到了。

您需要Disc中的字段来指定类型(音乐,电影,...)

在音乐(或电影或...)中,您必须拥有disc_id,然后是音乐特定字段。

通过Disc查询音乐时,内部加入Musicdisc_id

在光盘抽象级别工作时,type中的Disc会为您提供光盘列表和过滤功能。

答案 1 :(得分:3)

在实体关系建模中,此设置被建模为superentity DISC和三个子实体MUSIC DISC,MOVIE DISC和GAME DISC。实现这些实体,您有四个经典选项:

  1. 超类型实施
  2. 隐式子类型实现
  3. 显式子类型实现
  4. Arc-type implementation
  5. 选项1:一个表DISCS,其Disc_Type列有三个允许值'MUSIC','MOVIE'和'GAME'。以及三个子实体的所有属性和关系的可选列。并且一些检查对这些列的约束以确保它们仅在Disc_Type列允许时具有值。

    选项2:四个表,每个实体一个表,允许未知类型的光盘。表示子实体的表具有DISCS表的外键。

    选项3:三个表:MUSIC_DISCS,MOVIE_DISCS和GAME_DISCS,其中属于超级实体的所有属性都被复制到三个表中。

    选项4:四个表,其中DISCS表包含三个可选的外键列到otter三个表。必须填写这三个外键列中的一个。

    没有“正确”的方式。您只需选择最适合您需求的那个。

    此致 罗布。