Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
Сделайте так: В пределах одного филиала ключ интовый идентити, а в в межфилиальном пространстве uniqueidentifier соответствующий интовому. И будет Вам счастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 13:48 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
авторИ вообще сыр-бор как я понимаю только из-за того, что кто-то очень хочет писать update/delete... where id=:id вместо update/delete .... where (division_id,id)=(:division_id,:id) потому, что в первом варианте короче? мне надоели эти выпады. А если предположить некое интранет/интернет приложение, которое выводит строки из БД, для последующей модификации/удаления. Самый простой способ - это передать единственный параметр, уникально определяющий запись, чем массив параметров. В большом приложении - это становится настоящей проблемой отслеживать такие вещи. Или вы против того, что чем проще механизм тем он надежнее? авторСдается мне что причина вообще несколько в другом. У MSSQL имеется только IDENTITY поле, которое обязательно подразумемает индекс. У того же Оракла и ДБ2 есть SEQUENCE. (У ДБ2 есть и IDENTITY тоже в дополнение к SEQUENCE). Соответственно и подходы диктуются используемым сервером БД. вряд ли используемый сервер здесь имеет значение. хотя может быть именно отсутствие SEQUENCE для AS/400 и побудило нашу команду использовать IDENTITY и проч? или всё таки удобство? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 13:51 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
gardenmanПреписывать селекты?... хм.. что-то я сомневаюсь что это нужно будет делать. Давайте смотреть. Две таблицы, СОТРУДНИКИ и ЗАРПЛАТЫ. Сделали alter table, добавили в каждую поле "филиал". Выполняем запрос: Код: plaintext 1. Внимание, вопрос: куда меня пошлет бухгалтер, когда я потребую у него все приписанные мне зарплаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 13:51 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
А вопросик можно? Вы в какой базе этот запрос делаете? В базе филиала или в консолидированной базе? Если в базе филиала - то никаких проблем. А если в консолидированной - это ее проблемы :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:00 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
авторА вопросик можно? Вы в какой базе этот запрос делаете? В базе филиала или в консолидированной базе? Если в базе филиала - то никаких проблем. А если в консолидированной - это ее проблемы :)) а какие могут быть проблемы в консолидированной? Селективность у уникального индекса куда как очень хорошая. Так ведь? Или о чем вы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:04 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
2 Гости На счет AS/400 не знаю. Знаю на счет DB2UDB - на самом деле там IDENTITY нет. Есть только SQUENCE. Для каждого поля IDENTITY неявно создается свой SEQUENCE. Это все видно в представлениях каталога. А написать свою функцию на C, которая раздавала бы IDENTITY ничего не стоит. Было бы желание. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:04 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
gardenmanА если у филиалов вдруг пересекаются диапазоны - вот тогда это действительно круто... Если - как предложил мой собеседник - задача стартует с "независимо установленных систем", в ней на 100% будут коллизии в id-шниках. Если диапазоны изначально удерживаются различными - собственно, имеем вполне нормальную ситуацию с identity, нет никаких причин делать составной ключ. Почему нет? Давайте ограничимся индексами. Итак, изначально есть индекс PK:(table_id) С введением понятия филиала добавляются потенциальные индексы: AK:(table_id, division_id) AK:(division_id, table_id) Первый из них почти бессмысленен, хорош только тем, что запрос вида Код: plaintext выполнится несколько быстрее. Второй - вообще бессмысленен за исключением разве что некоторых order by-ев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:07 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
gardenmanА если в консолидированной - это ее проблемы Тогда не понимаю, почему Вы сами не ответили на собственный вопрос "как в таком случае сделать группировку по филиалам". Ровно этими же словами. Правда, если мне доведется заказывать софт на стороне, я предпочту исполнителя, не имеющего привычки отвечать "это ваши проблемы". Нехай он сидит со своими составными ключами, а я куплю работающую систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:11 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
> У каждого из серверов PK - это identity с определенной областью > значений, которая не перекрывается PK других серверов. Откуда уверенность, что они не перекрываются? Каковы правила раздачи диапазонов? Каковый правила выделения диапазонов при добавлении серверов? Каковы правила выделения диапазонов при необходимости деления филиалов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:38 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
авторОткуда уверенность, что они не перекрываются? Каковы правила раздачи диапазонов? Каковый правила выделения диапазонов при добавлении серверов? Каковы правила выделения диапазонов при необходимости деления филиалов? а это что за подозрения такие и как они относятся к теме дискуссии? Посмотрите, хотя бы пример софтварера - есть сомнения, что значения выйдут за диапазон? Я тоже уверен, что у нас они всегда будут уникальны для всей системы в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 16:04 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
> а это что за подозрения такие и как они относятся к теме дискуссии? Я читаю первое (Ваше) сообщение этого треда. Вижу описание примера, которое на мой взгляд, является типично кривым. Т. е. "выбор identity field в качестве PK - кривое решение" - ответ нет. А вот Ваш пример - это пример кривого решения. Отсюда и вопросы. > Посмотрите, хотя бы пример софтварера - есть сомнения, что значения > выйдут за диапазон? Чего пример, простите? Что мне этот пример должен объяснить? > Я тоже уверен, что у нас они всегда будут уникальны для всей > системы в целом. Я и прошу поделиться Вашей уверенностью. На чем-то ведь она основана, правда? Вопросы - сообщением выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 16:26 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
авторЯ читаю первое (Ваше) сообщение этого треда. Вижу описание примера, которое на мой взгляд, является типично кривым. Т. е. "выбор identity field в качестве PK - кривое решение" - ответ нет. А вот Ваш пример - это пример кривого решения. Отсюда и вопросы. identitiy генерится через одну таблицу, затем префиксуется/постфиксуется условным кодом области, полученное id используется в кач-ве первичного ключа в остальных документах БД. Это решение сильно кривое? авторЧего пример, простите? Что мне этот пример должен объяснить? softwarercreate sequence S minvalue 1000 maxvalue 2000 - эта конструкция достаточно однозначна - значения не выходят за диапазон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 16:34 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
> Это решение сильно кривое? Смотря с чем сравнивать. > identitiy генерится через одну таблицу, затем префиксуется/постфиксуется > условным кодом области, полученное id используется в кач-ве первичного ключа > в остальных документах БД. Т. е. условный код добавляется в начало первичного ключа и в конец (префикс + id + суффикс; префикс = суффиксу), так? Каков размер первичного ключа? Что Вы собираетесь делать при необходимости описывать филиалы филиалов? > create sequence S minvalue 1000 maxvalue 2000 - эта конструкция достаточно > однозначна - значения не выходят за диапазон. Это понятно. А почему Вы считаете, что заявленного диапазона Вам должно хватить (причем, в сильно урезанном виде из-за алгоритма формирования первичного ключа)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 16:53 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
авторСмотря с чем сравнивать. а че его сравнивать, для задачи, которая у нас есть - это было самым оптимальным решением. авторТ. е. условный код добавляется в начало первичного ключа и в конец (префикс + id + суффикс; префикс = суффиксу), так? Каков размер первичного ключа? Что Вы собираетесь делать при необходимости описывать филиалы филиалов? префикс ИЛИ суффикс - у нас префикс. Некоторые делают суффикс - это не имеет значения. размер первичного ключа - integer+2 символа префикса. филиалы филиалов (даже если они будут, что вряд ли :) ) получат свой префикс вот и все. авторЭто понятно. А почему Вы считаете, что заявленного диапазона Вам должно хватить (причем, в сильно урезанном виде из-за алгоритма формирования первичного ключа)? в нашем случае диапазон иссякнет не очень скоро. сколько там под интегер отведено? кажется 4 байта, + 2 байта префикс даже при нынешней нагрузке (5000 записей в день) - этого хватит надолго ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 17:13 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
gardenmanПреписывать селекты?... хм.. что-то я сомневаюсь что это нужно будет делать. ALTER TABLE - может и придется сделать а вот переписывать селекты - зачем? А если у филиалов вдруг пересекаются диапазоны - вот тогда это действительно круто... Можно ввести корпоративный Identity и пусть филиалы при помощи него между собой и "старшим братом" сношаются ЗЫ Филиалы его(corpo_identity) почитывают, а старший брат пописывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 17:20 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
И вообще, на каждом уровне должен быть свой, самостоятельный(для уровня) identity ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 17:24 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
> для задачи, которая у нас есть - это было самым оптимальным решением. Если Вы говорите "оптимальным", было бы правильно приводить при этом критерии оптимальности. Абстрактно оптимальных решений не бывает. > размер первичного ключа - integer+2 символа префикса. А храните Вы его как? В виде текста? > филиалы филиалов (даже если они будут, что вряд ли :) ) получат свой > префикс вот и все. Т. о., количество ваших филиалов ограничено 100. Так и был задумано? Т. е. 101-й не появится ни при каких обстоятельствах? > (5000 записей в день) - этого хватит надолго Что мешает этой нагрузке измениться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 18:09 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
guest_20040621Что мешает этой нагрузке измениться? Что, впрочем, не вызовет никаких проблем. Из общих соображений я предпочитаю конструкцию Код: plaintext - она более независима, а магическую константу 1000 обычно не составляет проблемы подобрать так, чтобы она была труднодостижима. Нагрузка может измениться на порядок-другой, а вот с филиалами это маловероятно :) Тем не менее, и с указанной конструкцией особых проблем нет - нужно только повесить job, который будет выполнять Код: plaintext 1. 2. и сообщать админу о том, что скоро потребуется выделить новый диапазон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2005, 16:04 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
> она более независима Это иллюзия. > магическую константу Плохо это - использовать такие константы. Мало того, что теоретически коряво, еще и практически не нужно. > Нагрузка может измениться на порядок-другой, а вот с филиалами это маловероятно Нагрузка может измениться как угодно. Сделали приложение более функциональным - она и выросла. А что имеем вместо полноценного int4? И зачем? Кстати, если какой-нибудь местнофилиальный умелец вместо <номер_филиала> определит в sequence <номер_филиала>+n = <номер_другого_филиала>, - не страшно потом это разгребать? > нужно только повесить job, который будет выполнять Т. е. костыли нужно снабдить подпорками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 09:04 |
|
||
|
Выбор PK
|
|||
|---|---|---|---|
|
#18+
guest_20040621 Т. е. костыли нужно снабдить подпорками?аффтар жжодЪ! пеши етсчо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2005, 11:58 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33218628&tid=1545720]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 376ms |

| 0 / 0 |
