powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с отображением в схему БД классов
6 сообщений из 6, страница 1 из 1
Проблема с отображением в схему БД классов
    #33326752
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая связь между классами: класс родитель и 2 класса потомка (может быть и больше). При наследовании в одном из классов добавляется еще один атрибут
Проблема в отображении данной связи на таблицы в БД
Я хотел сделать так:

Таблица Аctions c атрибутами
ID
ActionAID
ActionBID

и 2 соответствующие таблицы с атрибутами для сущностей ActionA и ActionB отдельно

в эту таблицу можно добавить запись только с одним из типов Action'a - или ActionA or ActionB
но тогда получается, что в каждом кортеже в табл Actions будет значение NULL в одном из атрибутов - получается разряженная таблица
Существует ли ли другой подход для решения подобного рода задач?
Диаграмма классов приложена
...
Рейтинг: 0 / 0
Проблема с отображением в схему БД классов
    #33326945
4321_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если пользовацца постгресовским наследованием, то таблица -родитель (Аctions) может быть "виртуальной" - без записей. А распознать, какие именно записи вернул запрос
SELECT * FROM Аctions;
можно модифицируя
SELECT *,tableoid FROM Аctions;
где tableoid - служебное слово (поле - указатель на oid в pg_class)
Например:
CREATE TABLE Аctions
(
aid int8 DEFAULT nextval(....))
WITHOUT OID;

CREATE TABLE АctionsA
(
....)
INHERITS (Аctions)
WITHOUT OID;

CREATE TABLE АctionsB
(
....)
INHERIT Аctions
WITHOUT OID;
....
причем уникальность aid по всем наследованным таблицам можно обеспечить триггером BEFORE UPDATE / BEFORE INSERT
примерно так:
Код: plaintext
...\n   vaid:= (SELECT aid FROM Аctions WHERE aid = NEW.aid);\n   IF NOT (vaid IS NULL) \n   THEN\n      NEW.aid = nextval(....);\n      vaid:= (SELECT aid FROM Аctions WHERE aid = NEW.aid);\n      IF NOT (vaid IS NULL) \n      THEN\n          SELECT setval(....);\n          NEW.aid = nextval(....);\n      END IF;\n   END IF;\n   RETURN NEW;

но можно сделать и просто DEFAULT nextval(....);, а чек уникальности по всей иерархии (и даже ключи) - на отдельном(ых) триггере - вроде бы есть в контрибах. Вероятно будет шустрее, не уверен.
...
Рейтинг: 0 / 0
Проблема с отображением в схему БД классов
    #33328679
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KPIISЕсть такая связь между классами: класс родитель и 2 класса потомка (может быть и больше). При наследовании в одном из классов добавляется еще один атрибут
Проблема в отображении данной связи на таблицы в БД
Я хотел сделать так:

Таблица Аctions c атрибутами
ID
ActionAID
ActionBID


Я не уверен, что правильно понимаю задачу,
но я бы сказал, что не Actions должен ссылаться
на А и B, а наоборот, т.е. ActionAID и ActionBID
должны иметь поле ParentID, ссылающееяся на Action.
...
Рейтинг: 0 / 0
Проблема с отображением в схему БД классов
    #33328834
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это диаграмма классов
Как перенести данную диаграмму в понятия RDB - у меня возникли вопросы
То есть у вас есть набор классов (1,2....*), которые унаследованы от одного общего класса (абстрактого) - почти у всех одни и те же атрибуты, но у одного из наследников добавляется один атрибут, который рушит всю "красивость" :)
...
Рейтинг: 0 / 0
Проблема с отображением в схему БД классов
    #33328867
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проблема с отображением в схему БД классов
    #33328903
KPIIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to XM - огромное спасибо

Single Table Inheritance - я думал это неправильно :) (разряженная таблица)

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


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