Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
В базе активно используются составные первичные ключи (база распределенная). В итоге, имеем следующее неудобство: - например, заявка (практически тов.накладная): 1. Кто оформил - ссылка на штатное расписание - 3 поля 2. Кто принял - 3 поля 3. Грузоотправитель - 2 поля 4. Грузополучатель - 2 поля 5. Пункт отгрузки - 2 поля 6. Пункт разгрузки - 2 поля 7. Поставщик - 2 поля 8. Покупатель - 2 поля Итого, на для ссылок на 8 сущностей надо 18 полей. Как поступать: заводить все поля раздельно или использовать нечто обобщающее (типа GUID)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 12:33 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
Я сторонник суррогатных ключей :) или GUID (что я не очень люблю) или SITE_ID + UID (площадка + ид документа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 13:39 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
А какие неудобства, можно поинтересоваться? > Как поступать: заводить все поля раздельно или использовать нечто обобщающее > (типа GUID)? Imho раздельные поля информативнее и функциональнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 13:55 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
Ого ! А почему так много полей ? Достаточно по одной ссылке, ИМХО. А вот для подробностей типа: какой отдел заказал, какой регион отгрузки следует использовать деревья. Справочники сотрудников - дерево, справочник пунктов отгрузки - дерево (страна-регион-область-город-район-улица-дом). Только в этом случае можно получить любой срез данных. Детальность дерева всегда можно наращивать или даже сокращать. Вся отчетность будет сделана однообразно. Никакие гуиды Вас всё равно не спасут, т.к. они не упрощают отчётность. Может у Вас вопрос сквозной нумерации в расп.системе ? Проще назначить непересекающиеся интервалы номеров документов. Обычного INT должно хватить надолго :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 14:26 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
Olk, так это не связано с естественными/сурогатными ключами. Вопрос в том, как организовывать сурогатный ключ: одним полем UUID или составныt (SITE_ID+TYPE_ID+UID) --- Неудобство - например, для ссылки на единицу в штатном расписании вынуждены иметь три поля, вместо одного. Что потом приводит, как минимум, к "нечитаемости" запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 14:32 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
LSV Может у Вас вопрос сквозной нумерации в расп.системе ? Проще назначить непересекающиеся интервалы номеров документов. Обычного INT должно хватить надолго :) Так в этом и вопрос :) Сейчас сквозная нумерация достигается использованием составного PK: т.е. где_завели + код_организации + код_сотрудника. В итоге, если надо сослаться всего на 2х людей надо шесть полей в таблице. Вот меня и колбасит от мысли, что можно вместо шести обойтись двумя :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 14:42 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
> Неудобство - например, для ссылки на единицу в штатном расписании вынуждены > иметь три поля, вместо одного. Ну и? > Что потом приводит, как минимум, к "нечитаемости" запросов. Imho все ровно наоборот: абсолютно логично и удобно. Плюс бесплатные бонусы в виде, например, безгеморройного разделения доступа в репозитории (если он есть или будет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 15:48 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
>> где_завели + код_организации + код_сотрудника. Что-то слишком усложнено ! Почему не код_организации+нумератор_организации. ? Зачем нужен код сотрудника ? деление по интервалам номеров - проще некуда ! Но до 4 млрд.документов для простого INT. BigINT использовать иногда неудобно на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 16:13 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
авторПочему не код_организации+нумератор_организации Потому что с каждой заявкой работает определенный манагер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 17:20 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
А деление по интервалам даже мной не рассматривается в качестве варианта. Не говоря уж о высшей инстанции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 17:27 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
av1975А деление по интервалам даже мной не рассматривается в качестве варианта. А зря. Послушай людей - дельную мысль говорят. По сути какая тебе разница, как оформлен составной ключ? Допустим два значения: M и N. Можно хранить 2 поля, что неудобно из-за громоздкости. А можно слить в одно, например так: M*1000000+N (при условии что это все уложится при возможных N,M) Это будет в одном целочисленном поле и никакие маразмы в виде GUID'ов не нужны. Кроме того из такого значения исходные M и N получаются элементарной арифметической операцией. И еще этот ключ получается "человекочитаемым": вижу запись с кодом 2000345 и сразу опознаю, где она сделана. Кстати, в Sybase ASA есть даже встроенный тип под это - global autoincrement av1975Не говоря уж о высшей инстанции Ну если так, то зачем людям голову морочишь? Обращайся к своей высшей инстанции с этим вопросом. Раз она (инстанция) так хочет, то пусть и решает возникающие из-за этого проблемы. -- http://talk.ru/forum/talk.ru.accounting.development ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 20:11 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
Высшая инстанция только если накладывает вето на мои предложения. Что касается M и N, то их у нас ужо за третий десяток перевалило (и процесс продолжается), а записей м.б. много. Когда-то мы такой вариант прорабатывали, но все пришли к выводу, что "Где"char(5) + "Номер"integer в нашем случае более правилен. UUIDов тогда еще не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 10:54 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
М-ов за 3 десяток... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 10:55 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
Для распределённой базы действительно нужен составной ключ. Для бесконфликтного слияния. Но не нужно его усложнять. У документа всё равно есть реквизиты/атрибуты/авторы. Авторов кстати может быть несколько: составил/утвердил/передал/принял и пр. Если хотите можно в дополнение к числовому составному ключу сделать доп.текстовое поле с номером документа, например: ПН/ГД-000000/2А. Но все привязки внутри системы делать по сост.ключу. Текстовый номер может быть и неуникальный внутри общей сводной базы. Если и это не подходит ... :( Ну тогда используйте 18,19,20 атрибутов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 11:12 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
av1975Высшая инстанция только если накладывает вето на мои предложения. Что касается M и N, то их у нас ужо за третий десяток перевалило (и процесс продолжается), а записей м.б. много. Много - это сколько? 4 миллиарда значений не хватит? Допустим 1000 (Тысяча) распределенных баз (этого вам не хватит?). Каждой диапазон 1000000(миллион) значений (а много у вас таблиц-миллионников?) Итого 1 млрд - прекрасно входит в integer и остается удобным в использовании. -- http://talk.ru/forum/talk.ru.accounting.development ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 15:41 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
Для крупных корпораций 4млрд. - вполне достижимый предел. Я знаю случай достижения 1млн.док-тов всего за 1,5года для одной торговой точки. Так что лимит не должен быть меньше 10млн. док-тов. Всё равно INT вполне подходит для таких нужд. Надо просто иметь возможность переключится на незадействованный интервал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 12:04 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
LSVДля крупных корпораций 4млрд. - вполне достижимый предел. Я знаю случай достижения 1млн.док-тов всего за 1,5года для одной торговой точки. Ну даже если это крупная корпорация, то BIGINT (2 в степени 64 значений) всяко должно хватить. LSV Так что лимит не должен быть меньше 10млн. док-тов. Всё равно INT вполне подходит для таких нужд. И я про то же LSV Надо просто иметь возможность переключится на незадействованный интервал. Элементарно. В ASA даже есть системное событие для этого - по приближению интервала к концу можно что-нибудь сделать. Например отправить e-mail сисадмину ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 12:54 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
Я не буду спорить, такой подход возможен. Но. Лично я предпочитаю разделению по интервалу пользоваться составными ключами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 13:57 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
av1975Я не буду спорить, такой подход возможен. Но. Лично я предпочитаю разделению по интервалу пользоваться составными ключами. Ваше право. В итоге: av1975 Итого, на для ссылок на 8 сущностей надо 18 полей. А зачем было задавать вопрос?: av1975 Как поступать: заводить все поля раздельно или использовать нечто обобщающее (типа GUID)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 16:23 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
Код: plaintext или я в чем-то не прав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 17:32 |
|
||
|
Составные поля, альтернатива
|
|||
|---|---|---|---|
|
#18+
>>Вопрос в том, как организовывать сурогатный ключ: одним полем UUID или составным (SITE_ID+TYPE_ID+UID) Зачем в один ключ совать сразу три поля? Это получается, что ни все зависят друг от друга - каждое поле служит всего лишь для описания ключа. Если эти поля действительно важны, то почему бы их не вынести в отдельную таблицу? PRIMARY_KEY_INFO(UID uinqiueidenitifier PRIMARY KEY, SITE_ID uniqueidentifier REFERENCES .... , TYPE_ID uniqueidenitifier REFERENCES ...... , А во всех остальных таблицах для первичного ключа использовать ссылки на UID из таблицы описаний первичных лючей. А в дальнейшем таблицу информации о первичных ключах можно будет изменить, добавив, например дату модификации, код исполнителя, имя хоста, и вообще, всё, что дуже угодно.... EXECUTOR_ID uniqueidenitifier REFERENCES ....., DATE_OF_CREATION datetime, ...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2004, 08:48 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32807116&tid=1546145]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 379ms |

| 0 / 0 |
