powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
12 сообщений из 62, страница 3 из 3
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394866
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльИ что значит "может измениться"? Ну да - в данном примере физ.лиц может лишиться гражданства или вступить в другое. И что за проблема? Удаляется одна запись и создаётся другая.
Это вы сейчас думаете, что вам не нужна история, или что её можно просто удалить, через некоторое время окажется по-другому.
Думать лучше не о том, как нажать поменьше кнопок при составлении модели, а о том, чтобы получить лучший результат.
Почему результат получится хуже, уже достаточно всякой информации приведено, имхо.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394900
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevЭто вы сейчас думаете, что вам не нужна история, или что её можно просто удалить, через некоторое время окажется по-другому.
Думать лучше не о том, как нажать поменьше кнопок при составлении модели, а о том, чтобы получить лучший результат.
Почему результат получится хуже, уже достаточно всякой информации приведено, имхо.

Мне пофиг, сколько кнопок нажимать - я не ленивый. Мне важно, чтобы логическая модель была максимально корректной и соответствующей предметной области. Минимальное "ручное вмешательство" в физическую модель избавляет меня от ошибок проектирования.

Вариантность данных во времени - серьезное бизнес-требование. Если его моделировать каждый раз "на всякий случай", OLTP-стсиемы требовали бы в 10 раз больше дискового пространства.

Однако для меня не очевиден Ваш постулат о том, что моя модель помешает накоплению истории.
Добавьте к 2-м полям составного ключа третье - типа "Дата окончания актуальности"... Есть и другие паттерны вариантности во времени, которые также не требуют суррогатного ключа с одним полем.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394918
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,
в чём сыр бор?
В том чтобы добавить в таблу ещё PK:
ГражданствоID_ФизЛицо numberГражданство varchar(2) со значениями ru\ka\gu\ss\kk
Хотите, добавляйте. Хотите - нет. Если tabular работает.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394941
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльОднако для меня не очевиден Ваш постулат о том, что моя модель помешает накоплению истории.
Добавьте к 2-м полям составного ключа третье - типа "Дата окончания актуальности"... Есть и другие паттерны вариантности во времени, которые также не требуют суррогатного ключа с одним полем.
"Дата окончания актуальности" нельзя будет добавить в часть ключа, т.к. поле будет null-able, к тому же перестанут работать все DML (Например, delete будет удалять 2 записи, вместо одной, а select выбирать 2, вместо одной).

Код: plsql
1.
Если его моделировать каждый раз "на всякий случай", OLTP-стсиемы требовали бы в 10 раз больше дискового пространства.


Это как раз тот пример, когда места будет занимать скорее меньше, чем больше.
Достаточно оценить вероятность появления подчиненной таблицы (в кот., например, будет в 10 раз больше записей) и насколько меньше она будет занимать места с простым ключом.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394996
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDev"Дата окончания актуальности" нельзя будет добавить в часть ключа, т.к. поле будет null-able, к тому же перестанут работать все DML (Например, delete будет удалять 2 записи, вместо одной, а select выбирать 2, вместо одной).

Я взрослый мальчик. И в проектировании БД не первый год. У меня в рукаве всегда есть паттерны, однозначно приводящие к успешному результату. Тот способ, что привёл в пример я, придуман не мной, но он как раз один из тех.
Достаточно полю EXPIRE_DATE, являющемуся частью композитного ПК, присваивать при создании новой записи значение "31/12/9999".
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394999
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если впиливать в ТЗ и Модель требование: Дата актуальности или Признак актуальности записи, то это вообще оффтоп.
Т.к. там будет полное перепроектирование вплоть до OLAP\OLTP.
Удачи ТС!
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39395014
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

Вот и даты 31/12/9999 пошли...
Кроме кучи мороки и пакостей от составных ключей, ничего полезного я от них не видел. Кроме тех аргументов, которые опровергаются.

Из недостатков (при наличии составных внешних ключей и не только):

- потребляют лишнее место
- больше кода, который требует большего сопровождения
- плохие планы запросов
- хуже производительность
- проблемы с модификацией строки
- большие проблемы при изменении условий уникальности (что явление не редкое при доработке системы)
- могут быть проблемы с отслеживанием истории изменения строки в аудите.
- куча проблем при разработке интерфейса в приложениях, которые будут работать с такой БД (нужно выбирать несколько идентификаторов, вместо одного) под что многие компоненты не заточены.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39395166
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодаря этой теме еще раз убедился в необходимости сурогатных ключей.

КурдльМне важно, чтобы логическая модель была максимально корректной и соответствующей предметной области. Минимальное "ручное вмешательство" в физическую модель избавляет меня от ошибок проектирования.
Если CASE настроен правильно, при формировании логической модели, в физическую никаких правок не надо.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39395349
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelБлагодаря этой теме еще раз убедился в необходимости сурогатных ключей.
Если CASE настроен правильно, при формировании логической модели, в физическую никаких правок не надо.

Такого быть не может, как ничего идеального. :)
Иначе Вы потратите больше времени на настройку, чем на результат.
Приведу пример на модели со сделкой, в которой несколько участников.
Case-инструмент, скорее всего, сгенерирует FK для сделки типа
SUBJ_ID_1
SUBJ_ID_2
SUBJ_ID_3
SUBJ_ID_4
А вам по naming style положено называть
SUBJ_ID_CRED
SUBJ_ID_BORR
SUBJ_ID_GTEE
SUBJ_ID_GTOR
Так что придется вмешаться ручками. Можно, конечно, обзывать осмысленными именами referenses, и настроить CASE на использование части их имен в имени поля. Но найдутся и другие грабли несоответствия лог. модели и физ. модели.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39395443
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КурдльblkangelБлагодаря этой теме еще раз убедился в необходимости сурогатных ключей.
Если CASE настроен правильно, при формировании логической модели, в физическую никаких правок не надо.

Такого быть не может, как ничего идеального. :)
Иначе Вы потратите больше времени на настройку, чем на результат.
Приведу пример на модели со сделкой, в которой несколько участников.
Case-инструмент, скорее всего, сгенерирует FK для сделки типа
SUBJ_ID_1
SUBJ_ID_2
SUBJ_ID_3
SUBJ_ID_4
А вам по naming style положено называть
SUBJ_ID_CRED
SUBJ_ID_BORR
SUBJ_ID_GTEE
SUBJ_ID_GTOR
Так что придется вмешаться ручками. Можно, конечно, обзывать осмысленными именами referenses, и настроить CASE на использование части их имен в имени поля. Но найдутся и другие грабли несоответствия лог. модели и физ. модели.

Вы же физическое название полей прописываете, почему не прописать название FK ключа, это не настройка. Привели редчайший случай.

А откуда у вас сурогатный ключ, какой то subj_id? ))
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39395467
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,

Пример тиснул с какого-то обучающего слайда, поэтому там не видны атрибуты сущностей типа идентификаторов с кодом subj_id, deal_id ...

ОДнако в большинстве CASE-инструментов проектирования БД в логической модели FK и их поля не указываются.
Подразумевается, что они есть, раз есть relationship.
А вот при генерации физ.модели из логической, инструмент генерит и наименования полей для FK. И тут уж - как его настроишь :)
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39395482
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,
это говорит о том, мальчик, что ты в Erwin и им подобных никогда не работал
...
Рейтинг: 0 / 0
12 сообщений из 62, страница 3 из 3
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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