powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация БД (иерархия? наследование?)
9 сообщений из 9, страница 1 из 1
Организация БД (иерархия? наследование?)
    #35528531
thehil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть несколько несвязанных таблиц похожей природы - например, таблицы Кошки, Собаки и Лошади.
Список этих таблиц со временем может увеличиваться.
Таблицы содержат Id, несколько общих полей (например, порода, описание) и несколько специфичных полей.
Необходимо так организовать базу чтобы можно было проще ссылаться на эти таблицы, обеспечив целостность данных.
Например, необходимо вставлять ссылки на эти таблицы в таблицы МоиЛюбимыеЖивотные, ЖивотныеРекорды и т. п.
Я придумал несколько вариантов, но не могу решить который из них лучше.
1. Сделать таблицу Животные (Id, КошкиId, СобакиId, ЛошадиId) и обеспечить целостность данных с помощью
внешних ключей. При необходимости сослаться на животное вставить в таблицу Животные новую запись,
если такой еще нет и использовать ее Id. При добавление новых объектов добавлять столбцы в таблицу Животные.
2. Сделать таблицу ВидыЖивотных(Id, ИмяТаблицы) с данными (1, 'Кошки') и т. д. Создать таблицу Животные
(Id, ВидыЖивотныхId, СтрокаId). Реализовать триггеры на добавление и удаление строк в таблицах
Кошки, Собаки, Лошади, добавляющие или удаляющие соответсвующие записи в таблицу Животные.
Ссылаться на таблицу Животные. При добавлении новых объектов-таблиц сделать об этом запись в таблице
ВидыЖивотных и создать для нее соответсвующие триггеры.
3. Различные вариации первых двух способов.
Второй способ кажется проще, второй - сложнее, но надёжнее (явные связи таблиц, а не с помощью триггеров).
Посоветуйте как лучше это реализовать (ORACLE).
...
Рейтинг: 0 / 0
Организация БД (иерархия? наследование?)
    #35528734
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thehil wrote:


Найди прочитай про отношение подкатегории (subcategory), оно самое то.
В документации по ErWin например.

> 2. Сделать таблицу ВидыЖивотных(Id, ИмяТаблицы) с данными (1, 'Кошки') и
> т. д. Создать таблицу Животные
> (Id, ВидыЖивотныхId, СтрокаId). Реализовать триггеры на добавление и
> удаление строк в таблицах
> Кошки, Собаки, Лошади, добавляющие или удаляющие соответсвующие записи в
> таблицу Животные.
> Ссылаться на таблицу Животные. При добавлении новых объектов-таблиц
> сделать об этом запись в таблице
> ВидыЖивотных и создать для нее соответсвующие триггеры.

Триггера--то зачем ?


> Посоветуйте как лучше это реализовать (ORACLE).

Правильно. Как отношение подкатегории. Оно же - наследование в OOA/OOD.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Организация БД (иерархия? наследование?)
    #35528923
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
thehilСделать таблицу ВидыЖивотных(Id, ИмяТаблицы) с данными (1, 'Кошки') и т. д.
А еще м.б. домашние,дикие, млекопитающие, пресмыкающиеся, травоядные, хищные, крупные, мелкие ну и т.д. Одной табличкой не обойтись.
...
Рейтинг: 0 / 0
Организация БД (иерархия? наследование?)
    #35529456
thehil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясню еще раз оба моих варианта:

Таблица Кошки:
|- Кошка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. Чуть позже...
...
Рейтинг: 0 / 0
Организация БД (иерархия? наследование?)
    #35530100
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thehilЕсть несколько несвязанных таблиц похожей природы - например, таблицы Кошки, Собаки и Лошади.Почитайте вот эту тему .
...
Рейтинг: 0 / 0
Организация БД (иерархия? наследование?)
    #35530403
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Организация БД (иерархия? наследование?)
    #35530420
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно онежо изовать наследование и специализацию типов, но для начала лучше сосредоточиться на использовании данных. Если записи о кошках, собаках, лошадях используются единообразно, то и деление их по разным таблицам скорее усложнит систему, сузит её область применения. Париться на счёт нерелевантных полей тоже не стоит, лучше по возможности придуать более абстрактные домены и добавить ограничения целостности.
...
Рейтинг: 0 / 0
Организация БД (иерархия? наследование?)
    #35531118
thehil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelyПочитайте вот эту тему .
К сожалению, как рекомендуется во многих случаях я не могу модифицировать исходные таблицы - они представлены как есть и их нельзя объединить или добавить столбцы, ключи и т.д.
...
Рейтинг: 0 / 0
Организация БД (иерархия? наследование?)
    #35531627
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thehil BelyПочитайте вот эту тему .
К сожалению, как рекомендуется во многих случаях я не могу модифицировать исходные таблицы - они представлены как есть и их нельзя объединить или добавить столбцы, ключи и т.д.Ну а кто вам мешает добавить обвязку из таблиц, как описано по ссылке, а исходные таблицы - оставить как есть.

И требование - нельзя менять таблицы - тоже странное.
Если надо менять систему, то менять можно все, что считается нужным (из соображений правильности и трудоемкости).
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация БД (иерархия? наследование?)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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