powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
25 сообщений из 62, страница 2 из 3
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393240
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльЯ не понял, в таблице ГРАЖДАНСТВО надо создать новую запись, в ней в поле "страна" занести текстовое название страны, а потом эту запись по FK связать с персоной?
ВАР1
==============
При варианте один ко многим (у лица несколько гражданств) заводим справочник Страны.
Персона 1---> М Гражданство M<----1 Страны
чтобы не вводить руками.

ВАР2
==============
в апекс ввести перечень констант-массив и обойтись без 1 Страны
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393290
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevДаже в таком варианте, если заменить в FK естественный ключ на суррогатный, для программиста будет +.
Сожмёт таблицу, улучшит производительность. Рано или поздно понадобится изменить значение => облегчит модификацию в справочнике гражданств.

Я не понимаю, как это сожмет таблицу и улучшит производительность.
Мне так и так придется делать уникальный индекс на ID_персоны и ID_страны в ассоциативной таблице.
А с Вашим предложением - еще добавляется ПК и его индекс.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393331
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,
при желании можно забить в LOV перечень стран и поставлять в tabular form хоть "ru" хоть число "203"
https://www.artlebedev.ru/tools/country-list/
Вопрос с сабжем Id на клиенте - нежелателен.
(без веских причин)
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393337
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

В том варианте справочник гражданств маленький, и занимает очень мало места.
Справочник людей относительно большой, много людей имеют одно гражданство.

Код: plsql
1.
Select dump('СССР'), dump(100) from dual



Typ=96 Len=8: 208,161,208,161,208,161,208,160Typ=2 Len=2: 194,2
Соответственно, данные в значительно большей таблице занимают больше места => нужно смотреть по большой таблице.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394193
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDev,

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

Байты считать в СУБД- не моветон. Чем больше Гб будет лопатить sql, тем хуже будет производительность.
Пара лишних ГБ умножить на несколько тыщ запросов от каждого пользователя...

Если интересует только логические ошибки, то артефакты обновления уже вполне себе логическая ошибка. Недооценена вероятность потерять уникальность - другая логическая ошибка.

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

Я извиняюсь, но Вы похоже не заметили, как наступил XXI век :)
Сейчас считать байты на запись - моветон.
Гораздо страшнее допустить логическую ошибку в модели, чем "потратить" парочку лишних гигабайт.


Увы, 21 век, а программист делающий БД на натуральных и составных ключах, не думает о том, что это как раз логическая ошибка...
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394410
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelУвы, 21 век, а программист делающий БД на натуральных и составных ключах, не думает о том, что это как раз логическая ошибка...
Речь идет не о программистах, а об архитекторах БД.
Программисты, в отличие от архитекторов, имеют право не понимать, что такое "логическое моделирование".
Логическая ошибка - это ошибка в определении логических взаимосвязей между сущностями предметной области.
Например - счесть "гражданство" свойством "персоны" (её совершают в основном те, кто сначала учился ООП, а потом - моделированию данных).
Натуральные ключи - манна небесная для корпоративных информационных систем, включающих в себя множество интегрированных АС, а т.ж. DWH.
Составные ключи - наиболее надежное с точки зрения целостности данных физическое воплощение отношения типа "depended".
Тешу себя надеждой, что просто не смог донести до Вас свою мысль.
Продемонстрирую приложенной моделью. Как Вы иначе сможете смоделировать такое отношение сущностей предметной области?
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394458
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,
- вы не говорили, что в БЛ требуется "Наименование государства". Если требуется, то табла3 нужна. Если нет, то табла3 не нужна.
- в табле Гражданство не обозначены поля
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394462
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
п.п. 1 писал выше - на Ваше усмотрение. Можно расшифровывать в БД третьей таблицей справочником. Можно на АппСервере или среднем слое (APEX).
IMHO
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394473
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Курдль,
- вы не говорили, что в БЛ требуется "Наименование государства". Если требуется, то табла3 нужна. Если нет, то табла3 не нужна.
- в табле Гражданство не обозначены поля

1. Предположим, что по БЛ табла3 не нужна. Тогда какой должна быть модель? Как приложена ниже? Это денормализация, влекущая за собой возрастание объема БД (раз уж мы о нем заговорили).
2. На логической модели не таблы, а сущности. Я говорил, что экземпляр сущности "гражданство" не несет в себе никакой информации, кроме связи физлица с государством. А это отображается нотацией references типа depended. Никакие поля (для лог. модели - атрибуты) здесь не нужны.
На физической модели в таблице "гражданство" появились бы 2 поля: ID_физлица и ID_государства в виде составного PK
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394612
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль1. Предположим, что по БЛ табла3 не нужна.я писал про ненужность атрибута Наименование государства. А ты его опять прилепил.
Будет так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
ФизЛицо
ID
ФИО

Гражданство
ID_ФизЛицо number
Гражданство varchar(2)


один ко многим
- во вторую таблу можно добавить генератор ID (по вкусу)
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394617
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльНа физической модели в таблице
пускай появляются. Мне лень разбивать на логику и физику. Мы не в той теме.
Если там были пустые поля из за моделирования, то ОК.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394663
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Курдль1. Предположим, что по БЛ табла3 не нужна.я писал про ненужность атрибута Наименование государства. А ты его опять прилепил.
Будет так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
ФизЛицо
ID
ФИО

Гражданство
ID_ФизЛицо number
Гражданство varchar(2)


один ко многим
- во вторую таблу можно добавить генератор ID (по вкусу)

Да пофиг, как поле называется
"Наименование государства VARCHAR(2)"
или
"Гражданство VARCHAR(2)"
Ты ж всё равно в него будешь писать "Российская Федерация или Княжество Андорра" :)
Т.е. для всех граждан РФ (~140 000 000 чел.) у тебя в таблице "Гражданство" будет своя запись "ID_ФизЛицо; "Российская Федерация".
Так?
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394682
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльТ.е. для всех граждан РФ
мы модель кастим (натягиваем) на РФ?
- тогда как угодно. Хотите, делайте поле исключений
Гражданство
ID_ФизЛицо number
Гражданство varchar(2)
НетГражданстваРФ varchar(Y\No)
))))
но больше проблем с запросами будет чем с размером таблицы в оракле.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394683
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльТы ж всё равно в него будешь писать "Российская Федерация или Княжество Андорра" :)
нет
у меня в примере двухсимволний КОД государства из ссылки выше
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394699
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльЛогическая ошибка - это ошибка в определении логических взаимосвязей между сущностями предметной области.
Продемонстрирую приложенной моделью. Как Вы иначе сможете смоделировать такое отношение сущностей предметной области?
Не вижу никаких проблем в наличии простого первичного ключа ID или citizenship_id в этой модели. Уверен, в вашем софте есть такая возможность - указать пару свойств.

КурдльНатуральные ключи - манна небесная для корпоративных информационных систем, включающих в себя множество интегрированных АС, а т.ж. DWH.

Так ли это на самом деле? Типичная ситуация: меняется значение естественного ключа - ломается функционал в интегрированной системе, завязанный на ключ, для которой поддержка уже закончилась, что в этом хорошего ?

КурдльСоставные ключи - наиболее надежное с точки зрения целостности данных физическое воплощение отношения типа "depended".

Всеми необходимыми свойствами надежности целостности данных обладают простые ключи.
Поэтому, что такое более надёжный и наиболее надежный в этом контексте не понятно.
Я бы сказал, составные ключи менее надежны. Например, первичный ключ не должен меняться, при составном ключе - это правило рано или поздно нарушается.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394715
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevЯ бы сказал, составные ключи менее надежны.
+1
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394750
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevЯ бы сказал, составные ключи менее надежны. Например, первичный ключ не должен меняться, при составном ключе - это правило рано или поздно нарушается.

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

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

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

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

Пользователи заведены по натуральному ключу LOGIN, он уникален. Очень любопытный сотрудник, решил насолить начальнику. Заходит в редактирование своей карточки, меняет логин на логин начальника, ставит свой пароль и вуаля. (А как по другому по натуральному ключу понять, что это не босс?). Система апдейтит пароль босса и любопытный сотрудник сидит под логином босса.

Странный какой-то пример...
тогда у меня есть такой пример: заходит пользователь с правами DBA и делает DROP DATABASE ...


А про constraint - тоже странно. Зачем мне плодить индексы (на uniq constraint oracle автоматически добавит индекс), если у меня и так есть уникальный первичный ключ, хоть и составной.
И что значит "может измениться"? Ну да - в данном примере физ.лиц может лишиться гражданства или вступить в другое. И что за проблема? Удаляется одна запись и создаётся другая.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39394818
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльА про constraint - тоже странно. Зачем мне плодить индексы (на uniq constraint oracle автоматически добавит индекс), если у меня и так есть уникальный первичный ключ, хоть и составной.
1. индекс на уникальноть - не одно и то же с PK
2. практически всем внешним средствам разработки удобнее иметь дело с добавочным PK генератором.
Хотя для префекциониста он лишний). Я сам таким был при моделировании.
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 2 из 3
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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