Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Имею Tabular Form с функциями добавления, модификации и удаления строк. Каждая новая запись получает значение PK в момент создания на клиенте, а не триггером или последовательностью на сервере. Как при обработке строк в процедуре MRU отличить новые от существующих? ROWID закачать в поле TF не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 12:04 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльROWID закачать в поле TF не получается. Это почему? У меня в 4-ке с геморроем, но выходило добавлять любые столбцы. Просто они не редактируемые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 12:43 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123, Даёт только виртуальные добавить. А я ступил :) Просто достаточно в запрос добавить любое поле, хоть "1" хоть rownum и не инициализировать его в новой строке - вот и отличие! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2017, 12:48 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльКаждая новая запись получает значение PK в момент создания на клиенте Это вы сами такое сделали, или просто выдумываете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 08:41 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
blkangelКурдльКаждая новая запись получает значение PK в момент создания на клиенте Это вы сами такое сделали, или просто выдумываете? Это решение продиктовано моделью. А модель - продукт анализа требований и проектирования. А что Вас смущает? Приведу пару примеров: 1. Таблица имеет натуральный ключ, вводимый на клиенте. 2. Таблица имеет композитный ключ из 2-х (или более) FK (ассоциация или depended-relationship), значение которых синтезируется на клиенте. Есть приверженцы стиля "каждая таблица должна иметь суррогатный ключ". Я - не из них. Во всяком случае для OLTP-систем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 09:12 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльЭто решение продиктовано моделью. ... Во всяком случае для OLTP-систем. Сомневаюсь. Кроме большого количества проблем разного рода, включая проблемы с оптимизатором (в том числе проблем со стоимостью, join elemination и др.), я уже не говорю про вагон и маленькую тележку очевидных проблем не связанных с апексом, не встречал ни одного полезного свойства (при том, что работать с ними приходилось много). Это всё скорее ошибки проектирования, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 11:17 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Уже ничего, у вас даже обозначение ключей свое. Вместо "Естественный" - "Натуральный", "Составной"-композитный Да я приверженец Сурогатных ключей. авторКак при обработке строк в процедуре MRU отличить новые от существующих? А никак, вы же не любитель сурогатных ключей, ну вот теперь и сношайтесь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 11:18 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
blkangelА никак, вы же не любитель сурогатных ключей, ну вот теперь и сношайтесь :) Ну я относительно легко "высношался" из этой ситуации :) Но дело не в любви/нелюбви. Я волей случая привязан к определенному CASE-инструменту проектирования БД. Причем я строго следую порядку "от логической модели - к физической" и поддерживаю постоянное соответствие между этими моделями. И этот инструмент генерирует именно композитный (составной) ПК без суррогатного, если в логической модели встречается ассоциативная связь. Лезть в физическую модель и менять её "руками" иногда приходится, но я стараюсь минимизировать такое вмешательство. Если не поленюсь разобраться и настроить его по-другому - буду далее любить суррогатные :) Я даже предпринимаю попытки, но руки не доходят: SQL.ru Проектирование БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 11:39 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль, По теме: В апексе тяжело будет работать с составными ключами. Начиная с какой-то версии (скорее всего 4.1 или раньше) есть выбор при создании Tabular Form: на основе ROWID или PK. Для остальных случаев (например, выпадающих списков), можно создать обновляемое представление, и представить в виде PK что угодно. При этом заполнять PK можно в instead of триггере, а не на клиенте, на основе, например, скрытых полей, для которых проставлен default или hidden items. Впрочем instead of - это достаточно тяжелый метод, сильно усложняет разработку, проще переделать на простые ключи, если еще не поздно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 12:04 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
SvDevКурдль, По теме: В апексе тяжело будет работать с составными ключами. Я знаю! Мне уже тяжело, но пока справляюсь. :) (Слава АПЕКСу, что дает заводить хотя бы двойной композитный ПК!) Приведу пример очень простой. Связь персоны и государства типа "гражданство". При этом бизнес-процессу не интересно, когда получено и т.п. Только чистый факт "кто гражданин какой страны". Таким образом имеем чистую ассоциацию из много-ко-многим, физически реализуемую в таблице CITIZENSHIP. Экземпляр записи в этой таблице вообще никому не интересен сам по себе. Т.е. её собственный идентификатор по логике не нужен. Интересен только ID_персоны и ID_государства. Причем никаким генератором, триггером или последовательностью им значения присвоить нельзя. Кроме того, пара "ID_персоны и ID_государства" должна быть уникальной, т.к. невозможно быть "дважды гражданином одной и той же страны" :) Улавливаете мысль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 12:53 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльСвязь персоны и государства типа "гражданство". При этом бизнес-процессу не интересно, когда получено и т.п. Только чистый факт "кто гражданин какой страны". один ко многим на справочник Государства. Или FK в справочнике Персоны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 13:06 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123один ко многим на справочник Государства. Или FK в справочнике Персоны. С какого перепугу? И вообще, я не понял, как ты предлагаешь физически реализовать модель, если логически это однозначно "много-ко-многим"? P.S. Мы, - специалисты по проектированию БД, никогда не употребляем слово "справочник", если только не имеем дело конкретно с НСИ, например. ;) В лог.модели есть сущности. В физ. модели есть таблицы. В OLAP есть факты и измерения. Справочников нет нигде :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 13:19 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльС какого перепугу? И вообще, я не понял, как ты предлагаешь физически реализовать модель, если логически это однозначно "много-ко-многим"? Ну тогда давай в теорию)). Начинают проектировать с понятия Сущность. Потом логическая модель. Ты назвал 2 сущности: КурдльТолько чистый факт "кто гражданин какой страны". получили отношение. Разве не удовлетворяет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 13:37 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльСправочников нет нигде :) у БА есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 13:37 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123КурдльС какого перепугу? И вообще, я не понял, как ты предлагаешь физически реализовать модель, если логически это однозначно "много-ко-многим"? Ну тогда давай в теорию)). Начинают проектировать с понятия Сущность. Потом логическая модель. Ты назвал 2 сущности: КурдльТолько чистый факт "кто гражданин какой страны". получили отношение. Разве не удовлетворяет? Вообще-то я получил сначала одно отношение: ПЕРСОНА >--------< СТРАНА а после детального проектирования - 2 отношения: ПЕРСОНА ----< ГРАЖДАНСТВО >---- СТРАНА где "гражданство" - не полноценная сущность, а ассоциация P.S. Если ты имеешь в виду бизнес-аналитиков, то бить им по рукам (губам), чтобы запомнили: справочник - это вид представления данных :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 14:28 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдльа после детального проектирования - 2 отношения: ПЕРСОНА ----< ГРАЖДАНСТВО >---- СТРАНА где "гражданство" - не полноценная сущность, а ассоциация вот это ошибка пректирования, но дело твоё. 1. Выделяют сущности только ценные для бизнеса (не для программиста). 2. Слово детальное - не обоснование выделения 3-ей сущности. Т.е. выводит бизнес гражданство на экран - выбрось остальное. КурдльP.S. Если ты имеешь в виду бизнес-аналитиков, то бить им по рукам (губам), чтобы запомнили: справочник - это вид представления данных :) Именно. Они пишут свои каркули в ворде и словами заказчика (VIEW). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 14:42 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль, Модель - это упрощённое состояние мира. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 14:43 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль, т.е. таблица CITIZENSHIP с полями ID_персоны и ID_государства - первичный ключ ? Какая польза здесь от составного ключа, не представляю. Когда появятся внешние ключи - будут жрать кучу места и соответственно запросы будут выполняться медленно. Элементарно ошибки исправлять замучаетесь, когда пользователи неправильно вводят. Касательно уникальности, не очевидно. Гражданство может меняться, например, от гражданства можно отказаться или лишиться. Другой пример - могут быть люди без гражданства (и это не то же самое, что данные не введены), но, например, с видом на жительство, поэтому отношения между странами и людьми могут быть не такими простыми. Люди тоже постоянно меняют фамилию. Не редко бывают запросы от людей: когда первый раз у них одна фамилия, во втором запросе другая (и другой паспорт), соответственно их часто заводят как разных людей (и даже если паспорт одинаковый, такое часто бывает), а потом нужно объединить => меняется идентификатор человека. Бизнес процесс не такая уж надежная штука, может поменяться, или может быть расширена область действия, или понадобится новый отчет, для которого не хватает данных. Поле ID здесь пригодится, даже если внешних ключей нет. Касательно апекса, если делать по вашему, можно сделать вью: PK - составное поле через разделитель, и отдельно поля, сделать вью обновляемой. Соответственно в Tabular Form первичный ключ - составное поле из view, для новых строк будет null, указать, что генерируется на основании триггера. view пересчитывает значение уже после внесения записи, соответственно, MRU смотрит, если поле первичного ключа null - запись новая, если не null - существующая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 14:47 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123Т.е. выводит бизнес гражданство на экран - выбрось остальное. Т.е. оставить сущность ГРАЖДАНСТВО? И что за атрибуты должны быть? - ФИО Персоны - Наименование страны? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 15:10 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль, По твоему ТЗ так: Спр-к Персоны ID ФИО Гражданство(FK)2 Петров РФ3 Сидров5 Иванов "то что в паспорте" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 15:23 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123Курдль, По твоему ТЗ так: Спр-к Персоны ID ФИО Гражданство(FK)2 Петров РФ3 Сидров5 Иванов "то что в паспорте" А как с персонами, имеющими > 1 гражданства? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 15:45 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльА как с персонами, имеющими > 1 гражданства? один ко многим. - в обоих таблах PK триггером - в VIEW через запятую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 15:53 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123ID ФИО Гражданство(FK)2 Петров РФ3 Сидров5 Иванов "то что в паспорте" Даже в таком варианте, если заменить в FK естественный ключ на суррогатный, для программиста будет +. Сожмёт таблицу, улучшит производительность. Рано или поздно понадобится изменить значение => облегчит модификацию в справочнике гражданств. Если нужно что-то кроме РФ, то логично появление нескольких записей для одного человека. Насколько детально нужно проектировать может знать только ТС. В более серьезных ситуациях вносится не само гражданство, а документы, удостоверяющие наличие гражданства (паспорт и др.), а само гражданство уже можно взять оттуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 16:10 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123КурдльА как с персонами, имеющими > 1 гражданства? один ко многим. - в обоих таблах PK триггером - в VIEW через запятую Я не понял, в таблице ГРАЖДАНСТВО надо создать новую запись, в ней в поле "страна" занести текстовое название страны, а потом эту запись по FK связать с персоной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 16:13 |
|
||
|
|

start [/forum/topic.php?fid=50&msg=39392680&tid=1874441]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 274ms |
| total: | 578ms |

| 0 / 0 |
