Eu li que o uso de OIDs como chave primária em um banco de dados postgreSQL / PostGIS é uma prática ruim, porque há casos em que eles podem ser redefinidos. Parece lógico, mas então qual é uma alternativa adequada? Acredito que haja uma opção para usar um UUID "Universal Unique Identifer", mas o valor grande do texto e número que é cuspido é horrível.
Apenas um pouco mais de fundo para a minha situação. Eu tenho todas as minhas tabelas espaciais criadas com um campo chamado "gid", que é a chave principal dessa tabela e é exclusiva apenas para essa tabela. Agora tenho um problema porque quero relacionar minhas tabelas espaciais (todas com um campo "gid" iniciando em 1 e incrementando) a uma tabela grande com as informações relacionadas. Obviamente, para que meu relacionamento funcione, todos os meus recursos espaciais precisam de um identificador único que os diferencie um do outro.
EDITADO Adicionou esta imagem conforme o comentário de Peters. Peter, esta é a idéia que tenho em minha mente, pode não ser a melhor maneira de fazer isso ou pode até não ser um bom design de banco de dados. Estou interessado no que você pensa.
Alguma dica?
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.
Por que importa a aparência do ID exclusivo?Respostas:
Gostaria de criar tabelas intermediárias separadas
buildings_attach
,parcels_attach
etc. Então você não precisa de um identificador global.fonte
Duas soluções:
1) Crie uma única sequência e faça com que todas as tabelas usem essa sequência; isso pode ser feito desde o início ou você pode criar uma coluna de ID e atualizar suas tabelas agora.
Para criar a sequência:
Então uma mesa:
Para atualizar um campo de ID de tabela existente com novos IDs (faça isso para todas as tabelas que você deseja seguir a mesma sequência):
2) A outra solução: Crie uma sequência temporária e eles executam a consulta criando uma nova coluna de ID.
Mais aqui: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html
fonte
A melhor opção é o UUID ou GUID. Eles são criados por esse motivo, globalmente exclusivos, independentemente da tabela. Feio? Sim, mas eles são os melhores para esta situação.
Consulte /programming/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008
Eu já vi métodos em que as pessoas usam dados da tabela para criar IDs, por exemplo, col1 + somestring + col2, eu realmente recomendaria isso (veja aqui ). IDs inteligentes são uma péssima idéia.
fonte
Hallo
Por que você não pega o ID da mesa grande e coloca as tabelas espaciais?
Se uma linha em uma das tabelas espaciais se relacionar com várias linhas na tabela grande, vejo o problema; caso contrário, o ID da tabela grande deve ser suficiente ou estou faltando alguma coisa.
/ Nicklas
fonte