SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Избыточная ссылочность
Избыточная ссылочность [сообщение #1082] Mon, 05 December 2022 14:48 Переход к следующему сообщению
Док в настоящее время не в онлайне  Док
Сообщений: 98
Зарегистрирован: June 2022
Member
Комрады, есть мысль сделать в табле дополнительные внешние ключи, чтобы не добывать нужные сведения лишними джойнами из подчиненых таблиц. Насколько это целесообразно? И чем может грозить?

CREATE TABLE TBL_CHILD_1 (
    ID           INTEGER NOT NULL,
    FK_SUBCHILD  INTEGER,
    NAME         INTEGER
);

CREATE TABLE TBL_CHILD_2 (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR(10)
);

CREATE TABLE TBL_MAIN (
    ID           INTEGER NOT NULL,
    FK_CHILD_1   INTEGER,
    FK_CHILD_2   INTEGER,
    FK_SUBCHILD  INTEGER,
    NAME         VARCHAR(10)
);

CREATE TABLE TBL_SUB_CHILD (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR(10)
);

/******************************************************************************/
/***                              Primary keys                              ***/
/******************************************************************************/

ALTER TABLE TBL_CHILD_1 ADD CONSTRAINT PK_TBL_CHILD_1 PRIMARY KEY (ID);
ALTER TABLE TBL_CHILD_2 ADD CONSTRAINT PK_TBL_CHILD_2 PRIMARY KEY (ID);
ALTER TABLE TBL_MAIN ADD CONSTRAINT PK_TBL_MAIN PRIMARY KEY (ID);
ALTER TABLE TBL_SUB_CHILD ADD CONSTRAINT PK_TBL_SUB_CHILD PRIMARY KEY (ID);


/******************************************************************************/
/***                              Foreign keys                              ***/
/******************************************************************************/

ALTER TABLE TBL_CHILD_1 ADD CONSTRAINT FK_TBL_CHILD_1_1 FOREIGN KEY (FK_SUBCHILD) REFERENCES TBL_SUB_CHILD (ID);
ALTER TABLE TBL_MAIN ADD CONSTRAINT FK_TBL_MAIN_1 FOREIGN KEY (FK_CHILD_1) REFERENCES TBL_CHILD_1 (ID);
ALTER TABLE TBL_MAIN ADD CONSTRAINT FK_TBL_MAIN_2 FOREIGN KEY (FK_CHILD_2) REFERENCES TBL_CHILD_2 (ID);
ALTER TABLE TBL_MAIN ADD CONSTRAINT FK_TBL_MAIN_3 FOREIGN KEY (FK_SUBCHILD) REFERENCES TBL_SUB_CHILD (ID);
https://i.imgur.com/ZUcVZIf.png


FPC/Lazarus (trunk) | Win10 x64 Ultim/Debian 11 amd64/Darwin x86_64 Monterey | Firebird 3.0.10 x64 | IBX by TonyWhyman

https://zoltanleo.blogspot.com/
Re: Избыточная ссылочность [сообщение #1083 является ответом на сообщение #1082] Mon, 05 December 2022 14:54 Переход к предыдущему сообщениюПереход к следующему сообщению
pastor в настоящее время не в онлайне  pastor
Сообщений: 43
Зарегистрирован: June 2022
Географическое положение: Калуга
Member
эта штука называется ДЕНОРМАЛИЗАЦИЯ.
для некоторых фактов я пишу не только ссылки на справочники, но и значения, актуальные на момент вставки. кое-где - отдельное текстовое поле "описание" со снимком актуальных значений на момент вставки

в приведенной схеме может быть рассинхрон. лечится или on update CASCADE или запретом изменений
Re: Избыточная ссылочность [сообщение #1085 является ответом на сообщение #1083] Mon, 05 December 2022 15:26 Переход к предыдущему сообщениюПереход к следующему сообщению
Док в настоящее время не в онлайне  Док
Сообщений: 98
Зарегистрирован: June 2022
Member
@pastor

OnUpdate/OnDelete намеренно опустил, щас это для меня неважно

Я пока про подводные камни и феншуй


FPC/Lazarus (trunk) | Win10 x64 Ultim/Debian 11 amd64/Darwin x86_64 Monterey | Firebird 3.0.10 x64 | IBX by TonyWhyman

https://zoltanleo.blogspot.com/
Re: Избыточная ссылочность [сообщение #1086 является ответом на сообщение #1085] Mon, 05 December 2022 16:08 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 769
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
ты опять начинаешь лечить до получения анамнеза.
Re: Избыточная ссылочность [сообщение #1087 является ответом на сообщение #1085] Mon, 05 December 2022 16:16 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 287
Зарегистрирован: June 2022
Senior Member
Если без этого не обойтись, то можно. При условии что TBL_CHILD_1 меняется крайне редко.
Re: Избыточная ссылочность [сообщение #1089 является ответом на сообщение #1085] Mon, 05 December 2022 16:41 Переход к предыдущему сообщениюПереход к следующему сообщению
pastor в настоящее время не в онлайне  pastor
Сообщений: 43
Зарегистрирован: June 2022
Географическое положение: Калуга
Member
цена вопроса.

если экономить на join - то проще сразу подтянуть данные

если этих join меньше десяти - то проще сгородить select

в общем и целом, простая ссылка на справочник ничего не упрощает, а промежуточный справочник тащить так и так.

[Обновления: Mon, 05 December 2022 16:42]

Известить модератора

Re: Избыточная ссылочность [сообщение #1091 является ответом на сообщение #1089] Mon, 05 December 2022 16:50 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 287
Зарегистрирован: June 2022
Senior Member
Именно на справочник не упрощает конечно. Такая денормализация имеет смысл, если у вас допустим есть таблица с историей чего либо, и вам надо в основной таблице показать последнее значение из справочника. Вот тут да, скорость можно разогнать существенно.

К примеру.

Лошадь -> Реестр владельцев -> Хозяйство.

Для того чтобы быстренько узнать текущего владельца можно ссылку на последнее хозяйство в реестре бросить.
Re: Избыточная ссылочность [сообщение #1093 является ответом на сообщение #1091] Tue, 06 December 2022 08:52 Переход к предыдущему сообщениюПереход к следующему сообщению
stelvic в настоящее время не в онлайне  stelvic
Сообщений: 8
Зарегистрирован: November 2022
Junior Member
Чтобы поменьше джойнов было можно вьюхи использовать
Re: Избыточная ссылочность [сообщение #1094 является ответом на сообщение #1093] Tue, 06 December 2022 15:29 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 328
Зарегистрирован: August 2022
Senior Member
А ещё можно глаза закрыть чтобы их не видеть, да.
Re: Избыточная ссылочность [сообщение #1097 является ответом на сообщение #1086] Wed, 07 December 2022 01:09 Переход к предыдущему сообщениюПереход к следующему сообщению
Док в настоящее время не в онлайне  Док
Сообщений: 98
Зарегистрирован: June 2022
Member
МП писал(а) Mon, 05 December 2022 16:08
ты опять начинаешь лечить до получения анамнеза.
да, как бэ, есть у меня в старом проекте многоэтажный запрос с лефт джоном и группировкой - тормозит уже на 30 тыс записях. А я тут пока на этапе проектирования пытаюсь избежать потенциальных граблей Sad


FPC/Lazarus (trunk) | Win10 x64 Ultim/Debian 11 amd64/Darwin x86_64 Monterey | Firebird 3.0.10 x64 | IBX by TonyWhyman

https://zoltanleo.blogspot.com/

[Обновления: Wed, 07 December 2022 01:11]

Известить модератора

Re: Избыточная ссылочность [сообщение #1098 является ответом на сообщение #1089] Wed, 07 December 2022 01:11 Переход к предыдущему сообщениюПереход к следующему сообщению
Док в настоящее время не в онлайне  Док
Сообщений: 98
Зарегистрирован: June 2022
Member
pastor писал(а) Mon, 05 December 2022 16:41
цена вопроса.

если экономить на join - то проще сразу подтянуть данные

если этих join меньше десяти - то проще сгородить select

в общем и целом, простая ссылка на справочник ничего не упрощает, а промежуточный справочник тащить так и так.
ОК. Доверюсь более опытным.

Спасибо всем за мнения.


FPC/Lazarus (trunk) | Win10 x64 Ultim/Debian 11 amd64/Darwin x86_64 Monterey | Firebird 3.0.10 x64 | IBX by TonyWhyman

https://zoltanleo.blogspot.com/
Re: Избыточная ссылочность [сообщение #1100 является ответом на сообщение #1097] Wed, 07 December 2022 01:51 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 328
Зарегистрирован: August 2022
Senior Member
Специально для этого есть EXPLAIN PLAN. И далее воскурение до просветления.
Re: Избыточная ссылочность [сообщение #1103 является ответом на сообщение #1097] Wed, 07 December 2022 12:17 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 769
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
Док
. да, как бэ, есть у меня в старом проекте многоэтажный запрос с лефт джоном и группировкой - тормозит уже на 30 тыс записях. А я тут пока на этапе проектирования пытаюсь избежать потенциальных граблей Sad
забей.
заниматься оптимизацией на этапе проектирования, без реальных данных - малоценное занятие.

Re: Избыточная ссылочность [сообщение #1114 является ответом на сообщение #1103] Thu, 08 December 2022 18:13 Переход к предыдущему сообщению
Док в настоящее время не в онлайне  Док
Сообщений: 98
Зарегистрирован: June 2022
Member
SD писал(а) Wed, 07 December 2022 01:51
Специально для этого есть EXPLAIN PLAN. И далее воскурение до просветления.
Спасибо за инфу - не знал, почитаю.


МП писал(а) Wed, 07 December 2022 12:17
забей.
заниматься оптимизацией на этапе проектирования, без реальных данных - малоценное занятие.
Уже Smile


FPC/Lazarus (trunk) | Win10 x64 Ultim/Debian 11 amd64/Darwin x86_64 Monterey | Firebird 3.0.10 x64 | IBX by TonyWhyman

https://zoltanleo.blogspot.com/
Предыдущая тема: create user using plugin Srp;
Следующая тема: Проектирование БД: таблица прайсов
Переход к форуму:
  


Текущее время: Thu Mar 28 23:09:30 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00768 секунд