powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Primary key не integer
61 сообщений из 61, показаны все 3 страниц
Primary key не integer
    #36374090
Who am I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы услышать аргументы о том, насколько плохо и плохо ли вообще делать primary key не числовым.

Допустим, есть сущность. В моем случае это филиал банка.

Я знаю наверняка что у филиала есть четырехсимвольный id. Например 0000 или 0001.

Что мне мешает сделать char(4) и сделать его primary key?

Какие у этого решения минусы?

Меня всегда напрягало создание дополнительного "ненужного" id, когда есть уникальное поле.
...
Рейтинг: 0 / 0
Primary key не integer
    #36374106
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а меня не напрягает
но я не против вашей мысли
лишь бы уникальное не перестало быть таковым однажды
С уважением, Naf
...
Рейтинг: 0 / 0
Primary key не integer
    #36374113
Who am I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.
...
Рейтинг: 0 / 0
Primary key не integer
    #36374131
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Who am IВопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.возможно да, например для таблиц служащих отношением многие-ко-многим
но и такие таблицы могут "превратится в сущности", но редко
...
Рейтинг: 0 / 0
Primary key не integer
    #36374145
Who am I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafа меня не напрягает
но я не против вашей мысли
лишь бы уникальное не перестало быть таковым однажды
С уважением, Naf

В таком случае в качестве ID можно взять то, что на текущий момент в таблице объявлено unique, а id вообще выкинуть.

Аргументы против?
...
Рейтинг: 0 / 0
Primary key не integer
    #36374273
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Who am IХотелось бы услышать аргументы о том, насколько плохо и плохо ли вообще делать primary key не числовым.

Допустим, есть сущность. В моем случае это филиал банка.

Я знаю наверняка что у филиала есть четырехсимвольный id. Например 0000 или 0001.

Что мне мешает сделать char(4) и сделать его primary key?

Какие у этого решения минусы?

Меня всегда напрягало создание дополнительного "ненужного" id, когда есть уникальное поле.
CHAR(4) - ничего не мешает, VARCHAR(255) - мешает то что это огромное поле придется везде за собой таскать.

В таблице многие ко многим PKем и является (id_entity1, id_entity2), ИМХО.
...
Рейтинг: 0 / 0
Primary key не integer
    #36374286
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Who am INafа меня не напрягает
но я не против вашей мысли
лишь бы уникальное не перестало быть таковым однажды
С уважением, Naf

В таком случае в качестве ID можно взять то, что на текущий момент в таблице объявлено unique, а id вообще выкинуть.

Аргументы против?как и говорил, может стать однажды не уникальным или измениться, от ситуации зависит
это известный спор Естественные и суррогатные ключи
...
Рейтинг: 0 / 0
Primary key не integer
    #36374306
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно понимать, что зачастую БД не является первичным регистром, а лишь отражает состояние некой внешней системы, в которой могут быть исключения из правил. А PK не терпит никаких исключений.

В объектных БД каждая запись в БД имеет уникальный ID объекта независимо от наличия PK на таблице. Это современная тенденция.
...
Рейтинг: 0 / 0
Primary key не integer
    #36374434
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Who am IВопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.Бессмысленно платить зарплату таким горе-архитекторам
...
Рейтинг: 0 / 0
Primary key не integer
    #36374494
Who am I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVWho am IВопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.Бессмысленно платить зарплату таким горе-архитекторам

Отличный аргумент, только бесполезный.

Максимум что вы здесь сделали, это попытку поднять свое эго за счет принижений качеств другого человека. =)

Может быть все же вернемся к конструктивному разговору?
...
Рейтинг: 0 / 0
Primary key не integer
    #36374540
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы PK был обязательным, в запросе CREATE TABLE вам бы пришлось всегда указывать PK. Если PK не нужен, не делай его.
...
Рейтинг: 0 / 0
Primary key не integer
    #36374568
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
использовую UUID.
Вполне себе хороший идентификатор.
...
Рейтинг: 0 / 0
Primary key не integer
    #36374857
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Who am I wrote:
> Хотелось бы услышать аргументы о том, насколько плохо и плохо ли вообще
> делать primary key не числовым.

Ни плохо, и ни хорошо. Равнозначно с числовыми идентификаторами.
На самом деле пофигу, какой идентификатор, главное, чтобы он
был уникальными. (специфики конкретных СУБД тут мы не рассматриваем).

> Какие у этого решения минусы?

по большому счёту, никаких.

> Меня всегда напрягало создание дополнительного "ненужного" id, когда
> есть уникальное поле.

В общем, правильно напрягало, если конечно это ДЕЙСТВИТЕЛЬНО уникальное
поле.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Primary key не integer
    #36374893
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> насколько плохо и плохо ли вообще делать primary key не числовым.

Теоретически тип данных не играет роли. Практически - компактнее и проще оперировать числами.

> Я знаю наверняка что у филиала есть четырехсимвольный id.

Типичная ошибка. Вы можете что-то знать только о данных, источник которых контролируете. Если где-то в какой-то другой базе данных некие данные имеют какой-то идентификатор, то в своей базе данных вы можете использовать этот идентификатор только и исключительно в виде <источник данных>...<идентификатор экземпляра>...<дата регистрации>.
...
Рейтинг: 0 / 0
Primary key не integer
    #36374925
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Who am IАргументы против? унифицировав имя pk и введя его в ранг обязательных в любых таблицах, вы облегчаете вашим последователям понимание вашего кода.
...
Рейтинг: 0 / 0
Primary key не integer
    #36374926
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
да, и при написании запросов не надо думать "а с чем связать?"
...
Рейтинг: 0 / 0
Primary key не integer
    #36374927
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Who am IЯ знаю наверняка что у филиала есть четырехсимвольный id. Например 0000 или 0001. сегодня это так, но где гарантия что так же будет и завтра?
...
Рейтинг: 0 / 0
Primary key не integer
    #36374937
Vika Vinner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНиспользовую UUID.
Вполне себе хороший идентификатор.

Вот чтобы я не делала точно - так это назначала GUID (UUID) ключом в VLDB. На одной колоночке в 6,000,000++ строк только ключ занял 650 GB.... а мог быть всего 150 GB.... Дорого...
...
Рейтинг: 0 / 0
Primary key не integer
    #36374945
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Vika VinnerВот чтобы я не делала точно - так это назначала GUID (UUID) ключом в VLDB. На одной колоночке в 6,000,000++ строк только ключ занял 650 GB.... а мог быть всего 150 GB.... Дорого... можно узнать формулу, по которой считали?
...
Рейтинг: 0 / 0
Primary key не integer
    #36374947
Vika Vinner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseможно узнать формулу, по которой считали?

Что - деньги или поле-размер? :)
...
Рейтинг: 0 / 0
Primary key не integer
    #36374953
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Vika VinnereNoseможно узнать формулу, по которой считали?

Что - деньги или поле-размер? :) вот это:

GUID (UUID) ключ на одной колоночке в 6,000,000++ строк только занял 650 GB
...
Рейтинг: 0 / 0
Primary key не integer
    #36374960
Vika Vinner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллега, снимите свой вопрос... Не к лицу..
...
Рейтинг: 0 / 0
Primary key не integer
    #36374968
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Vika Vinner,

"++" - это еще два раза по "000"?
...
Рейтинг: 0 / 0
Primary key не integer
    #36374971
Vika Vinner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет это ещё десять баз данных куда это всё реплицировалось ...
...
Рейтинг: 0 / 0
Primary key не integer
    #36374975
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
697,932,185,600/16 = 43,620,761,600
...
Рейтинг: 0 / 0
Primary key не integer
    #36375026
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Who am IВопрос с ходу: всегда ли нужен primary key?

Да.

Who am I
Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.

Можно привести пример таких ситуаций ?

Я видел в своей практике только один случай, когда не нужен был первичный ключ - в таблице, которая была предназначена для временного хранения данных, поступавших из внешней системы для хранения в БД. Данные из этой таблицы приводились потом в порядок и записывались в БД. Эти данные из внешней системы были плохого качества (дублированные), поэтому первичный ключ в этой ситуации был не нужен.

А какие ситуации были у вас ?
...
Рейтинг: 0 / 0
Primary key не integer
    #36375124
alexs0ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vika Vinner
Вот чтобы я не делала точно - так это назначала GUID (UUID) ключом в VLDB. На одной колоночке в 6,000,000++ строк только ключ занял 650 GB.... а мог быть всего 150 GB.... Дорого...

Integer занимает на 32 разрядных системах - 32 бита, на 64 разрядных - 64 бита. Guid занимает 128 бит. Считаем на 6 млн строк при использовании Guid у нас уходит 768000000 бит или 96000000 байт~91 мб.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375151
пролетевший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Who am IВопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.
Ну некоторые программы ( MS Access например ) просто отказываются работать с таблицами без primary key. Это вообще один из основных принципов теории реляционных баз данных.
А вообще топикстартера должны уволить за нелояльность, поскольку он не верит что банк где он работает сможет вырасти и иметь больше 10000 филиалов ( это только один пример почему такой ключ может привести к проблемам :-)
...
Рейтинг: 0 / 0
Primary key не integer
    #36375166
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пролетевшийWho am IВопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.
Ну некоторые программы ( MS Access например ) просто отказываются работать с таблицами без primary key. Это вообще один из основных принципов теории реляционных баз данных.
А вообще топикстартера должны уволить за нелояльность, поскольку он не верит что банк где он работает сможет вырасти и иметь больше 10000 филиалов ( это только один пример почему такой ключ может привести к проблемам :-)
Для таких таблиц, как банки индексы не нужны.Они будут давать только лишние тормоза
...
Рейтинг: 0 / 0
Primary key не integer
    #36375200
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пролетевшийА вообще топикстартера должны уволить за нелояльность, поскольку он не верит что банк где он работает сможет вырасти и иметь больше 10000 филиалов ( это только один пример почему такой ключ может привести к проблемам :-)
Его хоть за лояльность, а вас, по видимому, за недостаток знаний? :)
CHAR(4) - в худшем случае 4 байта. В лучшем 8, а то и больше байт. Сколько в них разных комбинацией поместится сами посчитаете? :)
...
Рейтинг: 0 / 0
Primary key не integer
    #36375273
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vika VinnerОКТОГЕНиспользовую UUID.
Вполне себе хороший идентификатор.

Вот чтобы я не делала точно - так это назначала GUID (UUID) ключом в VLDB. На одной колоночке в 6,000,000++ строк только ключ занял 650 GB.... а мог быть всего 150 GB.... Дорого...
6,000,000 * 16 байт = 96000000 байт ~ 91 мегабайт.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375312
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaпролетевшийWho am IВопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.
Ну некоторые программы ( MS Access например ) просто отказываются работать с таблицами без primary key. Это вообще один из основных принципов теории реляционных баз данных.
А вообще топикстартера должны уволить за нелояльность, поскольку он не верит что банк где он работает сможет вырасти и иметь больше 10000 филиалов ( это только один пример почему такой ключ может привести к проблемам :-)
Для таких таблиц, как банки индексы не нужны.Они будут давать только лишние тормозаа индексы-то тут причём? разговор про первичный ключ
...
Рейтинг: 0 / 0
Primary key не integer
    #36375336
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSeVaпролетевшийWho am IВопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.
Ну некоторые программы ( MS Access например ) просто отказываются работать с таблицами без primary key. Это вообще один из основных принципов теории реляционных баз данных.
А вообще топикстартера должны уволить за нелояльность, поскольку он не верит что банк где он работает сможет вырасти и иметь больше 10000 филиалов ( это только один пример почему такой ключ может привести к проблемам :-)
Для таких таблиц, как банки индексы не нужны.Они будут давать только лишние тормозаа индексы-то тут причём? разговор про первичный ключ
А, что первичный ключ индексом не является?
...
Рейтинг: 0 / 0
Primary key не integer
    #36375385
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А, что первичный ключ индексом не является?

Нет.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375526
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формально - contraint, но уникальность достигается за счет автоматического создания индекса(по крайней мере, для MS SQL). Вопрос был поставлен не совсем точно.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375553
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> по крайней мере, для MS SQL

Нет смысла рассматривать диалекты. Оперируйте стандартами.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375561
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
alexs0ffInteger занимает на 32 разрядных системах - 32 бита, на 64 разрядных - 64 бита. Guid занимает 128 бит. Считаем на 6 млн строк при использовании Guid у нас уходит 768000000 бит или 96000000 байт~91 мб.
ОКТОГЕН6,000,000 * 16 байт = 96000000 байт ~ 91 мегабайт.

ну, заклевали девушку...

Вика, я извиняюсь!
...
Рейтинг: 0 / 0
Primary key не integer
    #36375565
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
guest_20040621> А, что первичный ключ индексом не является?

Нет. является. но "as is", без дополнительных расходов.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375608
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> является. но "as is", без дополнительных расходов.

Отослать к букварям?
...
Рейтинг: 0 / 0
Primary key не integer
    #36375617
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
guest_20040621> является. но "as is", без дополнительных расходов.

Отослать к букварям? нет, показать РЕАЛЬНУЮ субд, где праймари ки не является индесом.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375640
Vika Vinner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseВика, я извиняюсь!
Коллеги, ключевым словом было VLDB если не было Сразу очевидным. Считать мега - кило - гига - это в принципе конечно хорошо. И никто - обратите внимание - никто не посчитал сколько такой же объект возьмёт будь он интеджер. ... И сравнить отношение. Если таких табличек пару килов на распределённой системе ... И диски на которых они стоят Tier I - там и получится $$$$$... В общем нехорошо если разработчики не обратили внимания на такую мелочь своевременно.. Предлагала же вопрос снять ... С самого начала Цифирьки были мои весьма условные... Так для сведения
...
Рейтинг: 0 / 0
Primary key не integer
    #36375662
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Vika Vinner,

Вика, вот ненадо :)
Вери лардж дэйтабэйз на то и "вери лардж", что заранее известны порядки количества строк.
Если нет специального ограничения по ресурсам (а это редкость при очень больших объемах), то int64 даёт таки преемущества.
Да, размер int64 больше GUID(UUID), но и диапазон по-более. Есть резерв для непредвиденного роста объемов.
А еще надо учитывать что INT (и его вариации) - сами по себе ключи, ненадо всяких суррогатов в виде хэшей (как в string-ориентированных ключах) и еще (самое главное) - GUID всё-таки вероятностный ключ...
Вероятность мала, конечно, но ... она есть!
И если база реплицируется без учета этого то возможна коллизия... вроде не должны были, а они совпали.
Парадокс? нет. особенности гуида.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375674
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseguest_20040621> является. но "as is", без дополнительных расходов.

Отослать к букварям? нет, показать РЕАЛЬНУЮ субд, где праймари ки не является индесом.А действительно, есть ли СУБД, в которых PK != индекс? А если есть - почему?
...
Рейтинг: 0 / 0
Primary key не integer
    #36375676
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseVika Vinner,

Вика, вот ненадо :)
Вери лардж дэйтабэйз на то и "вери лардж", что заранее известны порядки количества строк.
Если нет специального ограничения по ресурсам (а это редкость при очень больших объемах), то int64 даёт таки преемущества.
Да, размер int64 больше GUID(UUID), но и диапазон по-более. Есть резерв для непредвиденного роста объемов.
А еще надо учитывать что INT (и его вариации) - сами по себе ключи, ненадо всяких суррогатов в виде хэшей (как в string-ориентированных ключах) и еще (самое главное) - GUID всё-таки вероятностный ключ...
Вероятность мала, конечно, но ... она есть!
И если база реплицируется без учета этого то возможна коллизия... вроде не должны были, а они совпали.
Парадокс? нет. особенности гуида.
Есть различные методы выработки. Есть вероятностный, а естьпо mac адресам+ время + соль.
Если в системе совпадают эти адреса, это проблемы того, кто пользуется дешёвым китайским оборудованием.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375682
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Senya_LА действительно, есть ли СУБД, в которых PK != индекс? есть :) БерклиДБ (в оригинале).

Senya_LА если есть - почему? Потому что такова изначальная идеология: пара индекс-хэш.

Но это не для guest_20040621, он пусть сам думает.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375684
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
ОКТОГЕНЕсть различные методы выработки. Есть вероятностный, а естьпо mac адресам+ время + соль.
Если в системе совпадают эти адреса, это проблемы того, кто пользуется дешёвым китайским оборудованием. так всё дело в том, то гуиды не гарантируют уникальность вообще.
в определении честно указано, то "вероятность совпадения мала", но она всё-таки есть.
как я это понимаю, чем больше объем таблицы (в строках) - тем больше вероятность напороться на дубль (в пределах одной железки врядли, но если идет репликация с нескольких серверов...).
и уж тем более, если заранее известно, что база - vldb - то использовать гуиды опасно.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375693
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
eNoseДа, размер int64 больше GUID(UUID), но и диапазон по-более. Есть резерв для непредвиденного роста объемов. это не читать, это я пиво пью :) стормозил :)
...
Рейтинг: 0 / 0
Primary key не integer
    #36375711
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNoseесть :) БерклиДБ (в оригинале).Надо же... Поверю на слово, хотя это как-то иррационально. Хотя, может быть и ближе к "чистой науке" :)
eNoseeNoseДа, размер int64 больше GUID(UUID), но и диапазон по-более. Есть резерв для непредвиденного роста объемов. это не читать, это я пиво пью :) стормозил :)А я вже начал сомневаться в адекватности восприятия. И не напрасно
...
Рейтинг: 0 / 0
Primary key не integer
    #36375728
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose,
Если в системе совпадают эти адреса, это проблемы того, кто пользуется дешёвым китайским оборудованием.
Вы читать умеете?
...
Рейтинг: 0 / 0
Primary key не integer
    #36375735
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
ОКТОГЕНeNose,
Если в системе совпадают эти адреса, это проблемы того, кто пользуется дешёвым китайским оборудованием.
Вы читать умеете?

авторИ если база реплицируется без учета этого то возможна коллизия...

умею.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375738
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
ОКТОГЕН,

мак-адрес сужает диапазон уникальных адресов.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375751
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
ОКТОГЕН,

и это ... мак-адрес - это 48 (иногда 64) бита. так что уникальность как бы ограничена.
причем в случае 64-х битного она такая же, как и у int64.
и это несмотря на то что GUID весит 128 бит.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375856
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> нет, показать РЕАЛЬНУЮ субд, где праймари ки не является индесом

Я не знаю таких СУБД. И?

Расскажите, где в стандарте упоминаются неявные индексы и формулируются требования к ним.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375935
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose, ну если вам мало
18446744073709551616 строк в пределах одного сервера,
то я не знаю что и предложить.
Вы можете использовать тип NUMERIC без ограничений на точность.
В PostgreSQL таковой имеется.
...
Рейтинг: 0 / 0
Primary key не integer
    #36375951
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНeNose, ну если вам мало
18446744073709551616 строк в пределах одного сервера,
то я не знаю что и предложить.
Вы можете использовать тип NUMERIC без ограничений на точность.
В PostgreSQL таковой имеется.
Проверил, 510 значное число вполне себе сохраняется.
...
Рейтинг: 0 / 0
Primary key не integer
    #36378355
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying DutchmanWho am IВопрос с ходу: всегда ли нужен primary key?

Да.


В реляционной модели данных PK нужны, в противном случае будет невозможно применять теорию реляционных БД.

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

Короче, разделяйте теоретическую модель и техническую реализацию.
...
Рейтинг: 0 / 0
Primary key не integer
    #36378359
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНОКТОГЕНeNose, ну если вам мало
18446744073709551616 строк в пределах одного сервера,
то я не знаю что и предложить.
Вы можете использовать тип NUMERIC без ограничений на точность.
В PostgreSQL таковой имеется.
Проверил, 510 значное число вполне себе сохраняется.

Да вы посчитайте, сколько времени уйдёт на вставку такого колиества записей. Полагаю вопрос про запас отпадёт сам собой.
...
Рейтинг: 0 / 0
Primary key не integer
    #36378718
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab, да я-то понимаю.
Просто зачем выдумывать проблемы там, где их нет.
Мало какая база содержит миллиардные таблицы(предел некоторые SQL серверов, между
прочим).
...
Рейтинг: 0 / 0
Primary key не integer
    #36378816
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё добавлю...

Немаловажно время и сложность генерации ключа. Если целое число, это грубо говоря i++ (плюс блокировка разделяемого ресурса и время от времени сохранение в БД), то GUID вычисяется сложнее. Вероятная неуникальность в пределах одной БД разрешается на уровне PK - если с новым GUID PK нарушается, ну создаём новый GUID.

В оракле GUID широко используются для генерации Type ID и Object ID. Причём даже в распределённых БД я не слыхал о проблемах связанных с совпадением GUID во время репликации, но и в VLDB я бы их использовать не стал.

Расчитывать на использование всего множества значений MAC адресов или GUID не приходится. Часть значений либо остануться навсегда зарезервированными (как например коды производителей в MAC адресах), часть будет безвозвратно потеряна (если в алгоритме GUID используется время).

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

PK как правило используются для поиска записей и индексируются. Сравнение длинных ключей во время поска идёт чуток дольше. Индекс с длинным ключём занимает больше места в БД и в кэше.

Но всё это дело десятое .

Если реализация БД будет сильно отличаться от модели, расходы на её сопровождение быстро превысят экономию на дисках. Сейчас терабайтным диском или многотерабайтным RAID'ом в домашнем ПК мало кого удивишь.
...
Рейтинг: 0 / 0
Primary key не integer
    #36379480
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Who am ILSVWho am IВопрос с ходу: всегда ли нужен primary key? Я видел ситуации, когда наличие pk в таблице было просто бессмысленным.Бессмысленно платить зарплату таким горе-архитекторам Отличный аргумент, только бесполезный.Он бесполезный для тех, кто не знает второй нормальной формы. Нафига нужна запись, которую невозможно однозначно идентифицировать (нет уникального признака) ?
...
Рейтинг: 0 / 0
Primary key не integer
    #36380361
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реляционная алгебра оперирует множествами, а множество это набор уникальных элементов. Если мы говорим о реляционном отношении, то подразумеваем, что у него есть PK. В противном случае это не отношение.
ER моделирование и тем более функциональная декомпозиция оперируют отношениями.

В объектных БД каждый объект идентифицируем и не обязан иметь PK.

Создавать PK в БД не обязательно.
...
Рейтинг: 0 / 0
61 сообщений из 61, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Primary key не integer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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