powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дизайн БД
24 сообщений из 24, страница 1 из 1
Дизайн БД
    #38870618
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, коллеги!
Есть несколько условно однотипных таблиц (A,B,C):
Код: sql
1.
2.
3.
create table A (
ID integer not null primary key,
TEXT varchar(30));

И есть еще одна таблица:
Код: sql
1.
2.
3.
4.
5.
6.
create table NOTES (
ID bigint not null primary key,
A_ID integer,
B_ID integer,
C_ID integer,
TS timestamp);

Запись в таблице Notes может относиться только к одной записи из одной из таблиц A, B или C, но записям из таблиц A, B, C может соответствовать несколько записей в Notes (или не одной), т.е. имеем классический 1:M (A-Notes). Сейчас на все три поля стоят foreign key на соответствующие таблицы. Все работает. Но! Наметилась тенденция к росту числа таблиц (D, E, ...), что не нравится (до кучи еще и проверять надо, что только одно xx_ID поле заполнено).
Такой вариант
Код: sql
1.
2.
3.
4.
5.
create table NOTES (
ID bigint not null primary key,
OBJ_TYPE smallint,
OBJ_ID integer,
TS timestamp);

когда OBJ_TYPE определяет таблицу, в которой нужно искать OBJ_ID, не очень нравится ввиду того, что целостность на базе FK не обеспечить, только триггерами.
Рассматривал еще вариант с промежуточной таблицей
Код: sql
1.
2.
3.
create table OBJECTS (
ID integer not null primary key,
OBJ_TYPE smallint not null);

на которую ссылались бы по FK таблицы (А, B, ..) и, соответственно, NOTES. Тогда на FK все работает, но требует:
- приличной переделки БД и обновления данных, поскольку ID в таблицах A,B,C пересекаются (ключи суррогатные).
- доп. затрат на поддержку связей с таблицей OBJECTS (удаление записей из нее при удалении записи из одной их таблиц A...).
Есть ли иные варианты?
...
Рейтинг: 0 / 0
Дизайн БД
    #38870623
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev...

Может в данном случае из таблиц A,B,C... сслаться на таблицу NOTES

новые значения заполняются автоматом скриптом ( новые ID ), внешний ключ null-able
...
Рейтинг: 0 / 0
Дизайн БД
    #38870628
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в принципе для удаления, можно сделать так

T_PARENT ( id primary key )

A ( id FK ( t_parent.id ) on delete cascade )
B ( id FK ( t_parent.id ) on delete cascade)
C ( id FK ( t_parent.id ) on delete cascade)
...
Z ( id FK ( t_parent.id ) )

NOTES ( id FK ( t_parent.id ) on delete cascade)

А реально есть проблема с хранением комментариев в каждой таблице?
...
Рейтинг: 0 / 0
Дизайн БД
    #38870633
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никаких каскадов.
никаких удалений.
если это ERP, а не автоматизация пивного ларька.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Дизайн БД
    #38870668
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийникаких каскадов.
никаких удалений.
если это ERP, а не автоматизация пивного ларька.


:) Какая это ERP где Notes ( table1.id .... tableN.id, note )?

Да и данные разные бывают, недавно где-то задача проскакивала про отложенную отработку заявок, непроверенные данные не всегда нужны.

Да и ещё, был такой пункт в законе, про удаление личных данных по запросу.
...
Рейтинг: 0 / 0
Дизайн БД
    #38870674
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev,
Вместе с избавлением от нескольких ссылок в NOTES избавиться и от нескольких таблиц (A.B,C)
Ну как-то так, если я правильно понял
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table A (
ID integer not null primary key,
OBJ_TYPE smallint,
TEXT varchar(30));


create table NOTES (
ID bigint not null primary key,
A_ID integer,
TS timestamp);
...
Рейтинг: 0 / 0
Дизайн БД
    #38870754
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev> Есть ли иные варианты?

Ну я хотел то же, что и m7m спросить -
можно ли объединить таблицы A, B ... E
в одну, однотипны ли они? Это похоже
на твой второй вариант, но проще и лучше.

А какая предметная область, что за типы
объектов (документооборот, AFAIU) ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Дизайн БД
    #38870971
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81Да и ещё, был такой пункт в законе, про удаление личных данных по запросу.нет такого пункта в законе.
более того, во многих случаях удаление персональных данных невозможно, так как сделает невозможным работу с физ. лицами.
...
Рейтинг: 0 / 0
Дизайн БД
    #38871030
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadsterNikolayV81Да и ещё, был такой пункт в законе, про удаление личных данных по запросу.нет такого пункта в законе.
более того, во многих случаях удаление персональных данных невозможно, так как сделает невозможным работу с физ. лицами.

Пункт такой есть. Автоматом отменяется основной документ, к которому шло согласие на использование... Например трудовой договор :)
...
Рейтинг: 0 / 0
Дизайн БД
    #38871036
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadsterNikolayV81Да и ещё, был такой пункт в законе, про удаление личных данных по запросу.нет такого пункта в законе.
более того, во многих случаях удаление персональных данных невозможно, так как сделает невозможным работу с физ. лицами.
1. Субъект персональных данных имеет право на получение сведений, указанных в "части 7" настоящей статьи, за исключением случаев, предусмотренных "частью 8" настоящей статьи. Субъект персональных данных вправе требовать от оператора уточнения его персональных данных, их блокирования или уничтожения в случае, если персональные данные являются неполными, устаревшими, неточными, незаконно полученными или не являются необходимыми для заявленной цели обработки, а также принимать предусмотренные законом меры по защите своих прав.


Это только один из вариантов, закон можно трактовать по разному, придёт к вам человек с решением суда ;)
...
Рейтинг: 0 / 0
Дизайн БД
    #38871267
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81 уничтожения в случае, если персональные данные являются неполными, устаревшими, неточными, незаконно полученными или не являются необходимыми для заявленной цели обработки
...
Рейтинг: 0 / 0
Дизайн БД
    #38871291
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В условиях отсутствия критериев "необходимости" это пустая болтовня и повод для взяток.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Дизайн БД
    #38871295
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ условиях отсутствия критериев "необходимости" это пустая болтовня+1
...
Рейтинг: 0 / 0
Дизайн БД
    #38872322
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ условиях отсутствия критериев "необходимости" это пустая болтовня и повод для взяток.

Ну да проще удалить, темболие что "обязанность по выполнению критериев лежит на операторе", т.е. сначала докажите через суд что вым они "необходимы"
...
Рейтинг: 0 / 0
Дизайн БД
    #38872325
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81...
"тем более"
...
Рейтинг: 0 / 0
Дизайн БД
    #38872466
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81Ну да проще удалитьособенно если эти данные уже в бумажный архив ушли или был подписан договор (который в суде как бы запросят в случае чего), видимо для Вас нет проблем удалить персональные данные с бумажного носителя при сохранении самого носителя...
...
Рейтинг: 0 / 0
Дизайн БД
    #38872502
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамНу я хотел то же, что и m7m спросить -
можно ли объединить таблицы A, B ... E
в одну, однотипны ли они? Это похоже
на твой второй вариант, но проще и лучше.
А какая предметная область, что за типы
объектов (документооборот, AFAIU) ?
Нет, таблицы не однотипны совсем, в противном случае давно были бы слиты в одну.
Да, своего рода документооборот, но реквизиты у каждого "документа" очень разные.
...
Рейтинг: 0 / 0
Дизайн БД
    #38872553
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roadsterNikolayV81Ну да проще удалитьособенно если эти данные уже в бумажный архив ушли или был подписан договор (который в суде как бы запросят в случае чего), видимо для Вас нет проблем удалить персональные данные с бумажного носителя при сохранении самого носителя...
Бывает и так, что бумажки изымаются. Вы слишком категоричны по поводу "не удалять никогда", мир не идеален, статусы у документов тоже разные бывают ;)
...
Рейтинг: 0 / 0
Дизайн БД
    #38872554
Фотография roadster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81вы слишком категоричны по поводу "не удалять никогда"я написал, что во многих случаях это невозможно.
...
Рейтинг: 0 / 0
Дизайн БД
    #38872564
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81Может в данном случае из таблиц A,B,C... сслаться на таблицу NOTES
Отношение между A, B, C и NOTES - 1:M, из первых таблиц ссылаться не получится.

А реально есть проблема с хранением комментариев в каждой таблице?
см. выше, к одному объекту в таблицах A,B,C может быть несколько комментариев в Notes.

Рассматривал также вариант с разделением NOTES по источникам: A_NOTES, B_NOTES...
Но еще менее красиво получается...
...
Рейтинг: 0 / 0
Дизайн БД
    #38872580
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev,

Ну может вот так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table ALL (
ID integer not null primary key,
OBJ_TYPE smallint,
TEXT varchar(30));

create table A,B,C... (
ALL_ID integer not null primary key,
TEXT varchar(30)
.............
.............
.............
);

create table NOTES (
ID bigint not null primary key,
ALL_ID integer,
TS timestamp);
...
Рейтинг: 0 / 0
Дизайн БД
    #38872840
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собсно, в таком абстрактно-теоретическом ключе много
не пообсуждаешь, варианты и плюсы/минусы ты уже знаешь.

Kirill Razuvaev> Нет, таблицы не однотипны совсем
Kirill Razuvaev> реквизиты у каждого "документа" очень разные.

Ну, значит можно вынести шапку в общую таблицу, а
специфические/различающиеся реквизиты - в отдельные.
Все в базе, на FK, средней степени кошерности. Я такое
делал разок, но там 1 тип документов был нестандартный,
всё остальное как обычно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Дизайн БД
    #38872843
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, вот коллега m7m опять обскакал меня, на 4 часа. :)
Правда, у него "шапка документа" очень маленькая.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Дизайн БД
    #38872991
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамО, вот коллега m7m опять обскакал меня, на 4 часа. :)
Правда, у него "шапка документа" очень маленькая.Собственно, я к такому варианту и пришел в самом начале :-) Думал, мало ли, иные взгляды/решения есть.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Дизайн БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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