powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
25 сообщений из 62, страница 1 из 3
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39390934
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею Tabular Form с функциями добавления, модификации и удаления строк.
Каждая новая запись получает значение PK в момент создания на клиенте, а не триггером или последовательностью на сервере.
Как при обработке строк в процедуре MRU отличить новые от существующих?
ROWID закачать в поле TF не получается.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39390996
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльROWID закачать в поле TF не получается.
Это почему?
У меня в 4-ке с геморроем, но выходило добавлять любые столбцы. Просто они не редактируемые.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39391004
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

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

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

Это вы сами такое сделали, или просто выдумываете?
Это решение продиктовано моделью.
А модель - продукт анализа требований и проектирования.
А что Вас смущает? Приведу пару примеров:
1. Таблица имеет натуральный ключ, вводимый на клиенте.
2. Таблица имеет композитный ключ из 2-х (или более) FK (ассоциация или depended-relationship), значение которых синтезируется на клиенте.

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


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

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

По теме: В апексе тяжело будет работать с составными ключами.

Начиная с какой-то версии (скорее всего 4.1 или раньше) есть выбор при создании Tabular Form: на основе ROWID или PK.
Для остальных случаев (например, выпадающих списков), можно создать обновляемое представление, и представить в виде PK что угодно. При этом заполнять PK можно в instead of триггере, а не на клиенте, на основе, например, скрытых полей, для которых проставлен default или hidden items. Впрочем instead of - это достаточно тяжелый метод, сильно усложняет разработку, проще переделать на простые ключи, если еще не поздно.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39392933
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevКурдль,

По теме: В апексе тяжело будет работать с составными ключами.


Я знаю! Мне уже тяжело, но пока справляюсь. :)
(Слава АПЕКСу, что дает заводить хотя бы двойной композитный ПК!)
Приведу пример очень простой.
Связь персоны и государства типа "гражданство".
При этом бизнес-процессу не интересно, когда получено и т.п. Только чистый факт "кто гражданин какой страны".
Таким образом имеем чистую ассоциацию из много-ко-многим, физически реализуемую в таблице CITIZENSHIP.
Экземпляр записи в этой таблице вообще никому не интересен сам по себе. Т.е. её собственный идентификатор по логике не нужен.
Интересен только ID_персоны и ID_государства. Причем никаким генератором, триггером или последовательностью им значения присвоить нельзя.
Кроме того, пара "ID_персоны и ID_государства" должна быть уникальной, т.к. невозможно быть "дважды гражданином одной и той же страны" :)
Улавливаете мысль?
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39392947
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльСвязь персоны и государства типа "гражданство".
При этом бизнес-процессу не интересно, когда получено и т.п. Только чистый факт "кто гражданин какой страны".
один ко многим на справочник Государства. Или FK в справочнике Персоны.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39392969
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123один ко многим на справочник Государства. Или FK в справочнике Персоны.
С какого перепугу? И вообще, я не понял, как ты предлагаешь физически реализовать модель, если логически это однозначно "много-ко-многим"?
P.S. Мы, - специалисты по проектированию БД, никогда не употребляем слово "справочник", если только не имеем дело конкретно с НСИ, например. ;)
В лог.модели есть сущности.
В физ. модели есть таблицы.
В OLAP есть факты и измерения.
Справочников нет нигде :)
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393006
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльС какого перепугу? И вообще, я не понял, как ты предлагаешь физически реализовать модель, если логически это однозначно "много-ко-многим"?
Ну тогда давай в теорию)).
Начинают проектировать с понятия Сущность. Потом логическая модель.
Ты назвал 2 сущности:
КурдльТолько чистый факт "кто гражданин какой страны".
получили отношение.
Разве не удовлетворяет?
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393008
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльСправочников нет нигде :)
у БА есть.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393069
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123КурдльС какого перепугу? И вообще, я не понял, как ты предлагаешь физически реализовать модель, если логически это однозначно "много-ко-многим"?
Ну тогда давай в теорию)).
Начинают проектировать с понятия Сущность. Потом логическая модель.
Ты назвал 2 сущности:
КурдльТолько чистый факт "кто гражданин какой страны".
получили отношение.
Разве не удовлетворяет?

Вообще-то я получил сначала одно отношение:

ПЕРСОНА >--------< СТРАНА

а после детального проектирования - 2 отношения:

ПЕРСОНА ----< ГРАЖДАНСТВО >---- СТРАНА

где "гражданство" - не полноценная сущность, а ассоциация

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

ПЕРСОНА ----< ГРАЖДАНСТВО >---- СТРАНА

где "гражданство" - не полноценная сущность, а ассоциация
вот это ошибка пректирования, но дело твоё.
1. Выделяют сущности только ценные для бизнеса (не для программиста).
2. Слово детальное - не обоснование выделения 3-ей сущности.
Т.е. выводит бизнес гражданство на экран - выбрось остальное.
КурдльP.S. Если ты имеешь в виду бизнес-аналитиков, то бить им по рукам (губам), чтобы запомнили: справочник - это вид представления данных :)
Именно. Они пишут свои каркули в ворде и словами заказчика (VIEW).
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393094
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,
Модель - это упрощённое состояние мира.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393101
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

т.е. таблица CITIZENSHIP с полями ID_персоны и ID_государства - первичный ключ ?

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

Касательно уникальности, не очевидно. Гражданство может меняться, например, от гражданства можно отказаться или лишиться.
Другой пример - могут быть люди без гражданства (и это не то же самое, что данные не введены), но, например, с видом на жительство, поэтому отношения между странами и людьми могут быть не такими простыми.

Люди тоже постоянно меняют фамилию. Не редко бывают запросы от людей: когда первый раз у них одна фамилия, во втором запросе другая (и другой паспорт), соответственно их часто заводят как разных людей (и даже если паспорт одинаковый, такое часто бывает), а потом нужно объединить => меняется идентификатор человека.

Бизнес процесс не такая уж надежная штука, может поменяться, или может быть расширена область действия, или понадобится новый отчет, для которого не хватает данных.
Поле ID здесь пригодится, даже если внешних ключей нет.

Касательно апекса, если делать по вашему, можно сделать вью: PK - составное поле через разделитель, и отдельно поля, сделать вью обновляемой. Соответственно в Tabular Form первичный ключ - составное поле из view, для новых строк будет null, указать, что генерируется на основании триггера. view пересчитывает значение уже после внесения записи, соответственно, MRU смотрит, если поле первичного ключа null - запись новая, если не null - существующая.
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393134
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Т.е. выводит бизнес гражданство на экран - выбрось остальное.

Т.е. оставить сущность ГРАЖДАНСТВО?
И что за атрибуты должны быть?
- ФИО Персоны
- Наименование страны?
:)
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393149
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,
По твоему ТЗ так:

Спр-к Персоны
ID ФИО Гражданство(FK)2 Петров РФ3 Сидров5 Иванов "то что в паспорте"
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393187
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Курдль,
По твоему ТЗ так:

Спр-к Персоны
ID ФИО Гражданство(FK)2 Петров РФ3 Сидров5 Иванов "то что в паспорте"

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

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

Я не понял, в таблице ГРАЖДАНСТВО надо создать новую запись, в ней в поле "страна" занести текстовое название страны, а потом эту запись по FK связать с персоной?
...
Рейтинг: 0 / 0
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
    #39393216
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDev,
у меня в примере суррогатный от генератора в триггере.
"РФ" это уже на клиенте.
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 1 из 3
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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