Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ / 25 сообщений из 141, страница 1 из 6
27.02.2012, 09:33
    #37679219
тверской
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
В каждой СУБД по-своему реализован механизм, позволяющий автоматически заполнять/нумеровать строки в колонке для PK (генератор+триггер, специальный тип поля и др.)
Используете ли вы данные механизм, если ваше приложение самостоятельно заполняет поле под PK?

В FireBird, обычно, используют триггер, котороый проверяет наличие значения перед вставкой и, при необходимости, вставляет значение по генератору. Накладные расходы на стороне сервера (триггер) можно исключить.
...
Рейтинг: 0 / 0
27.02.2012, 10:57
    #37679402
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
тверскойВ каждой СУБД по-своему реализован механизм, позволяющий автоматически заполнять/нумеровать строки в колонке для PK (генератор+триггер, специальный тип поля и др.)
Используете ли вы данные механизм, если ваше приложение самостоятельно заполняет поле под PK?
Я, например, в СУБД Caché стараюсь не использовать самостоятельное заполнение PK, то есть использую всегда стандартный PK, вернее OID, так как СУБД в том числе и объектно-ориентированная.
Впрочем, когда необходимо, на этот процесс можно повлиять, например, если необходимо начать нумерацию с определённого значения или чтобы значения шли не по порядку (аналог sequence).
Автоматический (стандартный) OID использую, чтобы не иметь в будущем проблем с возможностью использовать в классах bitmap -индексы.
...
Рейтинг: 0 / 0
27.02.2012, 11:46
    #37679529
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
тверскойВ каждой СУБД по-своему реализован механизм, позволяющий автоматически заполнять/нумеровать строки в колонке для PK (генератор+триггер, специальный тип поля и др.)
Используете ли вы данные механизм, если ваше приложение самостоятельно заполняет поле под PK? В FireBird, обычно, используют триггер, котороый проверяет наличие значения перед вставкой и, при необходимости, вставляет значение по генератору. Накладные расходы на стороне сервера (триггер) можно исключить.

Тут ошибка. Приложение ни при каких условиях не должно заполнять PK. Если вы всё-же хотите, что-бы этот процесс проскальзывал через клиента, то правильно сделать так:
1. Клиент запрашивает с сервера новое значение PK.
2. Клиент отправляет на сервер запись, включив в эту запись и это значение PK.
Т.е. Значение РК делает полную петлю

Предвижу возражения "экономистов", типа такого:
- "А если клиент получит значение РК и не воспользуется им, то в стройной последовательности PK на сервере будет числовая дырка?
Ответ:
- Да, будет дырка, и это не страшно, обычное дело.
...
Рейтинг: 0 / 0
27.02.2012, 12:20
    #37679633
тверской
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
zeon11,
1) приложение может запросить/зарезервировать у сервера диапазон значений (сколько необходимо, например неск. млн.) для PK и спокойно их использовать
В данном случае триггер или специальный тип поля для PK не используются, но несут доп. нагрузку на сервер при вставке записей.
2) в качестве PK могут использоваться GUID или что-то похожее, поэтому заполнять поле удобнее на клиенте
...
Рейтинг: 0 / 0
27.02.2012, 13:04
    #37679754
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
Если ПК действительно является ПК, абстрактным уникальным кодом, не несущим никакой смысловой нагрузки, то никакие резервирования диапазонов не нужны.

Если вы возлагаете на ПК ф-ии некоего нумератора, понятного и приятного человеческому глазу, то это уже не ПК а "красивый номер" - табельный номер, номер по журналу документов, номер бланка, договора, векселя, чего-то еще.

Разделите эти функции и не смешивайте их.
...
Рейтинг: 0 / 0
27.02.2012, 13:22
    #37679814
тверской
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
Программист-Любитель,
никакого смешивания нет.
Выделение диапазона необходимо, если, например, вы вставляете 10 млн. записей в таблицу
- либо для каждой записи отрабатывает триггер+генератор
- либо поле PK корректно заполнено сразу на клиенте (из выделенного диапазона, для чего один раз обратились к генератору)

автоматическое заполнение PK на сервере (+накладные расходы при вставке каждой записи) <-> заполнение PK на клиенте (+внимательный контроль за разработкой ПО)
...
Рейтинг: 0 / 0
27.02.2012, 13:30
    #37679851
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
PK - не обязательно должен быть суррогатным, в общем случае. Но если суррогатный (естественный РК естественно на клиенте), то, скорее всего, должен заполняться на сервере во избежании разрешения излишних конфликтов клиентов, пытающихся написать одно и то же значение своим таким разным записям.
...
Рейтинг: 0 / 0
27.02.2012, 13:54
    #37679954
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
> Используете ли вы данные механизм, если ваше приложение самостоятельно заполняет
> поле под PK?

ЕСЛИ приложение самостоятельно генерирует значения для PK, то ЕСТЕСТВЕННО
генераторы не используются.

ТОЛЬКО ЕСТЬ ОДНО НО: я ещё ни разу не видел, чтобы приложение самостоятельно
заполняло PK. Т.е. все наши приложения всегда генерировали СУБД-шными
генераторами. Чтобы приложение могло бы "самостоятельно заполнять поле под PK",
PK должен быть естественным ключём, которых в природе не существует.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.02.2012, 13:59
    #37679975
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
тверскойzeon11,
1) приложение может запросить/зарезервировать у сервера диапазон значений (сколько необходимо, например неск. млн.) для PK и спокойно их использовать
В данном случае триггер или специальный тип поля для PK не используются, но несут доп. нагрузку на сервер при вставке записей.
2) в качестве PK могут использоваться GUID или что-то похожее, поэтому заполнять поле удобнее на клиенте

Подобные схемы актуальны, если вы пытаетесь построить систему типа "floppy_net". Тогда да, чтобы без геммора раз в неделю сливать данные от коммивояжёров в одну базу, и требуется или резервирование диапазона РК, или использовать GUID. Другие бизнес-схемы, где это понадобилось-бы, мне в голову не приходят. Причём, даже в этом случае, можно придумать более изящный вариант.
Ну, и насчёт GUID:
1.Очевидно, что ожидать ускорения работы БД и уменьшения размера БД в случае использования GUID не приходится.
2.При использовании целочисленного РК вы получаете в качестве бонуса лёгкий способ определения старшинства записи, контроль целостности данных.
3. РК рано или поздно при проектировании БД войдёт в другую таблицу в качестве FK,
и таких внешних ключей в одной таблице может быть не один, а достаточно много. Представьте, как будет выглядеть такая таблица при прямом просмотре?

По поводу вашей сентенции, что заполнять поле на клиенте удобнее, позволю себе спросить: чем удобнее-то?
ковырять не отвёрткой, а кухонным ножом в электрической розетке удобнее, поскольку он тут, под рукой, на кухне лежал, а за отвёрткой надо было в гараж идти?
...
Рейтинг: 0 / 0
27.02.2012, 13:59
    #37679977
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
> автоматическое заполнение PK на сервере (+накладные расходы при вставке каждой
> записи)

Там на самом деле нет никаких накладных расходов обычно, потому что как правило
для этих вещей в СУБД используются нетранзакционные и очень быстрые механизмы.
Грубо говоря, sequence -- это переменная в памяти СУБД с определённым именем,
и защищённая мьютексом (нетранзакционным). Каждые n генераций её новый верхний
диапазон (N+n) физически записывается на диск в специальную область данных БД.
Это очень быстро, n обычно несколько тысяч.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.02.2012, 14:39
    #37680104
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
MasterZiv
PK должен быть естественным ключём, которых в природе не существует.

Зато могут существовать в ИС. СУБД Аксцеес поддерживает каскадное обновление (не нуно париться с поддержколй), БД часто не большие, чтобы это каскадное одновление не напрягало. Там может быть суррогатный в общем случае и ниче особого не дает.
СУБД Оракл, наоборот, скорей, предполагает суррогаты. Мало того что каскадное обновление декларативно не поодеерживается, так еще и взаимными блокировками чревато изменение значения РК.
...
Рейтинг: 0 / 0
27.02.2012, 14:56
    #37680170
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
vadiminfoMasterZivPK должен быть естественным ключём, которых в природе не существует.

Зато могут существовать в ИС. СУБД Аксцеес поддерживает каскадное обновление (не нуно париться с поддержколй), БД часто не большие, чтобы это каскадное одновление не напрягало. Там может быть суррогатный в общем случае и ниче особого не дает.
СУБД Оракл, наоборот, скорей, предполагает суррогаты. Мало того что каскадное обновление декларативно не поодеерживается, так еще и взаимными блокировками чревато изменение значения РК.

ЗАЧЕМ?!!!!
Любим стоять на лыжах в гамаке?
...
Рейтинг: 0 / 0
27.02.2012, 15:21
    #37680219
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
zeon11ЗАЧЕМ?!!!!
Любим стоять на лыжах в гамаке?
Пардон, не совсем понял что именно ЗАЧЕМ?!!!!
Естесвенные ключи зачем? Менять зачем? или что?
...
Рейтинг: 0 / 0
27.02.2012, 15:56
    #37680329
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
> ЗАЧЕМ?!!!!
> Любим стоять на лыжах в гамаке?

> Пардон, не совсем понял что именно ЗАЧЕМ?!!!!
> Естесвенные ключи зачем? Менять зачем? или что?

Зачем менять PK.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.02.2012, 00:05
    #37681282
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
MasterZiv
Зачем менять PK.

Ну мало ли. Если естественный идентификатор в качестве PK, то к примеру, чтобы исправить опечатки. Ну напрмер, это номер регистрации предприятия. Через месяц выяснили что в номере ошибка. Вот и изменили.
Изменнеие суррогата выглядит как маловероятное ( ну собсно про это и говорил: в Оракле каскад в больших БД выглядит не привлекательно). Поэтому это как бы его важное достоинство перед естестевнным. Недостаток, что он суррогатный - ничему в "природе" (никакому свойству объектов предметной области) не соотвествует.

Впрочем, значения суррогатов произвольные, потому замена одного на другое ниче не исакажает в предметной области (в природе, если угодно). А если мы не знаем ЗАЧЕМ менять, то это не значит, что этого ЗАЧЕМ не придумают юзера, включая админов БД на протяжении всей эксплуатации БД.
...
Рейтинг: 0 / 0
28.02.2012, 05:36
    #37681381
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
vadiminfoMasterZivЗачем менять PK.

Ну мало ли. Если естественный идентификатор в качестве PK, то к примеру, чтобы исправить опечатки. Ну напрмер, это номер регистрации предприятия. Через месяц выяснили что в номере ошибка. Вот и изменили.
Изменнеие суррогата выглядит как маловероятное ( ну собсно про это и говорил: в Оракле каскад в больших БД выглядит не привлекательно). Поэтому это как бы его важное достоинство перед естестевнным. Недостаток, что он суррогатный - ничему в "природе" (никакому свойству объектов предметной области) не соотвествует.

Впрочем, значения суррогатов произвольные, потому замена одного на другое ниче не исакажает в предметной области (в природе, если угодно). А если мы не знаем ЗАЧЕМ менять, то это не значит, что этого ЗАЧЕМ не придумают юзера, включая админов БД на протяжении всей эксплуатации БД.

Просто я в качестве PK всегда использовал суррогатный ключ и никогда не показывал его юзерам, поэтому с такими проблемами и не встречался, да и не жалею об этом. Вот и спросил, зачем создавать себе трудности, когда можно совсем без них обойтись?
...
Рейтинг: 0 / 0
28.02.2012, 08:30
    #37681417
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
zeon11Просто я в качестве PK всегда использовал суррогатный ключ и никогда не показывал его юзерам, поэтому с такими проблемами и не встречался, да и не жалею об этом. Вот и спросил, зачем создавать себе трудности, когда можно совсем без них обойтись?
При проектировании, разработке мы типа сталкиваемся с выбором альтернатив из-за того, что у разных вариантов есть свои достоинства и недостатки, которые в раных ситуациях могут иметь разный вес.
...
Рейтинг: 0 / 0
28.02.2012, 14:46
    #37682205
baracs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
vadiminfoЕсли естественный идентификатор в качестве PK, то к примеру, чтобы исправить опечатки. Привет путешественникам по граблям!
vadiminfoНу напрмер, это номер регистрации предприятия. Ага! Ничего естественнее номера регистрации у предприятия быть не может. Прям, фундаментальная физическая константа.
vadiminfoЧерез месяц выяснили что в номере ошибка. Вот и изменили. А сейчас, например, выборы пройдут, правительство поменяется и, внезапно, окажется, что предприятия неправильно регистрировали... Как говорится "всю систему менять надо"...
vadiminfoНедостаток, что он суррогатный - ничему в "природе" (никакому свойству объектов предметной области) не соотвествует. Вы уверены, что это недостаток?
vadiminfoА если мы не знаем ЗАЧЕМ менять, то это не значит, что этого ЗАЧЕМ не придумают юзера, включая админов БД на протяжении всей эксплуатации БД. Как уже было отмечено, юзерам не то что менять и видеть-то PK совсем не обязательно.
Что касается DBA, то коли он, в здравом уме за такое принялся, то и с суррогатными ключами справится.
...
Рейтинг: 0 / 0
28.02.2012, 14:49
    #37682214
baracs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
vadiminfoПри проектировании, разработке мы типа сталкиваемся с выбором альтернатив из-за того, что у разных вариантов есть свои достоинства и недостатки, которые в раных ситуациях могут иметь разный вес. Форум можно закрывать.
...
Рейтинг: 0 / 0
28.02.2012, 15:00
    #37682250
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
MasterZiv
> автоматическое заполнение PK на сервере (+накладные расходы при вставке каждой
> записи)

Там на самом деле нет никаких накладных расходов обычно

Там - это там. А у ТС - триггер еще сверху... Вот он и переживает.
...
Рейтинг: 0 / 0
28.02.2012, 15:06
    #37682271
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
А вот если в клиент встроить самописный БД-движок, автоматом реплицирующийся со всеми остальными клиентами-движками (которых в сети набродкастит), то будет что ответить на вопрос " А чего это у вас, оболтусов, клиент PK генерит?! "!
...
Рейтинг: 0 / 0
28.02.2012, 21:18
    #37683210
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
baracsПривет путешественникам по граблям! .
Привет, учителям жизни.
baracs Ага! Ничего естественнее номера регистрации у предприятия быть не может. Прям, фундаментальная физическая константа.

Ну хорошо коли есть. Но типа в примере меньше всего имели значения "степеня естественности"


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

Ну вот видите - еще пример нашли зачем менять может понадобится. Вдруг моего примера было не достаточно.


baracs Вы уверены, что это недостаток?
Ну к достоинстам это вроде редко относят. Нет конечно, для данных проги это номано. Но для БД вроде раньше достоинством это не считалось: в предметной области эти данные отсуствуют. Ухудшение структурного соотвествия МД предметной области.

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


Ну отмечать то можно хоть раньше хоть позже, какая разница. Ить отмечать и обосновывать типа не одно и то же в общем случае.
Не обязательно, не значит не возможно.

baracs
Что касается DBA, то коли он, в здравом уме за такое принялся, то и с суррогатными ключами справится.

А вопрос то был про: зачем изменять , а не про то справится или нет. Это выглядит как Вы тока опять подтвердили, что и суррогаты может понадобиться менять. Ну пусть хотя бы тока DBA в здравом уме.

baracs

Форум можно закрывать.
.

А по мне так наоборот: неопределенностей слишком много, так что рано закрывать. Впрочем, возможно, Вам виднее.
...
Рейтинг: 0 / 0
21.03.2012, 13:58
    #37715733
тверской
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
zeon11Ну, и насчёт GUID:
1.Очевидно, что ожидать ускорения работы БД и уменьшения размера БД в случае использования GUID не приходится.
2.При использовании целочисленного РК вы получаете в качестве бонуса лёгкий способ определения старшинства записи, контроль целостности данных.
3. РК рано или поздно при проектировании БД войдёт в другую таблицу в качестве FK,
и таких внешних ключей в одной таблице может быть не один, а достаточно много. Представьте, как будет выглядеть такая таблица при прямом просмотре?

по 1.
Что очевидно? да, 16 байт GUID в два раза больше, чем 8 байн BigInt, но в масштабах БД это будут копейки
по 2.
Определение старшинства записи по значению PK - это, мягко говоря, бред. Подобный метод применяется в БД "на коленке", где данные добавляет только один пользователь и всегда только "по старшинству".
по 3.
Пользователь никогда не видит служебную информацию, типа PK/FK, индексов, ему это не надо и даже вредно.
Админ или разработчик, простатривая таблицу с несколькими десятками млн. записей, увидит одинаковую картину )))
...
Рейтинг: 0 / 0
21.03.2012, 15:15
    #37715932
sphinx_mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
тверскойzeon11Ну, и насчёт GUID:
1.Очевидно, что ожидать ускорения работы БД и уменьшения размера БД в случае использования GUID не приходится.
2.При использовании целочисленного РК вы получаете в качестве бонуса лёгкий способ определения старшинства записи, контроль целостности данных.
3. РК рано или поздно при проектировании БД войдёт в другую таблицу в качестве FK,
и таких внешних ключей в одной таблице может быть не один, а достаточно много. Представьте, как будет выглядеть такая таблица при прямом просмотре?

по 1.
Что очевидно? да, 16 байт GUID в два раза больше, чем 8 байн BigInt, но в масштабах БД это будут копейки

Начиная с того, что абсолютная уникальность GUID, собственно, не очень-то и гарантируется (т.е., могут быть дубликаты и не только теоретически), и заканчивая тем, что GUID по сути - случайное число, последовательная вставка которых в индексы приводит, мягко говоря, к тихому страху и ужасу для дисковой подсистемы при работе с большими объемами данных...
Если GUID-поле входит еще и в кластерный индекс (в стиле MSSQL) - туши свет, пиши письма...
тверскойпо 2.
Определение старшинства записи по значению PK - это, мягко говоря, бред. Подобный метод применяется в БД "на коленке", где данные добавляет только один пользователь и всегда только "по старшинству".

Не вопрос... Но тут такое дело... Например, есть задача, в котоой достаточно часто (раз в несколько секунд) требуется выбрать последние N вставленных записей в таблицу (что-то под десяток млн. записей в месяц, примерно 20 ГБ данных на диске)... Данные в таблицу вставляются несколькими "тупыми железяками"... Прикажете делать еще одно поле с датой/временем вставки и индексировать его? вариант, конечно, но вот только в случае с целочисленным автоинкрементным суррогатным ключом это даже не просто, а ОЧЕНЬ просто - выбрать последние записи по индексу... Без всяких дополнительных накладных расходов...
...
Рейтинг: 0 / 0
21.03.2012, 15:16
    #37715933
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
Удивительно, после вопроса о том, каким кодом лучше формировать суррогатные ключи, несколько человек немедленно написали, что естественные ключи - это плохо :-)
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ / 25 сообщений из 141, страница 1 из 6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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