powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Наследование типов в РСУБД
14 сообщений из 14, страница 1 из 1
Наследование типов в РСУБД
    #35133672
_Kostyan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДОБРОГО ВРЕМЕНИ СУТОК, может быть кто-то уже сталкивался с такого рода дилеммой - тогда подскажите все + и - в дальнейшей разработке:
1. описание предметной области
есть 6 основных типов сущностей реального мира(физ, юр лицо, ардес, недвижимость, автомобиль, событие).
есть их связи (в итоге их получается более 40, т.к. на 2 одинаковых типа сущностей может быть более одного типа связей) - и это тоже базовые таблицы

Задача - устанавливать ВЗАИМОСВЯЗИ между объектами по их атрибутам, связям, атрибутам связей(реже).

первое напрашивающееся решение - ввести общую таблицу "Objects" всех сущностей, и relationship(foreign key) на нее из 6-и базовых табл.
+ ввести общую таблицу связей (как кросс-таблицу Objects М:М Objects) и relationship(foreign key) на нее из всех 40+ таблиц связей.

тогда мы одним запросом вроде бы получаем SELECT для всех взаимосвязей нашего объекта, несмотря на то - с кем он связан, и каков тип этой связи пока все замечательно,
НО
после нахождения всех взаимосвязанных объектов нам НЕОБХОДИМО ПРИМЕНИТЬ СЕМАНТИКУ ПРЕДМЕТНОЙ ОБЛАСТИ - т.е. отдельно рассматривать найденные связанные объекты из SELECT В_ЗАВИСИМОСТИ от их типа - т.е. приходим к тем же нескольким запросам, от которых мы хотели уйти, но на более позднем этапе.

БОЛЕЕ ТОГО: в этом случае для ускорения работы (а фактически для НЕ ЗАМЕДЛЕНИЯ) необходимо хранить еще и ТИП СВЯЗИ - что является избыточными данными, т.к. он МОЖЕТ БЫТЬ ОПРЕДЕЛЕН из наличия relationship(foreign key) из одной из наследованных таблиц к общей.

ИТОГ: мы создаем надтип, делаем для него запрос, НО потом при работе с этим запросом приходится использовать особенности подтипа. дальше пока не смотрел, т.к. это решение будет краеугольным, если кто сталкивался с подобным - подскажите как по опыту: стоят ли надтипы их применения.

П.С.
(английские понятия применены для объектов базы, русские - объектов предметной области, иначе бы возникла путаница)
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35133894
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В реляционных БД нет понятия связи. Это понятие остаётся в области моделирования структуры данных и иногда преобразуется в ограничения ссылочной целостности.
Я так понимаю, игры с таблицей Objects исходят из желания насоздавать побольше FK. Но стоит ли игра затраченных усилий? Ведь можно просто создать таблицу связей объектов такого вида (или типа того):

link(
id1 number,
table1 number,
id2 number,
table2 number
)

где id1 и id2 - значения суррогатных ключей связанных записей БД, а table1, table2 - коды названий таблиц, в которых хранятся соответствующие id1 и id2 записи.
Без внешних ключей эта таблица становится универсальной для всех связей. Из неприятностей, которые могут нас поджидать можно назвать висячие ссылки, т.е. ситуация когда связь присутствует, а один или оба объекта на её концах удалены. Но это как бы не проблема. Просто нужно учитывать сей факт при написании запросов. Например в объектных БД есть даже условия для проверки в запросе висячих ссылок.
С другой стороны, если такая унификация не даёт ощутимого выйгрыша в процессе кодирования приложений БД, то имеет смысл для каждой ассоциации создать отдельную таблиу связей (сколько бы их там не было), заодно решив вопрос висячих ссылок.
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134464
_Kostyan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возможно я не вполне внятно объяснился: фактически пишется поисковая система, на этапе проектирования базы необходимо принять\не принимать решение об унификации (создания отношения-архитипа, для сходных отношений).

там где "связь" - это связь реального мира! а для моделирования (базы), я специально во избежание путаницы, применял понятие relftionship (foreign key).

связи - это связь из предметной области (например:
человек(Table) - (1) Работает в орг-ии (table) - Юр лицо (Table)
человек (Table) - (2) учредитиль орг-ии(table) - юр. лицо (table)

и вот таких таблиц связей (1) (2) ..... будет 40+ (в каждой собственный, семантически обособленный, набор атрибутов(полей)).
и одна общая таблица для их унификации, так вот нужна ли она?
если после мы все равно переходим к семантике и рассматпиваем КОНКРЕТНЫЕ таблицы.


Есть еще 1 вариант - но он мне НЕ нравится - создать таблицу Connections (fromConnectedID, toConnectedID, ConnectionType), и к ней по внешним ключам присоединять таблицы для ВСЕХ ВОЗМОЖНЫХ СВОЙСТВ КАЖДОГО ИЗ ПОДТИПОВ, и на уровне логики приложения выбирать - какие свойства нужны для конкретного запроса поиска.
НО это будет вообще лишенная "смысла", невыразительная база.
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134489
_Kostyan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(туда же)
т.е. на уровне базы КАЖДЫЙ объект потенциально обладает ВСЕМ ВОЗМОЖНЫМ НАБОРОМ СВОЙСТВ.
и на уровне базы не отражено: допустимо ли данное свойство для объекта - а лишь на уровне приложения.
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134520
Чендлер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2_Kostyan_
ты в СБ работаешь?
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134606
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Kostyan_связи - это связь из предметной области (например:
человек(Table) - (1) Работает в орг-ии (table) - Юр лицо (Table)
человек (Table) - (2) учредитиль орг-ии(table) - юр. лицо (table)

Это не связи - это свойства объекта человек. Их тип- ссылка на объект(ы) типа Юр лицо.
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134687
_Kostyan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_мод _Kostyan_связи - это связь из предметной области (например:
человек(Table) - (1) Работает в орг-ии (table) - Юр лицо (Table)
человек (Table) - (2) учредитиль орг-ии(table) - юр. лицо (table)

Это не связи - это свойства объекта человек. Их тип- ссылка на объект(ы) типа Юр лицо.

уже понял, что топик получился непонятным с 1-го раза.
связи (пр. области) = кросс. таблица свойств (БД)..... (и еще много непонятного).

думаю, что этой непонятностью тема загублена, а править тут сообщения нельзя.

НАВЕРНОЕ ЗАКРЫТО.
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134693
_Kostyan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чендлер2_Kostyan_
ты в СБ работаешь?
программист .
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134749
Чендлер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Kostyan_ Чендлер2_Kostyan_
ты в СБ работаешь?
программист .
в аську заглини
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134812
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Kostyan_(туда же)
т.е. на уровне базы КАЖДЫЙ объект потенциально обладает ВСЕМ ВОЗМОЖНЫМ НАБОРОМ СВОЙСТВ.
и на уровне базы не отражено: допустимо ли данное свойство для объекта - а лишь на уровне приложения.

А это разве прохо? Если понадобится добавить новый тип связи, тебе не придётся дорабатывать БД, поскольку она и так достаточно универсальна.

С другой стороны, связи "Работает в, "Учредитель", и т.п. вообще говоря достойны того, чтобы завести для них нормальные таблицы, типа "Трудовая книжка", "Трудовой контракт", не знаю точно... "Устав фирмы", и т.п. Кроме того, бывают многосторонние связи объектов.
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134892
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Kostyan_
уже понял, что топик получился непонятным с 1-го раза.

А чем не устраивает стандартный подход PK-FK ?
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35134935
_Kostyan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenabС другой стороны, связи "Работает в, "Учредитель", и т.п. вообще говоря достойны того, чтобы завести для них нормальные таблицы, типа "Трудовая книжка", "Трудовой контракт", не знаю точно... "Устав фирмы", и т.п. Кроме того, бывают многосторонние связи объектов.

1. отдельные таблицы заведены - но это "за пределами ядра" базы, т.е. эти связи НЕ ПОВЛИЯЮТ НА ОРГАНИЗАЦИЮ КРОСС-СВЯЗЕЙ, поэтому я их не стал упоминать (там 2-ые и 3-ые словати есть на самом деле)

2. многосторонние связи уже учтены, но если говорить о них - вообще непонятно ничего будет. (вернее понятно после прочтения 2-х стр. текста.

вообще все НАГЛЯДНО в другой теме.
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35135044
_Kostyan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чендлер _Kostyan_ Чендлер2_Kostyan_
ты в СБ работаешь?
программист .
в аську заглини

ага, только вечером :(
(бтв. ты как "гость" вошел)
...
Рейтинг: 0 / 0
Наследование типов в РСУБД
    #35135270
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Kostyan_
1. отдельные таблицы заведены - но это "за пределами ядра" базы, т.е. эти связи НЕ ПОВЛИЯЮТ НА ОРГАНИЗАЦИЮ КРОСС-СВЯЗЕЙ, поэтому я их не стал упоминать (там 2-ые и 3-ые словати есть на самом деле)



Что то идея всё больше напоминает DWH. Только не хватает завести талицы измерений и в таблице фактов устанавливать связи между записями в таблицах измерений. Короче, сделай OLAP БД полностью отдельную от OLTP базы данных и перегружай внеё все необходимые сведения.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Наследование типов в РСУБД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]