Представляете обобщение в oracle sql - PullRequest
3 голосов
/ 11 августа 2011

Я пытаюсь перевести диаграмму классов (школьный проект магазина проката дисков) в sql, но я застрял в связи обобщений.

У меня есть родительский класс Disc и дочерние классы Music, Movie и Game. Как я могу представить их в SQL (оракул)?

На данный момент я написал:

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 ]

4 голосов
/ 11 августа 2011

Был там, сделал это.

Вам необходимо поле в Disc, чтобы указать тип (Музыка, Кино, ...)

В Музыке (или Кино или ...), вы должны иметь disc_id, а затем специфичные для музыки поля.

При запросе музыки внутреннее соединение Disc и Music через disc_id.

type в Disc будет зависетьвы за листинг и фильтрацию диска при работе на уровне абстракции диска.

3 голосов
/ 11 августа 2011

В моделировании отношений объекта эта настройка моделируется как диск с высокой степенью вероятности и три объекта: MUSIC DISC, MOVIE DISC и GAME DISC. И реализуя эти сущности, у вас есть четыре классических варианта:

  1. Реализация супертипа
  2. Неявная реализация подтипа
  3. Явная реализация подтипа
  4. Реализация типа дуги

Вариант 1: одна таблица DISCS со столбцом Disc_Type с тремя допустимыми значениями «MUSIC», «MOVIE» и «GAME». И необязательные столбцы для всех атрибутов и отношений трех подразделений. И некоторые проверочные ограничения для этих столбцов, чтобы убедиться, что они имеют значение только тогда, когда это допускается в столбце Disc_Type.

Вариант 2: четыре таблицы, по одной для каждой сущности, допускающие диски неизвестного типа. Таблицы, представляющие субъекты, имеют внешний ключ к таблице DISCS.

Вариант 3: три таблицы: MUSIC_DISCS, MOVIE_DISCS и GAME_DISCS, где все атрибуты, принадлежащие суперсуществованию, копируются в три таблицы.

Вариант 4: четыре таблицы, где таблица DISCS содержит три необязательных столбца внешнего ключа для трех таблиц выдры. Точно один из этих трех столбцов внешнего ключа должен быть заполнен.

Не существует «правильного» пути. Вам просто нужно выбрать тот, который лучше всего соответствует вашим потребностям.

С уважением, Роб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...