|
|
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
ДОБРОГО ВРЕМЕНИ СУТОК, может быть кто-то уже сталкивался с такого рода дилеммой - тогда подскажите все + и - в дальнейшей разработке: 1. описание предметной области есть 6 основных типов сущностей реального мира(физ, юр лицо, ардес, недвижимость, автомобиль, событие). есть их связи (в итоге их получается более 40, т.к. на 2 одинаковых типа сущностей может быть более одного типа связей) - и это тоже базовые таблицы Задача - устанавливать ВЗАИМОСВЯЗИ между объектами по их атрибутам, связям, атрибутам связей(реже). первое напрашивающееся решение - ввести общую таблицу "Objects" всех сущностей, и relationship(foreign key) на нее из 6-и базовых табл. + ввести общую таблицу связей (как кросс-таблицу Objects М:М Objects) и relationship(foreign key) на нее из всех 40+ таблиц связей. тогда мы одним запросом вроде бы получаем SELECT для всех взаимосвязей нашего объекта, несмотря на то - с кем он связан, и каков тип этой связи пока все замечательно, НО после нахождения всех взаимосвязанных объектов нам НЕОБХОДИМО ПРИМЕНИТЬ СЕМАНТИКУ ПРЕДМЕТНОЙ ОБЛАСТИ - т.е. отдельно рассматривать найденные связанные объекты из SELECT В_ЗАВИСИМОСТИ от их типа - т.е. приходим к тем же нескольким запросам, от которых мы хотели уйти, но на более позднем этапе. БОЛЕЕ ТОГО: в этом случае для ускорения работы (а фактически для НЕ ЗАМЕДЛЕНИЯ) необходимо хранить еще и ТИП СВЯЗИ - что является избыточными данными, т.к. он МОЖЕТ БЫТЬ ОПРЕДЕЛЕН из наличия relationship(foreign key) из одной из наследованных таблиц к общей. ИТОГ: мы создаем надтип, делаем для него запрос, НО потом при работе с этим запросом приходится использовать особенности подтипа. дальше пока не смотрел, т.к. это решение будет краеугольным, если кто сталкивался с подобным - подскажите как по опыту: стоят ли надтипы их применения. П.С. (английские понятия применены для объектов базы, русские - объектов предметной области, иначе бы возникла путаница) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 17:21 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
В реляционных БД нет понятия связи. Это понятие остаётся в области моделирования структуры данных и иногда преобразуется в ограничения ссылочной целостности. Я так понимаю, игры с таблицей Objects исходят из желания насоздавать побольше FK. Но стоит ли игра затраченных усилий? Ведь можно просто создать таблицу связей объектов такого вида (или типа того): link( id1 number, table1 number, id2 number, table2 number ) где id1 и id2 - значения суррогатных ключей связанных записей БД, а table1, table2 - коды названий таблиц, в которых хранятся соответствующие id1 и id2 записи. Без внешних ключей эта таблица становится универсальной для всех связей. Из неприятностей, которые могут нас поджидать можно назвать висячие ссылки, т.е. ситуация когда связь присутствует, а один или оба объекта на её концах удалены. Но это как бы не проблема. Просто нужно учитывать сей факт при написании запросов. Например в объектных БД есть даже условия для проверки в запросе висячих ссылок. С другой стороны, если такая унификация не даёт ощутимого выйгрыша в процессе кодирования приложений БД, то имеет смысл для каждой ассоциации создать отдельную таблиу связей (сколько бы их там не было), заодно решив вопрос висячих ссылок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 18:26 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
возможно я не вполне внятно объяснился: фактически пишется поисковая система, на этапе проектирования базы необходимо принять\не принимать решение об унификации (создания отношения-архитипа, для сходных отношений). там где "связь" - это связь реального мира! а для моделирования (базы), я специально во избежание путаницы, применял понятие relftionship (foreign key). связи - это связь из предметной области (например: человек(Table) - (1) Работает в орг-ии (table) - Юр лицо (Table) человек (Table) - (2) учредитиль орг-ии(table) - юр. лицо (table) и вот таких таблиц связей (1) (2) ..... будет 40+ (в каждой собственный, семантически обособленный, набор атрибутов(полей)). и одна общая таблица для их унификации, так вот нужна ли она? если после мы все равно переходим к семантике и рассматпиваем КОНКРЕТНЫЕ таблицы. Есть еще 1 вариант - но он мне НЕ нравится - создать таблицу Connections (fromConnectedID, toConnectedID, ConnectionType), и к ней по внешним ключам присоединять таблицы для ВСЕХ ВОЗМОЖНЫХ СВОЙСТВ КАЖДОГО ИЗ ПОДТИПОВ, и на уровне логики приложения выбирать - какие свойства нужны для конкретного запроса поиска. НО это будет вообще лишенная "смысла", невыразительная база. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 12:00 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
(туда же) т.е. на уровне базы КАЖДЫЙ объект потенциально обладает ВСЕМ ВОЗМОЖНЫМ НАБОРОМ СВОЙСТВ. и на уровне базы не отражено: допустимо ли данное свойство для объекта - а лишь на уровне приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 12:05 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
2_Kostyan_ ты в СБ работаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 12:15 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
_Kostyan_связи - это связь из предметной области (например: человек(Table) - (1) Работает в орг-ии (table) - Юр лицо (Table) человек (Table) - (2) учредитиль орг-ии(table) - юр. лицо (table) Это не связи - это свойства объекта человек. Их тип- ссылка на объект(ы) типа Юр лицо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 12:39 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
_мод _Kostyan_связи - это связь из предметной области (например: человек(Table) - (1) Работает в орг-ии (table) - Юр лицо (Table) человек (Table) - (2) учредитиль орг-ии(table) - юр. лицо (table) Это не связи - это свойства объекта человек. Их тип- ссылка на объект(ы) типа Юр лицо. уже понял, что топик получился непонятным с 1-го раза. связи (пр. области) = кросс. таблица свойств (БД)..... (и еще много непонятного). думаю, что этой непонятностью тема загублена, а править тут сообщения нельзя. НАВЕРНОЕ ЗАКРЫТО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 12:57 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
Чендлер2_Kostyan_ ты в СБ работаешь? программист . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 12:57 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
_Kostyan_ Чендлер2_Kostyan_ ты в СБ работаешь? программист . в аську заглини ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 13:09 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
_Kostyan_(туда же) т.е. на уровне базы КАЖДЫЙ объект потенциально обладает ВСЕМ ВОЗМОЖНЫМ НАБОРОМ СВОЙСТВ. и на уровне базы не отражено: допустимо ли данное свойство для объекта - а лишь на уровне приложения. А это разве прохо? Если понадобится добавить новый тип связи, тебе не придётся дорабатывать БД, поскольку она и так достаточно универсальна. С другой стороны, связи "Работает в, "Учредитель", и т.п. вообще говоря достойны того, чтобы завести для них нормальные таблицы, типа "Трудовая книжка", "Трудовой контракт", не знаю точно... "Устав фирмы", и т.п. Кроме того, бывают многосторонние связи объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 13:25 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
_Kostyan_ уже понял, что топик получился непонятным с 1-го раза. А чем не устраивает стандартный подход PK-FK ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 13:40 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
mcureenabС другой стороны, связи "Работает в, "Учредитель", и т.п. вообще говоря достойны того, чтобы завести для них нормальные таблицы, типа "Трудовая книжка", "Трудовой контракт", не знаю точно... "Устав фирмы", и т.п. Кроме того, бывают многосторонние связи объектов. 1. отдельные таблицы заведены - но это "за пределами ядра" базы, т.е. эти связи НЕ ПОВЛИЯЮТ НА ОРГАНИЗАЦИЮ КРОСС-СВЯЗЕЙ, поэтому я их не стал упоминать (там 2-ые и 3-ые словати есть на самом деле) 2. многосторонние связи уже учтены, но если говорить о них - вообще непонятно ничего будет. (вернее понятно после прочтения 2-х стр. текста. вообще все НАГЛЯДНО в другой теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 13:50 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
Чендлер _Kostyan_ Чендлер2_Kostyan_ ты в СБ работаешь? программист . в аську заглини ага, только вечером :( (бтв. ты как "гость" вошел) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 14:08 |
|
||
|
Наследование типов в РСУБД
|
|||
|---|---|---|---|
|
#18+
_Kostyan_ 1. отдельные таблицы заведены - но это "за пределами ядра" базы, т.е. эти связи НЕ ПОВЛИЯЮТ НА ОРГАНИЗАЦИЮ КРОСС-СВЯЗЕЙ, поэтому я их не стал упоминать (там 2-ые и 3-ые словати есть на самом деле) Что то идея всё больше напоминает DWH. Только не хватает завести талицы измерений и в таблице фактов устанавливать связи между записями в таблицах измерений. Короче, сделай OLAP БД полностью отдельную от OLTP базы данных и перегружай внеё все необходимые сведения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 14:51 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35134520&tid=1544031]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
165ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 428ms |

| 0 / 0 |
