Реализация наследования в SQL - PullRequest
2 голосов
/ 21 марта 2011

У меня проблемы с проектом класса, состоящим, среди прочего, из моделирования (с использованием merise) базы данных для магазина приложений, подобного. Я дошел до того, что у меня есть модель сущности-отношения, которая действительно мне подходит и, кажется, соответствует ограничениям субъекта.

В этом моделировании я использую наследование, чтобы отметить разницу между приложением и приложением, и надстройку, обе из которых имеют общие характеристики. На самом деле, они имеют абсолютно одинаковые характеристики, но могут быть связаны с различными ассоциациями.

Вот скриншот, который может помочь вам понять:

enter image description here

Я надеялся создать Software представление и таблицы App и AddOn, предположив, что в двух последних не будет записей с одинаковым идентификатором. Но я не знаю, как это сделать, и, возможно, это неправильный способ, поэтому я открыт для предложений.

Надеюсь, я был достаточно ясен, если нет, не стесняйтесь просить меня быть более точным.

Спасибо за чтение!

1 Ответ

3 голосов
/ 21 марта 2011

Вы уже определили необходимость в разных таблицах для App и Addon, поскольку они подвержены различным ассоциациям.Хорошо!

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

Software(
   software_id
  ,type
  ,name
  ,price
  ,entry_date
  ,description
  ,primary key(software_id)
)

Я добавил столбец дискриминатора type, который должен содержать значение, определяющее, является ли этот фрагмент программного обеспечения аддоном или приложением.

Addon(
   software_id
  ,primary key(software_id)
  ,foreign key(software_id) references software(software_id)
)

App(
   software_id
  ,primary key(software_id)
  ,foreign key(software_id) references software(software_id)
)

Обратите внимание, что первичные ключи в Addon и App относятся к первичному ключу в программном обеспечении.В некотором смысле вы можете думать о software_id как о «типе данных».Столбец software_id в Addon не просто содержит случайное уникальное число.Значение должно исходить из одного из тех номеров, которые идентифицируют часть программного обеспечения.

Это тот ответ, который вы искали?

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