|
|
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
ежели предусматривается как в 1С и MSCRM выгрузка и загрузка конфигураций - то тут без GUID в качестве ключей - никуда! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 15:49 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
spежели предусматривается как в 1С и MSCRM выгрузка и загрузка конфигураций - то тут без GUID в качестве ключей - никуда!Составной ключ, одна из частей которого "код реплики", спасет отца русской демократии. Решаемо без всяких GUID - легко и непринужденно!.. "Исключительная бесполезность" GUID в качестве ключа имеет весьма относительный смысл только при слиянии данных из категорически РАЗНОРОДНЫХ источников... И исключительно в тех случаях, когда в хотя бы одной из "сливаемых" систем используются именно такие ПК... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2012, 16:38 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
sphinx_mvтверскойпо 2. Определение старшинства записи по значению PK - это, мягко говоря, бред. Подобный метод применяется в БД "на коленке", где данные добавляет только один пользователь и всегда только "по старшинству". Не вопрос... Но тут такое дело... Например, есть задача, в котоой достаточно часто (раз в несколько секунд) требуется выбрать последние N вставленных записей в таблицу (что-то под десяток млн. записей в месяц, примерно 20 ГБ данных на диске)... Данные в таблицу вставляются несколькими "тупыми железяками"... Прикажете делать еще одно поле с датой/временем вставки и индексировать его? вариант, конечно, но вот только в случае с целочисленным автоинкрементным суррогатным ключом это даже не просто, а ОЧЕНЬ просто - выбрать последние записи по индексу... Без всяких дополнительных накладных расходов... Что показывает данный конкретный случай? Что в некоторых условиях самое большое значение автоинкрементного поля, скорее всего, совпадает с самыми "новыми" данными, но с этим никто и не спорит ))) Стоит одной из "тупых железок" задержать отправку данных (сбой на канале, увеличение буфера на железке, изменение порядка отправки данных из буфера или др.) и последние N записей уже могут не быть самыми новыми. Заменит производитель в одной из железок алгоритм "очередь" на "стэк", и использование автоинкрементного поля пойдет лесом. И это без учета особенностей обработки вставляемых данных в процедурах/триггерах БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 13:37 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
тверскойЧто показывает данный конкретный случай? Что в некоторых условиях самое большое значение автоинкрементного поля, скорее всего, совпадает с самыми "новыми" данными, но с этим никто и не спорит ))) Стоит одной из "тупых железок" задержать отправку данных (сбой на канале, увеличение буфера на железке, изменение порядка отправки данных из буфера или др.) и последние N записей уже могут не быть самыми новыми. Заменит производитель в одной из железок алгоритм "очередь" на "стэк", и использование автоинкрементного поля пойдет лесом. И это без учета особенностей обработки вставляемых данных в процедурах/триггерах БД. -- Так что же делать? -- забеспокоился Балаганов. -- Как снискать хлеб насущный? -- Надо мыслить, -- сурово сказал Остап. - Меня, например, кормят идеи. Я не протягиваю лапу за кислым исполкомовским рублем. Моя наметка пошире. Это что, типа только GUID нас спасёт? Ну, ну, плавали, знаем... Флаг в руки и вперёд. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 14:41 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
zeon11, тема, если прочитали, - где заполняете PK, на клиенте или на сервере GUID - один из примеров ключа (обсуждение его преимуществ и недостатков оставим) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 14:49 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
zeon11, вы же работаете с FB, всегда через триггер+генератор заполняете PK? возможность получить от генератора диапазон и использовать его в приложении принципиально не используете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 14:54 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
тверскойвозможность получить от генератора диапазон Очень ненадёжно. Нужно всё время следить, чтобы диапазоны не пересеклись. То и дело какой-нибудь новый сотрудник базу в филиале развернёт, а диапазоны не открутит, и начинает приходить по репликации такое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 15:04 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
тверскойsphinx_mvпропущено... Не вопрос... Но тут такое дело... Например, есть задача, в котоой достаточно часто (раз в несколько секунд) требуется выбрать последние N вставленных записей в таблицу (что-то под десяток млн. записей в месяц, примерно 20 ГБ данных на диске)... Данные в таблицу вставляются несколькими "тупыми железяками"... Прикажете делать еще одно поле с датой/временем вставки и индексировать его? вариант, конечно, но вот только в случае с целочисленным автоинкрементным суррогатным ключом это даже не просто, а ОЧЕНЬ просто - выбрать последние записи по индексу... Без всяких дополнительных накладных расходов... Что показывает данный конкретный случай? Что в некоторых условиях самое большое значение автоинкрементного поля, скорее всего, совпадает с самыми "новыми" данными, но с этим никто и не спорит ))) Стоит одной из "тупых железок" задержать отправку данных (сбой на канале, увеличение буфера на железке, изменение порядка отправки данных из буфера или др.) и последние N записей уже могут не быть самыми новыми. Заменит производитель в одной из железок алгоритм "очередь" на "стэк", и использование автоинкрементного поля пойдет лесом. И это без учета особенностей обработки вставляемых данных в процедурах/триггерах БД. Вот только не надо высосаных из пальца детских страшилок рассказывать! Во-первых, максимальная длина необработанной очереди в любом стеке должна быть равна 0! Во-вторых, аварийное состояние системы тем и отличается от нормального , что в системе "происходит не совсем то и не совсем так"... В-третьих, от того, что "канал упал" или "стек забился" последние вставленные в таблицу данные НЕ перестают быть последними вставленными данными, даже если они относятся к данным за позапрошлый век. И весьма актуальное "а-на-на" кому надо (по чем надо) за аварийное состояние системы, минимальные требование по доступности которой ограничиваются на уровне "24/7/365", будет прописано с гораздо большей оперативностью (с сильно меньшими затратами). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 15:14 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
тверскойzeon11, тема, если прочитали, - где заполняете PK, на клиенте или на сервере GUID - один из примеров ключа (обсуждение его преимуществ и недостатков оставим) Обсуждать варианты БЕЗ обсуждения плюсов и минусов - бред! GUID - это единственный разумный способ генерации ПК на клиенте. И все бы бы хорошо, но вот только количество недостатков этого способа вполне зашкаливает по сравнениями с теми, якобы, преимуществами, которые он предоставляет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2012, 15:30 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
sphinx_mvтверскойzeon11, тема, если прочитали, - где заполняете PK, на клиенте или на сервере GUID - один из примеров ключа (обсуждение его преимуществ и недостатков оставим) Обсуждать варианты БЕЗ обсуждения плюсов и минусов - бред! GUID - это единственный разумный способ генерации ПК на клиенте. И все бы бы хорошо, но вот только количество недостатков этого способа вполне зашкаливает по сравнениями с теми, якобы, преимуществами, которые он предоставляет... +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 06:19 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
тверскойzeon11, вы же работаете с FB, всегда через триггер+генератор заполняете PK? возможность получить от генератора диапазон и использовать его в приложении принципиально не используете? Действительно, несколько раз были ситуации, когда хотелось заангажировать диапазон PK, но поскольку подспудно чувствовал, что это принципиально не правильно (так получилось, что в те времена форума небыло, посоветоваться то-же было не с кем, в книжках то-же это не обсуждалось), старался этого не делать. Один или два раза это делал, потом пожалел. Сейчас убеждён, что это (выделение диапазона) зло. Но это моё личное мнение и я его никому не навязываю. Давайте рассмотрим конкретную Вашу ситуацию, может быть можно решить проблему по-другому? Могу предположить, на своём опыте, что проблема в удалённых рабочих местах. Есть материнская БД и есть БД коммивояжёров. Периодически они слетаются в улей и несут свою толику мёда ;-). Самое простое, это действительно распределить каждому свой диапазон. Но что произойдёт на практике. 1. Мы на мамке должны вести реестр коммивояжёров, выделенные им диапазоны. 2. Каждому коммивояжёру мы должны предоставить СВОЮ индивидуальную базу данных. Пусть эта индивидуальность заключается только в предварительно настроенном генераторе, но тем не менее... 3. Мы должны постоянно следить за этими их БД, обслуживать их, смотреть, что-бы их диапазон не вылетел за границы. 4. Начали заливать их данные на мамку. По-любому, когда-то случится сбой (это аксиома), принесут дважды одни и те-же данные, сервер их не примет, тут уж начнутся танцы с бубном, наезды типа "мы принесли данные, а сервер не принимает, что за го...но вы тут слепили" Проблем действительно много. Хорошо, если у коммивояжёров мудрые грустные глаза, тогда всё получится. А если стеклянно-оловянные - лучше не браться за это :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 08:04 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
sphinx_mvНо тут такое дело... Например, есть задача, в котоой достаточно часто (раз в несколько секунд) требуется выбрать последние N вставленных записей в таблицу (что-то под десяток млн. записей в месяц, примерно 20 ГБ данных на диске)... Данные в таблицу вставляются несколькими "тупыми железяками"... Прикажете делать еще одно поле с датой/временем вставки и индексировать его? вариант, конечно, но вот только в случае с целочисленным автоинкрементным суррогатным ключом это даже не просто, а ОЧЕНЬ просто - выбрать последние записи по индексу... Без всяких дополнительных накладных расходов... Заплатки тоже часто выглядят как Очень просто. Но вседа ли на протяжении ЖЦ системы не снижают качества системы? Ить они могут увеличивать неопределенность програмного обеспечения. В РМД нет понятия последние, первые записи - там неупорядоченность типа задекларирована. И стало быть если нужно такое, то с точки зрения МД, это должно быть поле сортитовки, т.е. не суррогат: его значения имею смысл в предметной области и должны контролироваться в общем случае юзерами. Т.е. он должен иметь их возможность подправлять в случае несоотвествия. Это сразу же ухудшает основное достоинсво суррогата - его неизменность. Получить упорядоченность можно только сортировкой: и суррогат никак не поможет избежать полного скана таблы. Нет он, наверное, луче даты в плане скорости, но скан полный. А тада его преимущества в производительности не выглядят чрезмерно впечатляющими. Объявив поле суррогатным, Вы типа задекларировали, что его значения смысла не имеют, поэтому их изменение,например админом или другим разработчиком допустимы. Не важно зачем ему это понадибится, но имеет право. А если теперь юзаются непосредственно какие-то значения в запросах, то это надо поддерживать с помошью ОЦ. Например, запретить смену. А это уже доп затраты. Если уж возник вопрос кто первый, кто последний, то, возможно, рано или поздно может возникнуть вопрос на сколько он превый по времени. Сукррогат и вообще не дата на это не ответит. Ну тут говорили, что суррогаты не должны быть видны типа юзеру. Ну что же. Хорошо. Но тада напрашивается, что их не должны значения ни в каких сортировках. Ведь это в какой-то мере приравнивет их значеня к содержательным данным: но последние можно провенрить, например, по документам или как там у них положены проверки содержания БД, а первые то нет: их в нет в передметной области никак. Нужно помнить про особенность данного суррогата, против обычного их юзания. Тоже доп затраты. И вообще. Скорее всего, преждевеременно говороить, что другие альтернативы заведомо хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 09:03 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
vadiminfo...... Объявив поле суррогатным, Вы типа задекларировали, что его значения смысла не имеют , поэтому их изменение ,например админом или другим разработчиком допустимы . Не важно зачем ему это понадибится, но имеет право. А если теперь юзаются непосредственно какие-то значения в запросах, то это надо поддерживать с помошью ОЦ. Например, запретить смену. А это уже доп затраты. Зачем менять данные, которые не имеют отражения реального мира? Их-же специально делают суррогатными, что-бы ни в чью голову не пришла мысль их менять. Или живём по принципу "то, что не запрещено, то обязательно нужно сделать?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 09:41 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
Kyubeeтверскойвозможность получить от генератора диапазон Очень ненадёжно. Нужно всё время следить, чтобы диапазоны не пересеклись. То и дело какой-нибудь новый сотрудник базу в филиале развернёт, а диапазоны не открутит, и начинает приходить по репликации такое... видимо мы оразных диапазонах говорим в FireBird в конкретной базе от генератора можно получить диапазон значений и повторная выдача этих значений не произойдет (если специально не химичить с генератором) для многофилиальной структуры часто используется следующая схема: в БД филиала PK/FK это ID записи в центральной БД - PK/FK состоят из ID записи и ID филиала это снимает остроту проблемы уникальности записей в пределах системы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 09:47 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
sphinx_mvтверскойzeon11, тема, если прочитали, - где заполняете PK, на клиенте или на сервере GUID - один из примеров ключа (обсуждение его преимуществ и недостатков оставим) Обсуждать варианты БЕЗ обсуждения плюсов и минусов - бред! GUID - это единственный разумный способ генерации ПК на клиенте. И все бы бы хорошо, но вот только количество недостатков этого способа вполне зашкаливает по сравнениями с теми, якобы, преимуществами, которые он предоставляет... свет клином на GUID сошелся? вопрос не ЧЕМ заполняете PK, а ГДЕ это выполняете (на сервере или на клиенте) вы пытаетесь спорить о разумности GUID, его преимуществах и недостатках - это в других темах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 10:00 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
zeon11тверскойzeon11, вы же работаете с FB, всегда через триггер+генератор заполняете PK? возможность получить от генератора диапазон и использовать его в приложении принципиально не используете? ... Давайте рассмотрим конкретную Вашу ситуацию, может быть можно решить проблему по-другому? Могу предположить, на своём опыте, что проблема в удалённых рабочих местах. ... необходимо заливать большие объемы данных (а не в синхронизации или объединении БД), писал об этом здесь , возможно не акцентировал на этом внимание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 10:09 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
тверской, Ну, это другое дело. Если объём большой, нет ссылочной целостности, для скорости отключаем триггеры (мы-же в монополии ?), берём начальное значение генератора, устанавливаем генратор в +100 000 000, заливаем данные с клиента, где поле PK формируется на клиенте. включаем триггер. Но это всё опасно, нужно быть очень тщательным! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 10:56 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
zeon11Зачем менять данные, которые не имеют отражения реального мира? Их-же специально делают суррогатными, что-бы ни в чью голову не пришла мысль их менять. Или живём по принципу "то, что не запрещено, то обязательно нужно сделать?" Но тада получается живем по принципу: если не знаем зачем, то значит не зачем? У Чехова ружье на стене стреляет. Зачем? На подводке Курск разработчики тоже не перезаложились: возможно, не прелдвидели какого-то Зачем. Принципом, к примеру, может быть, например,:если не запрещено, то моно не далать не ожидая неожиданных сюрпризов. Этот принцип защитит в общем случае от угадваний, что там по мнению автора еще было не зачем. В общем случае суррогатность, не гарантирует, чтобы не в чью голову их не пришло менять. Ить сила идентификации суррогат типа инкремента ограничена одной таблой. Это уже потенциал для изменения. Например, при репликации. Там в другой БД такая же табла, и значения суррогатов пересекаются. В общем, не знание Зачем, возможно, не достаточно убедительное обоснгование в общем случае, мне кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 11:06 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
vadiminfo, Про ружьё ты напортачил, смешал две разных сентенции в одну кучу. 1. Чехов, как известно говорил, "Если в начале пьесы на стене висит ружье, то (к концу пьесы) оно должно выстрелить". Тут явный кинематографический подход, так сказать подготовка зрителя. Согласись, на сцене глупо-бы выглядело, если надо стрелять, актёр убежал за кулисы, притащил ружо, мочканул оппонента. 2. "Раз в год и палка стреляет" - тут да, согласен, но всего не предусмотришь. Я не сторонник того, что-бы каждую сточку кода обрамлять try ..... finally ....end Ко-всему нужно подходить взвешенно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 11:38 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
zeon11Ко-всему нужно подходить взвешенно Вот и я гАвАрУ. Вольное юзание суррогата (например, сортировка, выборка по ним), в частности, инкрементного, может оказаться не достаточно взвешенным подходом в общем случае. Ну на бросовых БД номано, наверное. А в общем случае, возможно, более консервативным подходом, было бы этого избегать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 12:16 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
zeon11тверской, Ну, это другое дело. Если объём большой, нет ссылочной целостности, для скорости отключаем триггеры (мы-же в монополии ?), берём начальное значение генератора, устанавливаем генратор в +100 000 000, заливаем данные с клиента, где поле PK формируется на клиенте. включаем триггер. Но это всё опасно, нужно быть очень тщательным! Монополия не обязательна. Триггер можно совсем не создавать, вместо постоянного вкл./выкл. Отвественность на приложении за правильное заполнение PK. Ограничение PK всё равно не даст ввести дубликат в это поле, приложение само должно уметь обрабатывать последствия своих ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 13:59 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
vadiminfosphinx_mvНо тут такое дело... Например, есть задача, в котоой достаточно часто (раз в несколько секунд) требуется выбрать последние N вставленных записей в таблицу (что-то под десяток млн. записей в месяц, примерно 20 ГБ данных на диске)... Данные в таблицу вставляются несколькими "тупыми железяками"... Прикажете делать еще одно поле с датой/временем вставки и индексировать его? вариант, конечно, но вот только в случае с целочисленным автоинкрементным суррогатным ключом это даже не просто, а ОЧЕНЬ просто - выбрать последние записи по индексу... Без всяких дополнительных накладных расходов... Заплатки тоже часто выглядят как Очень просто. Но вседа ли на протяжении ЖЦ системы не снижают качества системы? Ить они могут увеличивать неопределенность програмного обеспечения. В РМД нет понятия последние, первые записи - там неупорядоченность типа задекларирована. И стало быть если нужно такое, то с точки зрения МД, это должно быть поле сортитовки, т.е. не суррогат: его значения имею смысл в предметной области и должны контролироваться в общем случае юзерами. Т.е. он должен иметь их возможность подправлять в случае несоотвествия. Это сразу же ухудшает основное достоинсво суррогата - его неизменность. Если информационная система допускает, что пользователи могут произвольным образом изменять значения первичных ключей, это следует рассматривать как серьезную ОШИБКУ реализации.. У некоторой сущности есть нечто уникальное, что пользователь должен вводить и иногда менять? Про альтернативные ключи чего-нибудь не расскажете? Ну, и по поводу порядка/беспорядка... Доступ к данным "по индексу" подразумевает, что данные упорядочиваются... К чему сентеции о недекларированности упорядоченности в РМД - не понятно... Вас смущает, что суррогатный ключ не укладывается в Вашу модель данных? По-моему, это не проблема для суррогатнорго ключа - это, скорее, проблема Вашей модели... Первичный ключ должен помочь идентифицировать запись и проверить наличие ссылок на нее. Суррогат, который не имеет отображения в предметной области, НЕ влияет на саму предметную область, но со своими функциями справляется не в пример лучше естественных ключей, любой из которых может в любой произвольный момент времени перестать быть ключем... Даже если это ключ изначально был составным... vadiminfoПолучить упорядоченность можно только сортировкой: и суррогат никак не поможет избежать полного скана таблы. Нет он, наверное, луче даты в плане скорости, но скан полный. А тада его преимущества в производительности не выглядят чрезмерно впечатляющими. Ну-ка... Про "full scan" поподробнее... Например, на основе вот этого примера - select top NNN * from tblXXX order by id desc Индекс по ID присутствует... Я даже больше скажу: это первичный индекс по автоинкрементному полю... "Получить последние NNN записи, вставленные в таблицу" - так звучала задача... vadiminfoОбъявив поле суррогатным, Вы типа задекларировали, что его значения смысла не имеют, поэтому их изменение,например админом или другим разработчиком допустимы. Не важно зачем ему это понадибится, но имеет право. А если теперь юзаются непосредственно какие-то значения в запросах, то это надо поддерживать с помошью ОЦ. Например, запретить смену. А это уже доп затраты. Внятно объяснить ДЛЯ ЧЕГО нужно менять первичный ключ вряд ли кто-то сможет... ПОСЛЕ чего - я могу... Но я столько не выпью... Вам нужно менять что-то "уникальное" - это альтернантивный ключ. И все! Никаких проблем с проверкой ссылочной целостности и каскадными обновлениями!.. vadiminfoЕсли уж возник вопрос кто первый, кто последний, то, возможно, рано или поздно может возникнуть вопрос на сколько он превый по времени. Сукррогат и вообще не дата на это не ответит. Во-первых, когда возникнет этот вопрос - тогда он и должен решаться. А, во-вторых, Вы будете смеяться... Без ДАТЫ правильно получить посленюю "ПО ВРЕМЕНИ" запись вы вряд ли сможете... vadiminfoНу тут говорили, что суррогаты не должны быть видны типа юзеру. Ну что же. Хорошо. Но тада напрашивается, что их не должны значения ни в каких сортировках. Ведь это в какой-то мере приравнивет их значеня к содержательным данным: но последние можно провенрить, например, по документам или как там у них положены проверки содержания БД, а первые то нет: их в нет в передметной области никак. В реальных системе первичные ключи используются для идентификации записи и для контроля ссылочной целостности. Никто НЕ заставляет пользователей и разработчиков использовать их значение в сортировках. Но кто сказал, что (в некоторых задачах) такая сортировка не может понадобиться? vadiminfoНужно помнить про особенность данного суррогата, против обычного их юзания. Тоже доп затраты. Ну, и какие ДОПОЛНИТЕЛЬНЫЕ затраты для суррогата Вы наблюдаете? Особенно - если он "автоинкрементный"? Ну, хотя бы на вскидку... Неужто резервирование диапазонов ключей? А ЗАЧЕМ их резервировать?! vadiminfoИ вообще. Скорее всего, преждевеременно говороить, что другие альтернативы заведомо хуже. Выбор между естественным и искусственным (суррогатным) ключем - в пользу суррогата... Выбор между монотонно нарастающим (ака, "автоинкрементным") суррогатом и генерируемым случайным образом (например, GUID) - в пользу "автоинкремента"... Генерирование значения ключа на сервере БЕЗОПАСНЕЕ генерации ключа на клиенте... Собственно, альтернатив, как бы, больше и нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 15:05 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
тверскойzeon11тверской, Ну, это другое дело. Если объём большой, нет ссылочной целостности, для скорости отключаем триггеры (мы-же в монополии ?), берём начальное значение генератора, устанавливаем генратор в +100 000 000, заливаем данные с клиента, где поле PK формируется на клиенте. включаем триггер. Но это всё опасно, нужно быть очень тщательным! Монополия не обязательна. Триггер можно совсем не создавать, вместо постоянного вкл./выкл. Отвественность на приложении за правильное заполнение PK. Ограничение PK всё равно не даст ввести дубликат в это поле, приложение само должно уметь обрабатывать последствия своих ошибок. Все бы замечательно... Но, исходя из поставленной задачи, вставляется МНОГО записей... Например, 1,000,000... Предположим, возникнет ошибка на 999,999-й записи... Приложение, конечно, "должно уметь обрабатывать" такие ситуации... И даже предположим, что приложение эту ситуацию обработает... Вот только на сервере при этом все равно должна откатится вставка всех предыдущих 999,998 штук... И оно Вам надо?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 15:20 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
sphinx_mvВсе бы замечательно... Но, исходя из поставленной задачи, вставляется МНОГО записей... Например, 1,000,000... Предположим, возникнет ошибка на 999,999-й записи... Приложение, конечно, "должно уметь обрабатывать" такие ситуации... И даже предположим, что приложение эту ситуацию обработает... Вот только на сервере при этом все равно должна откатится вставка всех предыдущих 999,998 штук... И оно Вам надо?! не вижу проблемы, всё зависит от источника ошибки если ошибка именно в некорректной вставке ID - надо выявить ошибку и устранить, это не сложно (если генератор никто вручную не крутит туда-сюда, иначе ошибки вылезут и при заполнении ID на стороне сервера) если ошибка не в ID (обрыв канала или др.) - от выбора метода заполнения ID (на сервере или на клиенте) она не зависит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 16:45 |
|
||
|
Автоматическая нумерация записей (для Primary Key) - ЗА и ПРОТИВ
|
|||
|---|---|---|---|
|
#18+
тверскойsphinx_mvВсе бы замечательно... Но, исходя из поставленной задачи, вставляется МНОГО записей... Например, 1,000,000... Предположим, возникнет ошибка на 999,999-й записи... Приложение, конечно, "должно уметь обрабатывать" такие ситуации... И даже предположим, что приложение эту ситуацию обработает... Вот только на сервере при этом все равно должна откатится вставка всех предыдущих 999,998 штук... И оно Вам надо?! не вижу проблемы, всё зависит от источника ошибки если ошибка именно в некорректной вставке ID - надо выявить ошибку и устранить, это не сложно (если генератор никто вручную не крутит туда-сюда, иначе ошибки вылезут и при заполнении ID на стороне сервера) Изменение последовательностей и значений генераторов для ПК в базах данных - бесполезная трата времени, чреватая наступлением на короткие (чуть ниже, чем по пояс) грабли... И интересный такой вопрос на тему "простоты"... Для того, чтобы пофиксить дубликаты, нужно будет в конфликтных заливаемых записях прописать новые значения ПК (при этом как таковые значения могут быть ЛЮБЫМИ)... Необходимо проверить, что (на момент времени "Ч") новое значение отсутствует в таблице-получателе... При этом не стоит забывать про ссылочную целостность, и откорректировать все зависимые данные... Где гарантия, что за время всех этих телодвижений какой-нибудь другой ключ не станет проблемным? (и понеслась новая итерация) тверскойесли ошибка не в ID (обрыв канала или др.) - от выбора метода заполнения ID (на сервере или на клиенте) она не зависит Если режим вставки не монопольный , то возникновение проблемы с уникальностью вставки ключа будет не исключительной , а очень стандартной ситуацией... В случае с заполнением ID на сервере (если никто не играется с генераторами) дублирующееся значение получить крайне маловероятно. Рутинное разруливание конфликтов ПК на вставках больших объемов данных - оно вам ДЕЙСТВИТЕЛЬНО надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 18:28 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37717978&tid=1541744]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 447ms |

| 0 / 0 |
