2016-06-06 2 views
0

Может ли кто-нибудь мне посоветоваться по типу данных SQL, который должен использоваться для DICOM UID, 1.2.840.113986.3.2702661254.20150220.144310.372.4424 в качестве образца. Я хотел бы использовать его как первичный ключ.Тип данных PostgreSQL

+0

Почему бы не использовать 'text'? – sebenalern

+0

Просто ищет лучший вариант, является ли текст наиболее эффективным? –

+3

Возможно, это не очень хорошая идея для первичного ключа. Вам придется использовать его как 'TEXT', определенно проиндексированный. Здесь нет никакой эффективности, потому что 'TEXT' - ваш единственный вариант. –

ответ

0

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

В то время как лучший встроенный вариант - это «текст», если смотреть на предоставленный пример, вы, скорее всего, получите значительную выгоду от использования и специального использования, но для этого потребуется писать код.

Последним вариантом является использование суррогатного ключа для этих данных. Для этого вы создадите таблицу, содержащую столбец «bigserial», а затем столбец «текст». Столбец «текст» будет содержать длинную форму значения, как показано выше, а столбец «bigserial» предоставит целое число (64-битное с bigserial, 32 бит, если вы используете вместо него «serial»), которое вы затем использовали бы в все ваши таблицы, а не длинную форму.

+0

Почему нужно реализовать это сложным способом? Какая польза от этого будет получена. И что стоит против использования обычных (переносных) типов данных, таких как char/varchar. –

+0

Использование пользовательского типа данных потребует меньше места и будет быстрее. –

+0

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

Смежные вопросы