| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Как реализуется наследование в реляционных БД?.. |
| Автор: Kurt 3.4.2005, 20:53 |
| Есть ER-диаграмма. В ней применено наследование. Теперь стоит задача реализовать все это в РЕЛЯЦИОННОЙ БД. Конкретно, в FireBird, но возможен вариант MySQL. Расскажите, как переносится наследование на чисто реляционные базы? Каким образом это реализуется? |
| Автор: Domestic Cat 3.4.2005, 21:44 |
| В самом простом случае наследования от одного класса- есть 3 варианта. 1. Создать таблицу для суперкласса с его аттрибутами, и каждому сабклассу по таблице с их аттрибутами. Связаны через примари ключ. 2. Создать одну таблицу для суперкласса со всеми аттрибутами, включая сабклассы 3. Создать таблицы только для сабклассов, каждая будет включать аттрибуты сабкласса + суперкласса. Наиболее оптимальный первый вариант, афаик. |
| Автор: LSD 3.4.2005, 22:40 |
| Я видел проекты с сериализацией объектов. Там структура таблиц, вообще не зависела от того какие объекты в ней хранятся. |
| Автор: Domestic Cat 3.4.2005, 22:43 | ||
Дык речь не об объектах, а о ER (Entity-Relationship) диаграммах |
| Автор: LSD 3.4.2005, 22:51 |
| Дык таким макаром можно шо хош запихать в РСУБД, правда эффективность... |
| Автор: Domestic Cat 3.4.2005, 23:02 | ||
Не понял |
| Автор: Kurt 4.4.2005, 00:56 | ||||
Ага. Абсолютно пральна. Задача именно такая.. Хм.. Сейчас вспоминаю, что кто-то мне говорил, будто 3 вариант:
наиболее часто используется. А какой вариант наиболее оптимален по скорости? |
| Автор: Domestic Cat 4.4.2005, 01:02 |
| Я не большой спец |
| Автор: Kurt 4.4.2005, 01:06 |
| Почему? Единственный трабл, к-й сразу бросается в глаза - если надо будет по ID узнать тип объекта - надо будет делать запросы во все таблицы сабклассов. Ну и, возможно, избыточность. Но не обязательно. |
| Автор: LSD 4.4.2005, 18:40 |
Если я ничего не путаю то в Oracle, объекты хранятся следующим образом:
|
| Автор: simanyay 5.4.2005, 12:18 | ||
И также если надо будет изменить какие-то общие данные в базе, то надо будет менять во всех таблицах, что не есть гуд. И, по моему, это нарушает какую-то нормальную форму... Хотя нет, скорее всего, я ошибаюсь. |
| Автор: maxim1000 5.4.2005, 12:44 |
| мне кажется, это нарушает не какие-то принципы проектирования баз данных, а что-то из принципов ООП если надо будет, например, вывести количество всех объектов супер-класса, то при наличии его таблицы это делается одним запросом, если нет - надо искать по всем таблицам наследников (а при добавлении новых наследников придется лезть в давно забытый код и добавлять их таблицы в запрос) конечно, можно придумать какие-то правила для имен таблиц и вытаскивать их автоматически (просто как-то в ответ на мое предложение мне описали подобный вариант), но ИМХО это как-то неправильно... |