Я читал, что использование OID в качестве первичного ключа в базе данных postgreSQL / PostGIS является плохой практикой, поскольку существуют случаи, когда их можно сбросить. Звучит логично, но что тогда является подходящей альтернативой? Я полагаю, что есть возможность использовать UUID "универсального уникального идентификатора", но большое значение текста и чисел, которое выплевывается, ужасно.
Просто немного больше предыстории для моей ситуации. У меня есть все мои пространственные таблицы, созданные с полем «gid», которое является первичным ключом для этой таблицы и уникальным только для этой таблицы. У меня возникла проблема, потому что я хочу связать свои пространственные таблицы (все с полем «gid», начинающимся с 1 и с приращением) в одну большую таблицу со связанной информацией. Очевидно, что для того, чтобы мои отношения работали, все мои пространственные особенности нуждаются в уникальном идентификаторе, который отличает их друг от друга.
EDITED Добавил это изображение в соответствии с комментариями Петерса. Питер, эта идея у меня в голове, это может быть не самый лучший способ сделать это, или это может быть даже не хороший дизайн БД. Мне интересно, что вы думаете.
Какие-нибудь советы?
I believe there is an option to use a "Universal Unique Identifer" UUID, but the large text and number value that spits out is horrible.
Почему важно, как выглядит уникальный идентификатор?Ответы:
Я хотел бы создать отдельные таблицы посредника
buildings_attach
,parcels_attach
и т.д. Тогда вам не нужен глобальный идентификатор.источник
Два решения:
1) Создайте одну последовательность и сделайте так, чтобы все таблицы использовали эту последовательность, это можно сделать с самого начала, или вы можете создать столбец идентификаторов и обновить свои таблицы сейчас.
Чтобы создать последовательность:
Тогда стол:
Чтобы обновить поле идентификатора существующей таблицы новыми идентификаторами (сделайте это для всех таблиц, для которых вы хотите следовать той же последовательности):
2) Другое решение: создайте временную последовательность и выполните запрос, создав новый столбец идентификатора.
Подробнее здесь: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html
источник
Наилучшим вариантом является UUID или GUID. По этой причине они построены по всему миру, независимо от того, за каким столом. Гадкий? Да, но они являются лучшими в этой ситуации.
См. Https://stackoverflow.com/questions/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008.
Я видел методы, в которых люди используют данные из таблицы для создания идентификаторов, например, col1 + somestring + col2, я бы действительно против этого (см. Здесь ). Интеллектуальные идентификаторы - действительно плохая идея.
источник
алло
Почему бы вам не взять идентификатор из большой таблицы и вместо этого поместить в пространственные таблицы?
Если одна строка в одной из пространственных таблиц относится к нескольким строкам в большой таблице, я вижу проблему, в противном случае достаточно идентификатора большой таблицы или я что-то упустил.
/ Никлас
источник