Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльЯ не понял, в таблице ГРАЖДАНСТВО надо создать новую запись, в ней в поле "страна" занести текстовое название страны, а потом эту запись по FK связать с персоной? ВАР1 ============== При варианте один ко многим (у лица несколько гражданств) заводим справочник Страны. Персона 1---> М Гражданство M<----1 Страны чтобы не вводить руками. ВАР2 ============== в апекс ввести перечень констант-массив и обойтись без 1 Страны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 16:26 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
SvDevДаже в таком варианте, если заменить в FK естественный ключ на суррогатный, для программиста будет +. Сожмёт таблицу, улучшит производительность. Рано или поздно понадобится изменить значение => облегчит модификацию в справочнике гражданств. Я не понимаю, как это сожмет таблицу и улучшит производительность. Мне так и так придется делать уникальный индекс на ID_персоны и ID_страны в ассоциативной таблице. А с Вашим предложением - еще добавляется ПК и его индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 16:53 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль, при желании можно забить в LOV перечень стран и поставлять в tabular form хоть "ru" хоть число "203" https://www.artlebedev.ru/tools/country-list/ Вопрос с сабжем Id на клиенте - нежелателен. (без веских причин) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 17:25 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль, В том варианте справочник гражданств маленький, и занимает очень мало места. Справочник людей относительно большой, много людей имеют одно гражданство. Код: plsql 1. Typ=96 Len=8: 208,161,208,161,208,161,208,160Typ=2 Len=2: 194,2 Соответственно, данные в значительно большей таблице занимают больше места => нужно смотреть по большой таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2017, 17:30 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
SvDev, Я извиняюсь, но Вы похоже не заметили, как наступил XXI век :) Сейчас считать байты на запись - моветон. Гораздо страшнее допустить логическую ошибку в модели, чем "потратить" парочку лишних гигабайт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 20:39 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль, Байты считать в СУБД- не моветон. Чем больше Гб будет лопатить sql, тем хуже будет производительность. Пара лишних ГБ умножить на несколько тыщ запросов от каждого пользователя... Если интересует только логические ошибки, то артефакты обновления уже вполне себе логическая ошибка. Недооценена вероятность потерять уникальность - другая логическая ошибка. Простые естественные ключи может и не такое большое зло, как составные, но, кроме действительно редких случаев использовать не стоит, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2017, 21:58 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльSvDev, Я извиняюсь, но Вы похоже не заметили, как наступил XXI век :) Сейчас считать байты на запись - моветон. Гораздо страшнее допустить логическую ошибку в модели, чем "потратить" парочку лишних гигабайт. Увы, 21 век, а программист делающий БД на натуральных и составных ключах, не думает о том, что это как раз логическая ошибка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 09:08 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
blkangelУвы, 21 век, а программист делающий БД на натуральных и составных ключах, не думает о том, что это как раз логическая ошибка... Речь идет не о программистах, а об архитекторах БД. Программисты, в отличие от архитекторов, имеют право не понимать, что такое "логическое моделирование". Логическая ошибка - это ошибка в определении логических взаимосвязей между сущностями предметной области. Например - счесть "гражданство" свойством "персоны" (её совершают в основном те, кто сначала учился ООП, а потом - моделированию данных). Натуральные ключи - манна небесная для корпоративных информационных систем, включающих в себя множество интегрированных АС, а т.ж. DWH. Составные ключи - наиболее надежное с точки зрения целостности данных физическое воплощение отношения типа "depended". Тешу себя надеждой, что просто не смог донести до Вас свою мысль. Продемонстрирую приложенной моделью. Как Вы иначе сможете смоделировать такое отношение сущностей предметной области? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 10:33 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль, - вы не говорили, что в БЛ требуется "Наименование государства". Если требуется, то табла3 нужна. Если нет, то табла3 не нужна. - в табле Гражданство не обозначены поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 11:20 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
п.п. 1 писал выше - на Ваше усмотрение. Можно расшифровывать в БД третьей таблицей справочником. Можно на АппСервере или среднем слое (APEX). IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 11:23 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123Курдль, - вы не говорили, что в БЛ требуется "Наименование государства". Если требуется, то табла3 нужна. Если нет, то табла3 не нужна. - в табле Гражданство не обозначены поля 1. Предположим, что по БЛ табла3 не нужна. Тогда какой должна быть модель? Как приложена ниже? Это денормализация, влекущая за собой возрастание объема БД (раз уж мы о нем заговорили). 2. На логической модели не таблы, а сущности. Я говорил, что экземпляр сущности "гражданство" не несет в себе никакой информации, кроме связи физлица с государством. А это отображается нотацией references типа depended. Никакие поля (для лог. модели - атрибуты) здесь не нужны. На физической модели в таблице "гражданство" появились бы 2 поля: ID_физлица и ID_государства в виде составного PK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 11:36 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Курдль1. Предположим, что по БЛ табла3 не нужна.я писал про ненужность атрибута Наименование государства. А ты его опять прилепил. Будет так: Код: sql 1. 2. 3. 4. 5. 6. 7. один ко многим - во вторую таблу можно добавить генератор ID (по вкусу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 13:44 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльНа физической модели в таблице пускай появляются. Мне лень разбивать на логику и физику. Мы не в той теме. Если там были пустые поля из за моделирования, то ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 13:46 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Petro123Курдль1. Предположим, что по БЛ табла3 не нужна.я писал про ненужность атрибута Наименование государства. А ты его опять прилепил. Будет так: Код: sql 1. 2. 3. 4. 5. 6. 7. один ко многим - во вторую таблу можно добавить генератор ID (по вкусу) Да пофиг, как поле называется "Наименование государства VARCHAR(2)" или "Гражданство VARCHAR(2)" Ты ж всё равно в него будешь писать "Российская Федерация или Княжество Андорра" :) Т.е. для всех граждан РФ (~140 000 000 чел.) у тебя в таблице "Гражданство" будет своя запись "ID_ФизЛицо; "Российская Федерация". Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 14:14 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльТ.е. для всех граждан РФ мы модель кастим (натягиваем) на РФ? - тогда как угодно. Хотите, делайте поле исключений Гражданство ID_ФизЛицо number Гражданство varchar(2) НетГражданстваРФ varchar(Y\No) )))) но больше проблем с запросами будет чем с размером таблицы в оракле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 14:26 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльТы ж всё равно в него будешь писать "Российская Федерация или Княжество Андорра" :) нет у меня в примере двухсимволний КОД государства из ссылки выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 14:27 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльЛогическая ошибка - это ошибка в определении логических взаимосвязей между сущностями предметной области. Продемонстрирую приложенной моделью. Как Вы иначе сможете смоделировать такое отношение сущностей предметной области? Не вижу никаких проблем в наличии простого первичного ключа ID или citizenship_id в этой модели. Уверен, в вашем софте есть такая возможность - указать пару свойств. КурдльНатуральные ключи - манна небесная для корпоративных информационных систем, включающих в себя множество интегрированных АС, а т.ж. DWH. Так ли это на самом деле? Типичная ситуация: меняется значение естественного ключа - ломается функционал в интегрированной системе, завязанный на ключ, для которой поддержка уже закончилась, что в этом хорошего ? КурдльСоставные ключи - наиболее надежное с точки зрения целостности данных физическое воплощение отношения типа "depended". Всеми необходимыми свойствами надежности целостности данных обладают простые ключи. Поэтому, что такое более надёжный и наиболее надежный в этом контексте не понятно. Я бы сказал, составные ключи менее надежны. Например, первичный ключ не должен меняться, при составном ключе - это правило рано или поздно нарушается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 14:36 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
SvDevЯ бы сказал, составные ключи менее надежны. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 14:49 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
SvDevЯ бы сказал, составные ключи менее надежны. Например, первичный ключ не должен меняться, при составном ключе - это правило рано или поздно нарушается. Я так и не смог довести до благородного сообщества, что в приведенном мною примере 20160306 составной первичный ключ выполняет роль и уникального индекса (ибо нельзя быть "дважды гражданином" одной и той же страны). В этом и есть залог надежности (поддержка целостности данных). По-вашему мне кроме этого первичного/уникального ключа зачем-то нужен суррогатный. Зачем?!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 15:08 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльЯ так и не смог довести до благородного сообщества, что в приведенном мною примере 20160306 составной первичный ключ выполняет роль и уникального индекса (ибо нельзя быть "дважды гражданином" одной и той же страны). В этом и есть залог надежности (поддержка целостности данных). По-вашему мне кроме этого первичного/уникального ключа зачем-то нужен суррогатный. Зачем?!! Как зачем. - Чтобы табуляры юзать. - чтобы иерархию делать. - Чтобы таблицы связывать. - Чтобымаксимально номарлизованная БД была - .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 15:25 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
Сурогатный ключ, максимально упрощает как логическую так и физическую модель. Сурогатный ключ, максимально упрощает работу программиста. Сурогатный ключ, позволяется максимально быстро и оптимально работать БД. автор (ибо нельзя быть "дважды гражданином" одной и той же страны). Я для вашей целлостности, есть коснтрейн, если вы не в курсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 15:27 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльSvDevЯ бы сказал, составные ключи менее надежны. Например, первичный ключ не должен меняться, при составном ключе - это правило рано или поздно нарушается. Я так и не смог довести до благородного сообщества, что в приведенном мною примере 20160306 составной первичный ключ выполняет роль и уникального индекса (ибо нельзя быть "дважды гражданином" одной и той же страны). В этом и есть залог надежности (поддержка целостности данных). По-вашему мне кроме этого первичного/уникального ключа зачем-то нужен суррогатный. Зачем?!! Писал уже, читайте выше. Уникальность предполагается и в том, и в другом варианте, никак не спасет от того, что данные потом поменяться могут и поменяются с определенного момента. Затем же, зачем нужна нормализация модели до определенной степени, чтобы избежать проблем разного рода в дальнейшем (см. выше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 15:36 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
А вот мне в голову пришел пример не безопасности натурального ключа. Пользователи заведены по натуральному ключу LOGIN, он уникален. Очень любопытный сотрудник, решил насолить начальнику. Заходит в редактирование своей карточки, меняет логин на логин начальника, ставит свой пароль и вуаля. (А как по другому по натуральному ключу понять, что это не босс?). Система апдейтит пароль босса и любопытный сотрудник сидит под логином босса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 15:37 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
blkangelА вот мне в голову пришел пример не безопасности натурального ключа. Пользователи заведены по натуральному ключу LOGIN, он уникален. Очень любопытный сотрудник, решил насолить начальнику. Заходит в редактирование своей карточки, меняет логин на логин начальника, ставит свой пароль и вуаля. (А как по другому по натуральному ключу понять, что это не босс?). Система апдейтит пароль босса и любопытный сотрудник сидит под логином босса. Странный какой-то пример... тогда у меня есть такой пример: заходит пользователь с правами DBA и делает DROP DATABASE ... А про constraint - тоже странно. Зачем мне плодить индексы (на uniq constraint oracle автоматически добавит индекс), если у меня и так есть уникальный первичный ключ, хоть и составной. И что значит "может измениться"? Ну да - в данном примере физ.лиц может лишиться гражданства или вступить в другое. И что за проблема? Удаляется одна запись и создаётся другая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 15:53 |
|
||
|
Custom MRU. Как отличить новую запись TF от старой не по PK (Null\Not Null)?
|
|||
|---|---|---|---|
|
#18+
КурдльА про constraint - тоже странно. Зачем мне плодить индексы (на uniq constraint oracle автоматически добавит индекс), если у меня и так есть уникальный первичный ключ, хоть и составной. 1. индекс на уникальноть - не одно и то же с PK 2. практически всем внешним средствам разработки удобнее иметь дело с добавочным PK генератором. Хотя для префекциониста он лишний). Я сам таким был при моделировании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2017, 16:11 |
|
||
|
|

start [/forum/topic.php?fid=50&msg=39394682&tid=1874441]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 420ms |

| 0 / 0 |
