我正在尝试将类图(光盘租赁商店的学校项目)翻译成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
任何帮助都是适用的:)
答案 0 :(得分:4)
去过那里,做到了。
您需要Disc
中的字段来指定类型(音乐,电影,...)
在音乐(或电影或...)中,您必须拥有disc_id
,然后是音乐特定字段。
通过Disc
查询音乐时,内部加入Music
和disc_id
。
在光盘抽象级别工作时,type
中的Disc
会为您提供光盘列表和过滤功能。
答案 1 :(得分:3)
在实体关系建模中,此设置被建模为superentity DISC和三个子实体MUSIC DISC,MOVIE DISC和GAME DISC。实现这些实体,您有四个经典选项:
选项1:一个表DISCS,其Disc_Type列有三个允许值'MUSIC','MOVIE'和'GAME'。以及三个子实体的所有属性和关系的可选列。并且一些检查对这些列的约束以确保它们仅在Disc_Type列允许时具有值。
选项2:四个表,每个实体一个表,允许未知类型的光盘。表示子实体的表具有DISCS表的外键。
选项3:三个表:MUSIC_DISCS,MOVIE_DISCS和GAME_DISCS,其中属于超级实体的所有属性都被复制到三个表中。
选项4:四个表,其中DISCS表包含三个可选的外键列到otter三个表。必须填写这三个外键列中的一个。
没有“正确”的方式。您只需选择最适合您需求的那个。
此致 罗布。