Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как реализуется наследование в реляционных БД?.. 
:(
    Опции темы
Kurt
Дата 3.4.2005, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Есть ER-диаграмма. В ней применено наследование.
Теперь стоит задача реализовать все это в РЕЛЯЦИОННОЙ БД. Конкретно, в FireBird, но возможен вариант MySQL.
Расскажите, как переносится наследование на чисто реляционные базы? Каким образом это реализуется?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 3.4.2005, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



В самом простом случае наследования от одного класса- есть 3 варианта.
1. Создать таблицу для суперкласса с его аттрибутами, и каждому сабклассу по таблице с их аттрибутами. Связаны через примари ключ.
2. Создать одну таблицу для суперкласса со всеми аттрибутами, включая сабклассы
3. Создать таблицы только для сабклассов, каждая будет включать аттрибуты сабкласса + суперкласса.

Наиболее оптимальный первый вариант, афаик.


--------------------

PM   Вверх
LSD
Дата 3.4.2005, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Я видел проекты с сериализацией объектов. Там структура таблиц, вообще не зависела от того какие объекты в ней хранятся.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Цитата(LSD @ 3.4.2005, 13:40)
Я видел проекты с сериализацией объектов. Там структура таблиц, вообще не зависела от того какие объекты в ней хранятся.


Дык речь не об объектах, а о ER (Entity-Relationship) диаграммах smile


--------------------

PM   Вверх
LSD
Дата 3.4.2005, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Дык таким макаром можно шо хош запихать в РСУБД, правда эффективность...


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 3.4.2005, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Цитата
Дык таким макаром можно шо хош запихать в РСУБД, правда эффективность...


Не понял smile ER - это схемка такая на бумаге, ее нужно перевести в ряд sql команд для рсубд, если я пральна понимаю smile


--------------------

PM   Вверх
Kurt
Дата 4.4.2005, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Цитата
ER - это схемка такая на бумаге, ее нужно перевести в ряд sql команд для рсубд, если я пральна понимаю

Ага. Абсолютно пральна. Задача именно такая..
Хм.. Сейчас вспоминаю, что кто-то мне говорил, будто 3 вариант:
Цитата
3. Создать таблицы только для сабклассов, каждая будет включать аттрибуты сабкласса + суперкласса.

наиболее часто используется.
А какой вариант наиболее оптимален по скорости?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Domestic Cat
Дата 4.4.2005, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Я не большой спец smile Вроде бы третий вариант приведет не очень хорошим релейшншипам


--------------------

PM   Вверх
Kurt
Дата 4.4.2005, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Почему?
Единственный трабл, к-й сразу бросается в глаза - если надо будет по ID узнать тип объекта - надо будет делать запросы во все таблицы сабклассов.
Ну и, возможно, избыточность. Но не обязательно.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
LSD
Дата 4.4.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Если я ничего не путаю то в Oracle, объекты хранятся следующим образом:
  • создается таблица для базового типа, со всеми полями объекта + тип объекта + OUID (Object Unique Identifier)
  • для каждого субкласса создается таблица с полями которые были добавленны + OUID (вероятнее всего foreign key на базовую таблицу)
Соответственно при записи объекта он разбивается на несколько таблиц, а при чтении наоборот собирается.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
simanyay
Дата 5.4.2005, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: нет
Всего: 36



Цитата(Kurt @ 4.4.2005, 03:06)

Единственный трабл, к-й сразу бросается в глаза - если надо будет по ID узнать тип объекта - надо будет делать запросы во все таблицы сабклассов.
Ну и, возможно, избыточность. Но не обязательно.


И также если надо будет изменить какие-то общие данные в базе, то надо будет менять во всех таблицах, что не есть гуд.
И, по моему, это нарушает какую-то нормальную форму... Хотя нет, скорее всего, я ошибаюсь.


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
maxim1000
Дата 5.4.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



мне кажется, это нарушает не какие-то принципы проектирования баз данных, а что-то из принципов ООП
если надо будет, например, вывести количество всех объектов супер-класса, то при наличии его таблицы это делается одним запросом, если нет - надо искать по всем таблицам наследников (а при добавлении новых наследников придется лезть в давно забытый код и добавлять их таблицы в запрос)
конечно, можно придумать какие-то правила для имен таблиц и вытаскивать их автоматически (просто как-то в ответ на мое предложение мне описали подобный вариант), но ИМХО это как-то неправильно...


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.