|
|
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
Есть несколько несвязанных таблиц похожей природы - например, таблицы Кошки, Собаки и Лошади. Список этих таблиц со временем может увеличиваться. Таблицы содержат Id, несколько общих полей (например, порода, описание) и несколько специфичных полей. Необходимо так организовать базу чтобы можно было проще ссылаться на эти таблицы, обеспечив целостность данных. Например, необходимо вставлять ссылки на эти таблицы в таблицы МоиЛюбимыеЖивотные, ЖивотныеРекорды и т. п. Я придумал несколько вариантов, но не могу решить который из них лучше. 1. Сделать таблицу Животные (Id, КошкиId, СобакиId, ЛошадиId) и обеспечить целостность данных с помощью внешних ключей. При необходимости сослаться на животное вставить в таблицу Животные новую запись, если такой еще нет и использовать ее Id. При добавление новых объектов добавлять столбцы в таблицу Животные. 2. Сделать таблицу ВидыЖивотных(Id, ИмяТаблицы) с данными (1, 'Кошки') и т. д. Создать таблицу Животные (Id, ВидыЖивотныхId, СтрокаId). Реализовать триггеры на добавление и удаление строк в таблицах Кошки, Собаки, Лошади, добавляющие или удаляющие соответсвующие записи в таблицу Животные. Ссылаться на таблицу Животные. При добавлении новых объектов-таблиц сделать об этом запись в таблице ВидыЖивотных и создать для нее соответсвующие триггеры. 3. Различные вариации первых двух способов. Второй способ кажется проще, второй - сложнее, но надёжнее (явные связи таблиц, а не с помощью триггеров). Посоветуйте как лучше это реализовать (ORACLE). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2008, 19:39 |
|
||
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
thehil wrote: Найди прочитай про отношение подкатегории (subcategory), оно самое то. В документации по ErWin например. > 2. Сделать таблицу ВидыЖивотных(Id, ИмяТаблицы) с данными (1, 'Кошки') и > т. д. Создать таблицу Животные > (Id, ВидыЖивотныхId, СтрокаId). Реализовать триггеры на добавление и > удаление строк в таблицах > Кошки, Собаки, Лошади, добавляющие или удаляющие соответсвующие записи в > таблицу Животные. > Ссылаться на таблицу Животные. При добавлении новых объектов-таблиц > сделать об этом запись в таблице > ВидыЖивотных и создать для нее соответсвующие триггеры. Триггера--то зачем ? > Посоветуйте как лучше это реализовать (ORACLE). Правильно. Как отношение подкатегории. Оно же - наследование в OOA/OOD. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 01:04 |
|
||
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
thehilСделать таблицу ВидыЖивотных(Id, ИмяТаблицы) с данными (1, 'Кошки') и т. д. А еще м.б. домашние,дикие, млекопитающие, пресмыкающиеся, травоядные, хищные, крупные, мелкие ну и т.д. Одной табличкой не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 09:24 |
|
||
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
Объясню еще раз оба моих варианта: Таблица Кошки: |- КошкаId (PK) +- Остальные поля Таблица Собаки: |- СобакаId (PK) +- Остальные поля ... ============================================================ 1. Таблица Ссылки: |- СсылкаId (PK) |- КошкаId (FK для Кошки.КошкаId) |- СобакаId (FK для Собаки.СобакаId) +- ... Таблица МоиЛюбимыеЖивотные |-МЛЖId (PK) |-СсылкаId (FK для Ссылки.СсылкаId) +- ... Работа с этой структурой: create or replace view СсылкиView as select 1 as ВидЖивотного КошкаId as IdЖивотного Название from Кошки union all select 2 as ВидЖивотного СобакаId as IdЖивотного Название from Собаки union all ... create or replace view МоиЛюбимыеЖивотныеView as select МЛЖ.*, C.* from МоиЛюбимыеЖивотные МЛЖ, СсылкиView С where МЛЖ.СсылкаId = C.СсылкаId Чтобы добавить новый объект в МЛЖ - добавляю его сразу в Cсылки, а потом в МЛЖ. ============================================================ 2. Чуть позже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 12:32 |
|
||
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
thehilЕсть несколько несвязанных таблиц похожей природы - например, таблицы Кошки, Собаки и Лошади.Почитайте вот эту тему . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 15:56 |
|
||
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
thehil wrote: > Таблица Кошки: > |- КошкаId (PK) > +- Остальные поля > > Таблица Собаки: > |- СобакаId (PK) > +- Остальные поля > ... > ============================================================ > 1. > Таблица Ссылки: > |- СсылкаId (PK) > |- КошкаId (FK для Кошки.КошкаId) > |- СобакаId (FK для Собаки.СобакаId) > +- ... > > Таблица МоиЛюбимыеЖивотные > |-МЛЖId (PK) > |-СсылкаId (FK для Ссылки.СсылкаId) > +- ... Это - плохая структура. Ну т.е. как плохая ? Работать - будет. РБД вообще штука гибкая. Но можно - лучше. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 17:22 |
|
||
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
Можно онежо изовать наследование и специализацию типов, но для начала лучше сосредоточиться на использовании данных. Если записи о кошках, собаках, лошадях используются единообразно, то и деление их по разным таблицам скорее усложнит систему, сузит её область применения. Париться на счёт нерелевантных полей тоже не стоит, лучше по возможности придуать более абстрактные домены и добавить ограничения целостности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2008, 17:25 |
|
||
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
BelyПочитайте вот эту тему . К сожалению, как рекомендуется во многих случаях я не могу модифицировать исходные таблицы - они представлены как есть и их нельзя объединить или добавить столбцы, ключи и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2008, 09:03 |
|
||
|
Организация БД (иерархия? наследование?)
|
|||
|---|---|---|---|
|
#18+
thehil BelyПочитайте вот эту тему . К сожалению, как рекомендуется во многих случаях я не могу модифицировать исходные таблицы - они представлены как есть и их нельзя объединить или добавить столбцы, ключи и т.д.Ну а кто вам мешает добавить обвязку из таблиц, как описано по ссылке, а исходные таблицы - оставить как есть. И требование - нельзя менять таблицы - тоже странное. Если надо менять систему, то менять можно все, что считается нужным (из соображений правильности и трудоемкости). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2008, 12:25 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35528531&tid=1543673]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 356ms |

| 0 / 0 |
