powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / обновление ПЕРВИЧНОГО ключа
55 сообщений из 55, показаны все 3 страниц
обновление ПЕРВИЧНОГО ключа
    #39632063
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу в этот раздел, т.к мне кажется эта проблема не столько привязана к БД, как к алгоритмированию. Сомневаюсь что моя проблема уникальна.
Есть таблица словаря с тремя полями (ID, CODE, VALUE).
При первоначальной инсталляции сортировка по ID и Value совпадает.
(16,123,АРБУЗ)
(32,123,БАНАН)
(48,123,ВИНОГРАД)
(64,123,ГРУША)
(80,123,ДЫНЯ)
Значение ID прорежено, т.к. ожидалась потребность редко вставлять значения. Сверху падает новая версия словаря, которая сопоставляется с текущей по CODE. Надо обеспечить, что после обновления sort by ID и sort by VALUE будут совпадать, при этом нужно минимизировать количество замен ID, т.к. на них ссылается таблица с полмиллиардом записей.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39632068
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До чего я додумала:
1) определили список новых и обновляемых данных;
2) высчитали ID_L и ID_R текущего значения в старом словаре, если АРБУЗ переименовали в АНАНАС, то 16 попадает в диапазон 0-32, его трогать не надо, а если АРБУЗ переименовали в ВОДЯНАЯ ЯГОДА, то 16 не попадает в диапазон 48-64, следовательно надо переставлять.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39632096
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiskyНадо обеспечитьНе надо...
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39632117
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Сформировать откорректированную временную таблицу отсортированную по NAME
2) Определить наибольший непрерывный список записей (ВЕРНЫЙ БЛОК), там где сортировки по старому ID и новому NAME совпадают. Блок верных значений делит справочник на три части (НАЧАЛЬНЫЙ БЛОК)+(ВЕРНЫЙ БЛОК)+(КОНЕЧНЫЙ БЛОК)
3) Переставить (сменить ID) последнее значение НАЧАЛЬНОГО БЛОКА на верное место (в середину)
4) Проверить следующее значение на совпадение сортировок и двигаться к началу
5) повторять такую же процедуру для КОНЕЧНОГО БЛОКА
6) в случае если вставка невозможна (нет свободного ID) - критическая ошибка
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39632125
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wiskyесли АРБУЗ переименовали в ВОДЯНАЯ ЯГОДА, то 16 не попадает в диапазон 48-64, следовательно надо переставлять.И следом перелопачивать полмиллиарда записей, чтобы заменить ссылку на справочник?

Это не выглядит хорошей идеей.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39632155
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это MSSQL то там на связях с нужной таблицей можно задать CASCADE UPDATE, но обязательно на всех связях таблицы. Тогда просто меняешь ID в исходной таблице, а дальше само поменяется. Но это самое плохое решение из всех возможных.

По-хорошему ID менять не надо, т.к. на то он и абстрактный ключ чтобы не нести никакой смысловой нагрузки. Не надо в него вкладывать смысл "ID справочника из другого источника", надо просто добавить поле "ID справочника из другого источника" и в нем меняй.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39632881
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изменения PK не моя пререгатива. Но то что сортировка по ID совпадает с VALUE наверное удобно, если эта сортировка требуется постоянно, а VALUE длинное. Изменение происходит крайне редко. Например справочник стран.
На текущий момент я рассматриваю такой вариант.
Сформировать временную таблицу или коллекцию id_new, id_old,name_new, status ("новая", "измена","без измен") отсортированную по name_new . Для записей "верно" id_new заполнено. Проверяю последовательно записи в статусе "Измена" на условие id_old between id_new_l and id_new_r. Если верно то id_new=id_old иначе оставить пустым. Затем проставляю пустые id_new.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39632889
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначальная задача у вас какая? Пока вопрос выглядит как "хочу левой ногой почесать правое ухо, до какой длины ногти стричь?"
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39632920
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiskyИзменения PK не моя пререгатива. Но то что сортировка по ID совпадает с VALUE наверное удобно, если эта сортировка требуется постоянно, а VALUE длинное. Изменение происходит крайне редко. Например справочник стран.
ИМХО увольнять надо за такое.
WiskyНа текущий момент я рассматриваю такой вариант.
Сформировать временную таблицу или коллекцию id_new, id_old,name_new, status ("новая", "измена","без измен") отсортированную по name_new . Для записей "верно" id_new заполнено. Проверяю последовательно записи в статусе "Измена" на условие id_old between id_new_l and id_new_r. Если верно то id_new=id_old иначе оставить пустым. Затем проставляю пустые id_new.
В процессе замены учти такую ситуацию:
Код: plaintext
id_old = 2 id_new = 5 и есть записи с id_old = 5
т.е. поменяв ID с 2 на 5 ты не сможешь понять где новые 5, а где старые.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39633123
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiskyНо то что сортировка по ID совпадает с VALUE наверное удобно, если эта сортировка требуется постоянно, а VALUE длинное

Если уж действительно встал вопрос производительности при сортировке по строке, и хочется заменить ее сортировкой по int, то можно добавить еще одно поле "ORDER_NUM" int, перезаполнять его по порядку каждый раз при изменении VALUE (раз уж это событие такое редкое), и использовать для сортировки.

Хотя я почему-то сомневаюсь, что эта проблема с производительностью реальна. Меня терзают смутные сомнения. Скажите, а вы вообще ORDER BY используете? Или делаете запрос без ORDER BY, подметили, что порядок строк обычно соответствует ID, и теперь ради сохранения этого призрачного эффекта затеяли вот это все?
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39634526
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю чужую задачу, у него динамически формируются различные группировки и при группировки по значению этого словаря он значительно теряет производительность. По поводу доп.поля выигрыша нет, проблема в вероятности масс.апдейта остаётся.
Спасибо, что напомнили о перекрестной замене, наверное поставлю запрет на выдачу new используемых в old.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39634671
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiskyЕсть таблица словаря с тремя полями (ID, CODE, VALUE).
(16,123,АРБУЗ)
(32,123,БАНАН)
(48,123,ВИНОГРАД)
(64,123,ГРУША)
(80,123,ДЫНЯ)
Сверху падает новая версия словаря, которая сопоставляется с текущей по CODE.

Только сейчас обратил внимание. А как новая версия сопоставляется по CODE, если CODE не уникальный - везде 123?
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39634868
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
совершенно не ясно, с какого перепою ID это primary key.

primary key должно быть или name (если оно уникально) или code (если оно уникально). ID переименовать в SORTPOS или SORTID, убрать с него primary key и будет счастье.

IMhO
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39634884
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiskyЗначение ID прорежено, т.к. ожидалась потребность редко вставлять значения. Сверху падает новая версия словаря, которая сопоставляется с текущей по CODE. Надо обеспечить, что после обновления sort by ID и sort by VALUE будут совпадать, при этом нужно минимизировать количество замен ID, т.к. на них ссылается таблица с полмиллиардом записей.


Нененененене.
Правило №0. Первичный ключ не изменяется. Никогда не изменяется. Если изменяется, смотри Правило №0.

Правило №2. Первичный ключ не несёт в себе никакой информации, никакой смысловой нагрузки в предметной области, он служит только для одной цели -- идентификации записи.

Следствие №3. Первичный ключ имеет значение, которое уникально, но само это значение никому не интересно.


upd 24.04.2018 tchingiz


Правило № 4. Естественных первичных ключей не бывает.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39634887
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПравило №2. Первичный ключ не несёт в себе никакой информации, никакой смысловой нагрузки в предметной области, он служит только для одной цели -- идентификации записи.Синтетический первичный ключ - да. Естественный - нет. Составной - всяко бывает...
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39634891
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaMasterZivПравило №2. Первичный ключ не несёт в себе никакой информации, никакой смысловой нагрузки в предметной области, он служит только для одной цели -- идентификации записи.Синтетический первичный ключ - да. Естественный - нет. Составной - всяко бывает...
ИМХО это в теории так, а в реальности только первое используется.

В остальном ТС честно сознался почему так
WiskyЗначение ID прорежено, т.к. ожидалась потребность редко вставлять значения. Сверху падает новая версия словаря, которая сопоставляется с текущей по CODE. Надо обеспечить, что после обновления sort by ID и sort by VALUE будут совпадать, при этом нужно минимизировать количество замен ID, т.к. на них ссылается таблица с полмиллиардом записей.
При проектировании перестарались с оптимизаторством, теперь пришло время наступить на эти грабли.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39634911
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСинтетический первичный ключ - да. Естественный - нет. Составной - всяко бывает...

Правило № 4. Естественных первичных ключей не бывает.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39634990
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherAkinaСинтетический первичный ключ - да. Естественный - нет. Составной - всяко бывает...

Правило № 4. Естественных первичных ключей не бывает.

Спасибо, я зобыл его добавить...
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637151
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cane Cat FisherЕсть таблица словаря с тремя полями (ID, CODE, VALUE).
(16,123,АРБУЗ)
(32,123,БАНАН)
(48,123,ВИНОГРАД)
(64,123,ГРУША)
(80,123,ДЫНЯ)
Сверху падает новая версия словаря, которая сопоставляется с текущей по CODE.

Ошиблась, конечно CODE уникальный и неизменный.
Если так коробит от корректировки первичного ключа, CODE является PK, а ID уникальный с сортировкой совпадающей с Value
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637159
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherПравило № 4. Естественных первичных ключей не бывает.
СНИЛС. ИНН. ISBN. Номер страхового полиса. И т.д., и т.п. - примеров естественных первичных ключей дохрена.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637162
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wisky , лучше будет, если Вы (с учётом всего наговорённого выше) заново сформулируете задачу и снабдите её примером правильных исходных данных. А то не очень понятно, что в ней корректируется и как именно.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637163
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaCane Cat FisherПравило № 4. Естественных первичных ключей не бывает.
СНИЛС. ИНН. ISBN. Номер страхового полиса. И т.д., и т.п. - примеров естественных первичных ключей дохрена.
ИМХО лучше не рисковать.
Одному знакомому уже третий ИНН выдали. Налоговая что-то у себя накосячила, приходит он за возмещением НДФЛ по ипотеке, а ему - у вас ИНН другой, и так несколько раз )))
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637165
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топике звучала верная мысль о том что в качестве ПК лучше брать суррогат
На основе sequence. Все прочие способы нас приведут к аномалиям. Будут
Смены паспортов, ИНН, страховок.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637202
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХО лучше не рисковать.Нет тут никакого риска. Ты вообще не о том. ИНН идентифицирует именно налоговый счёт, а не человека. Так же, как и СНИЛС тоже идентифицирует страховой счёт. Ни то, ни другое, не дублируется. Я говорил о них к тому, что в таблице ИНН делать синтетический первичный индекс - неразумно. А вот на стороне привязки к человеку - да, возможно и дублирование. И человека (как правило) нужно идентифицировать (в рамках конкретной системы) по синтетическому ключу.
Dima TОдному знакомому уже третий ИНН выдали. Налоговая что-то у себя накосячила
У меня у самого 2 разных ИНН - один я получал сам, а второй они мне, как потом выяснилось, присвоили самостоятельно, когда создавали систему рассылки дорожного налога. Но как у меня из-за этого никаких проблем не возникает.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637220
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ топике звучала верная мысль о том что в качестве ПК лучше брать суррогат
На основе sequence. Все прочие способы нас приведут к аномалиям. Будут
Смены паспортов, ИНН, страховок.

Joe Celko на тебя нет.
http://www.sql.ru/forum/507537/stil-programmirovaniya-dzho-selko-na-sql
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637227
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiskyЕсли так коробит от корректировки первичного ключа, CODE является PK, а ID уникальный с сортировкой совпадающей с Value

...и на ID ссылается таблица с полмиллиардом записей. Веселое такое поле для сортировки.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637532
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСНИЛС. ИНН. ISBN. Номер страхового полиса. И т.д., и т.п. - примеров естественных первичных ключей дохрена.
Я тут подумал - это все суррогатные ключи. Никакой смысловой нагрузки они в себя не включают.
https://ru.wikipedia.org/wiki/Суррогатный_ключ Суррогатный ключ — понятие теории реляционных баз данных.

Это дополнительное служебное поле, добавленное к уже имеющимся информационным полям таблицы, единственное предназначение которого — служить первичным ключом. Значение этого поля не образуется на основе каких-либо других данных из БД, а генерируется искусственно.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637535
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЯ тут подумал - это все суррогатные ключи.Нет. При вводе информации в таблицу СНИЛС, ИНН, ISBN, Номер страхового полиса и иже с ими - именно вводятся, а не "генерируются искусственно" движком БД. Они существуют (и являются атрибутом соотв. сущности) вне зависимости от существования БД. Так что с точки зрения БД это - естественный ключ.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637540
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaDima TЯ тут подумал - это все суррогатные ключи.Нет. При вводе информации в таблицу СНИЛС, ИНН, ISBN, Номер страхового полиса и иже с ими - именно вводятся, а не "генерируются искусственно" движком БД. Они существуют (и являются атрибутом соотв. сущности) вне зависимости от существования БД. Так что с точки зрения БД это - естественный ключ.
Они генерируются в момент выдачи налоговой и т.п. Только там это первичные ключи. Во всех остальных БД это внешние ключи.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637635
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAkinaпропущено...
Нет. При вводе информации в таблицу СНИЛС, ИНН, ISBN, Номер страхового полиса и иже с ими - именно вводятся, а не "генерируются искусственно" движком БД. Они существуют (и являются атрибутом соотв. сущности) вне зависимости от существования БД. Так что с точки зрения БД это - естественный ключ.
Они генерируются в момент выдачи налоговой и т.п. Только там это первичные ключи. Во всех остальных БД это внешние ключи.

Главное, что они однозначны во всех базах данных, в отличие от автоинкрементов и GUID-ов.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637687
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiDima Tпропущено...

Они генерируются в момент выдачи налоговой и т.п. Только там это первичные ключи. Во всех остальных БД это внешние ключи.

Главное, что они однозначны во всех базах данных, в отличие от автоинкрементов и GUID-ов.
Где-то удалось два одинаковых гуида получить?

А несколько ИНН у одного человека обычное явление: у Akina их два 21372901 , у моего знакомого три 21372749
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637697
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiГлавное, что они однозначны во всех базах данных, в отличие от автоинкрементов и GUID-ов.

Гуиды коненчо да.. В пределах вселенной однозначно будут дубликаты, и не зарелизишься в ближайшей галактике, зачмырят
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637698
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tschiпропущено...


Главное, что они однозначны во всех базах данных, в отличие от автоинкрементов и GUID-ов.
Где-то удалось два одинаковых гуида получить?

А несколько ИНН у одного человека обычное явление: у Akina их два 21372901 , у моего знакомого три 21372749

Хуже, когда наоборот. Я знал, как двум людям одинаковый ИНН выдали - потом одного чуть не посадили за грехи другого.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637700
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherХуже, когда наоборот. Я знал, как двум людям одинаковый ИНН выдали - потом одного чуть не посадили за грехи другого.
Бывает проще: полиция ФИО и год рождения сверяет. Одного знакомого чуть не арестовали на посту ГИБДД, совпало с каким-то кадром в федеральном розыске. Повезло что это далеко не первое совпадение и гаишники философски к этому относятся.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637758
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schimaytonВ топике звучала верная мысль о том что в качестве ПК лучше брать суррогат
На основе sequence. Все прочие способы нас приведут к аномалиям. Будут
Смены паспортов, ИНН, страховок.

Joe Celko на тебя нет.
http://www.sql.ru/forum/507537/stil-programmirovaniya-dzho-selko-na-sql
Я сразу скажу что я нечитал этого замечательного человека. Но у меня уже достаточно
опыта эксплуатации БД. Есть много систем где в изначальной постановке ПК отсутствует.

Кстати на очень многих тренингах MS-SQL я встречал отголоски этой парадигмы. Я имею в виду - вовлечение
в модель ключей из домена. Но из практики - очень редко вы можете на уровне бизнес-постановки определить
ключи. Если вы студент - то вам наверное рассказывали о ТЗ. Так вот. На самом деле ни первого ни последнего
ТЗ не существует. Бизнес никогда окончательно не знает всего о модели своих данных. И поэтому решение
о ключах мы принимаем с оглядкой. Со страховкой. Тоесть мы можем заявить что данное поле уникально
и использовать его в поисковых операциях. Но ПК мы заводим как суррогат из sequence которыей нам предоставляет
СУБД. Как полезный бонус sequence обеспечивает нам компактность индекса по ПК. Мы уверены что не тратим ничего
лишнего.

Есть кристально ясные для нас кейсы когда мы на основе своего понимания задачи можем сказать что данный
ключ - первичен. Например - коды стран US, FR, e.t.c. коды языков, международные почтовые Zip-codes.
Мы ходим в ISO стандарты, смотрим что там и как и имплементируем это как ПК.

Есть ситуации когда нет единой БД. Тоесть бизнес сущность генерируется в окружении grid сетевых приложений
и для пущей уникальности эта сущность получает своё значение на базе SysGUID. Опустим доказательство
уникальности. Для нас важна практика. Этот метод проверен и за несколько лет эксплуатации (к примеру)
биржевых распределенных систем не дал ни разу коллизий. Ну или мне о них ничего не известно. Из
практических соображений он также удобен для текстового поиска этого GUID по логам. Вряд-ли
вы найдете случайные дубликаты. Для других типов ключей дубликаты возможны.

По поводу естественных ключей. Возьмем предметную область физлиц.
Если мы отказываемся от суррогатов в пользу ИНН, паспортов и СНИЛСОВ то нам придется ответить на вопросы
реального мира. Что делать с бомжами? Лицами утерявшими паспорт? Иностранцами? Баптистами-адвентистами
и прочими сектантами которые по разным причинам не имеют ИНН? Что делать с лицами меняющими гражданство
или восстанавливающими? Как вообще ключевать физ-лицо? Я - не знаю. Нет у меня никакого метода кроме
суррогата.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637805
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сформулировал так ...

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

Суррогатный ключ (не бесплатно) позволяет оставить проблему идентификации личности там, где эта идентификация и должна быть - в слое деловой логики приложения.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637897
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...Как вообще ключевать физ-лицо?...

По фотке или отпечаткам пальца (как более простой методе ))) )
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637901
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ сразу скажу что я нечитал этого замечательного человека.

Настоятельно рекомендую. Без иронии.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637903
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov....
Но, суррогатные ключи позволяют не привносить в проблему идентификации записи ещё и проблему идентификации личности.
...
Я бы резюмировал так:
1) У суррогатных ключей есть беспорные приемущества
2) У суррогатных ключей нет ни одного более-менее значимого недостатка
Т.е. смысл их использовать - есть, смысла отказывать от их использования - нет

Если же нужна уникальность бизнес поляй, то команда create unique index есть почти во всех БД.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637956
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevmayton...Как вообще ключевать физ-лицо?...

По фотке или отпечаткам пальца (как более простой методе ))) )
Вы - шутник.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637962
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schimaytonЯ сразу скажу что я нечитал этого замечательного человека.

Настоятельно рекомендую. Без иронии.
Какую именно книгу вы имели в виду? Тут - не менее 7 штук.
https://www.ozon.ru/person/1954413/
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637986
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonschiпропущено...


Настоятельно рекомендую. Без иронии.
Какую именно книгу вы имели в виду? Тут - не менее 7 штук.
https://www.ozon.ru/person/1954413/

По моей первой ссылке же:
" Я сейчас читаю книгу "Стиль программирования Джо Селко на SQL", автор сам Джо Селко."
И SQL for smarties (SQL для профессионалов)
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39637988
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevmayton...Как вообще ключевать физ-лицо?...

По фотке или отпечаткам пальца (как более простой методе ))) )

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

И с отпечатками пальцев все не так гладко. У некоторых людей они не выражены столь явно, чтобы применить средства распознавания. Я знаю людей, которые не могут пользоваться сканером отпечатка пальца на ноутбуке. Не узнает он их, хоть тресни.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39638003
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schimaytonпропущено...

Какую именно книгу вы имели в виду? Тут - не менее 7 штук.
https://www.ozon.ru/person/1954413/

По моей первой ссылке же:
" Я сейчас читаю книгу "Стиль программирования Джо Селко на SQL", автор сам Джо Селко."
И SQL for smarties (SQL для профессионалов)
ОК спасибо почитаю.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39638005
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherLeonid Kudryavtsevпропущено...

По фотке или отпечаткам пальца (как более простой методе ))) )

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

И с отпечатками пальцев все не так гладко. У некоторых людей они не выражены столь явно, чтобы применить средства распознавания. Я знаю людей, которые не могут пользоваться сканером отпечатка пальца на ноутбуке. Не узнает он их, хоть тресни.
Не все люди дактилоскопированы. И не всякая база физлиц в состоянии вообще поддерживать
информационную поддержку на таком уровне. В топике мы говорим о ключах. А отпечаток - это
просто дополнительный атрибут который помогает (в уголовном производстве например) установить
личность более точно когда другие атрибуты - под сомнением. Но это все никак не имеет отношения
к теме топика а именно к обновлению ПК.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39638012
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schimaytonВ топике звучала верная мысль о том что в качестве ПК лучше брать суррогат
На основе sequence. Все прочие способы нас приведут к аномалиям. Будут
Смены паспортов, ИНН, страховок.

Joe Celko на тебя нет.
http://www.sql.ru/forum/507537/stil-programmirovaniya-dzho-selko-na-sql

При всем уважении к Celko, глава "Автонумерация не может использоваться в качестве реляционного ключа" у него достаточно спорная.

Книга его передо мной бумажная, поэтому цитаты печатаю вольно и кратко, саму суть.

Аргументы против SEQUENCE-суррогатов у него такие:

Joe Celko1. Автонумерация является нестандартной функцией, поэтому ждите проблем при миграции на другой продукт.

Определенные различия между серверами, конечно же, есть, но это скорее вопросы к практике миграции, чем к теории проектирования БД.

Этак можно про большинство фич сказать - в разных серверах с датой, деревьями и BLOB'ами работают разные функции, давайте не использовать дат, деревьев и BLOB'ов вообще, и давайте сидеть в рамках ANSI-SQL-89, потому что он поддерживается всеми серверами.

Joe Celko2. Тип данных IDENTITY нельзя присвоить двум столбцам таблицы, и это ужасно. Если тип данных нельзя присвоить более чем одному столбцу, это вообще не тип данных.

Верно, но это скорей забавный логический парадокс реляционной философии, чем реальная проблема. Одного столбца IDENTITY достаточно, и трудно представить, зачем нужен второй.

Joe Celko3. Если сделать таблицу с одним столбцом, и тот - автонумерация, мы не сможем вставить что захотим, и не можем менять значения. Что же это за таблица, что в нее ни вставить, ни поменять?

Опять же, этот вырожденный случай - проблема философов от SQL, но никак не реальной жизни.

Joe Celko4. Если вставлять N строк в таблицу с автонумерацией одной командой INSERT...SELECT, то строки пронумеруются в непредстазуемом порядке, согласно физическому порядку на диске, а всего вариантов их нумерации может быть N! (факториал), и это ужасно. В действительности все еще хуже - при следующей вставке они могут пронумероваться в другом порядке! Как ужасно! Как объяснить, что тем же самым строкам присвоены другие номера? В реляционной модели строки, содержащие одинаковый набор атрибутов, должны обрабатываться одинаково.

Выделенная цитата - точная, он так и говорит, и тут бы я поспорил. Дело в том, что в реляционной модели порядок записей не имеет значения для реляционных операций. Другими словами, две выборки, отличающиеся только порядком записей - считаются тождественно равными. Поэтому верная в целом мысль Joe Celko, именно к порядку записей - относиться не должна.

Дальше он приводит примеры, как в таблицу вводят ключ ID, но не добавляют больше никаких ограничений уникальности, и сокрушается, что в нее можно добавить кучу дублей. Ну так это же не ID виноват, а отсутствие UNIQUE(ssn, vin), или что там у него.

В конце он с умным видом приводит цитату из Кодда. Но по смыслу Кодд говорит именно о проблемах использования естественных ключей, так что это гол скорее в ворота самого Celko. В целом глава тянет скорее на разбор некоторых типичных ошибок проектирования, чем на методические обобщения.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39638113
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherJoe Celko1. Автонумерация является нестандартной функцией, поэтому ждите проблем при миграции на другой продукт.
Я делал миграцию, ETL, upgrade и еще много чего другого. И было много проблем.
Могу перечислить загибая пальцы. Типы данных. В особенности с тайм-зоной.
Кодировки. Лимиты на размерности. Логика инкапсулированная в триггерах.
Логика в хранимых процедурах PL/SQL,T-SQL, PGSQL, e.t.c. Оптимизация
производительности после миграции. Тестирование бизнес-логики.
Аксептенс-критерии. И прочее инфраструктурное.

Но identitity/автонумерация не был проблемой. Я думаю что господин
Джо Целко преувеличил проблему. Или рассматривал ее как теоретик
в отрыве всего остального.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39638361
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi" Я сейчас читаю книгу "Стиль программирования Джо Селко на SQL", автор сам Джо Селко."
Возможно, там и есть что-то интересное, но меня в своё время остановил тот очевидный факт, что он сугубый теоретик. Как тот филин, что стратегией занимается.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39638363
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В институте мне в курсе БД читали про естественные ключи, но я уже тогда был практикующим разработчиком, собственно реляционную теорию я сначала сам изобрел, а только потом узнал что все придумано до нас, ну не было тогда интернетов.

Еще тогда я преподавателю прочитал лекцию что ключи должны быть абстрактные (слово суррогатный не нравится). Знакомый учился на пару лет позже меня, говорит тот же преподаватель рассказывал про абстрактные ключи.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39642045
Wisky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите, что прерываю рассуждения по вечным вопросам, но попрошу вернуться к моей проблеме.
Громадная таблица table_big(полтриллиона записей) ссылается справочник table_dict (200 стран).

Формируются динамические запросы по структуре:

Код: sql
1.
2.
3.
4.
SELECT BG.*,TD.value
  FROM table_big BG INNER JOIN table_dict TD ON BG.dict_id=TD.ID
  WHERE ...возможно некие фильтры по другим атрибутам...
  ORDER BY TD.value  ----сортировку по наименованию страны



Для ускорения и эффективности индексов, запрос поправили и он стал

Код: sql
1.
2.
3.
4.
SELECT BG.*,TD.value
  FROM table_big BG INNER JOIN table_dict TD ON BG.dict_id=TD.ID
  WHERE ...возможно некие фильтры по другим атрибутам...
  ORDER BY  BG.dict_id --сортировку по суррогатному ключу



Бывают случаи появления новых стран или переименования, если сортировка меняется происходит создание новой записи в словаре table_dict.ID и корректировка в table_big поля dict_id.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39642056
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wiskyпопрошу вернуться к моей проблеме.
Проблема в чем? Уже выше ответили по существу проблемы. Перечитай топик.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39642090
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wisky
Код: sql
1.
  ORDER BY TD.value  ----сортировку по наименованию страны


Для ускорения и эффективности индексов, запрос поправили и он стал
Код: sql
1.
  ORDER BY  BG.dict_id --сортировку по суррогатному ключу




Оставьте ORDER BY TD.value и сделайте по нему индекс.

WiskyБывают случаи появления новых стран или переименования, если сортировка меняется происходит создание новой записи в словаре table_dict.ID и корректировка в table_big поля dict_id.

Появление новых стран (создание новой записи в словаре table_dict.ID) или переименование (изменение TD.value) не должны приводить к корректировке в table_big поля dict_id.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39642098
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherОставьте ORDER BY TD.value и сделайте по нему индекс.

Подозреваю, что это не поможет

Судя по всему, у ТС просто "случайно" получилась денормализации и из-за этого стало быстро работать. Но это план запроса нужно видеть.

Но поскольку вопрос был не о скорости запроса.... то не будем отклонятся от темы )))
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39642223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я настоятельно рекомендую перенести топик в форум Oracle.
...
Рейтинг: 0 / 0
обновление ПЕРВИЧНОГО ключа
    #39642413
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо в оракл ничего переносить. Есть подозрение что оракл тут вообще ни при чем.

Тему закрываю, т.к. ответы даны, если ТС не понял - пусть новую поднимет.
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / обновление ПЕРВИЧНОГО ключа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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