PostGIS डेटाबेस के लिए एक उपयुक्त वैश्विक / सार्वभौमिक विशिष्ट पहचानकर्ता क्या है?


12

मैंने पढ़ा है कि PostgreSQL / PostGIS db में प्राथमिक कुंजी के रूप में OID का उपयोग करना खराब अभ्यास है क्योंकि ऐसे उदाहरण हैं जहां इन्हें रीसेट किया जा सकता है। तार्किक लगता है, लेकिन फिर एक उपयुक्त विकल्प क्या है? मेरा मानना ​​है कि "यूनिवर्सल यूनिक आइडेंटिफ़ायर" यूयूआईडी का उपयोग करने का एक विकल्प है, लेकिन जो बड़े पाठ और संख्या मूल्य बाहर थूकते हैं वह भयानक है।

मेरी स्थिति के लिए बस थोड़ा और पृष्ठभूमि। मेरे पास मेरे सभी स्थानिक टेबल हैं, जिन्हें "gid" नामक फ़ील्ड के साथ बनाया गया है, जो उस तालिका के लिए प्राथमिक कुंजी है और केवल उस तालिका के लिए अद्वितीय है। अब मेरे पास एक मुद्दा है क्योंकि मैं अपनी स्थानिक तालिकाओं (सभी 1 से शुरू होने वाले "gid" फ़ील्ड के साथ और संबंधित जानकारी के साथ एक बड़ी तालिका से संबंधित करना चाहता हूं)। जाहिर है कि मेरे संबंध के लिए मेरे सभी स्थानिक विशेषताओं को काम करने के लिए एक अद्वितीय पहचानकर्ता की आवश्यकता है जो उन्हें एक दूसरे से अलग करता है।

EDITED ने इस चित्र को पीटर्स की टिप्पणी के अनुसार जोड़ा। पीटर यह वह विचार है जो मेरे पास है, यह इसके बारे में जाने का सबसे अच्छा तरीका नहीं हो सकता है या यह अच्छा डीबी डिजाइन भी नहीं हो सकता है। आप जो सोचते हैं, उसमें मेरी दिलचस्पी है।

वैचारिक आरेख

कोई सुझाव?


2
"मैंने पढ़ा है" ... क्या आप एक लिंक प्रदान कर सकते हैं?
कर्क कुक्केंडल

1
यहाँ पृष्ठ के निचले भाग की ओर कई postgresql.org/docs/8.4/static/ddl-system-columns.html में से एक है जिसमें यह उल्लेख किया गया है कि यह मानने के लिए बुरा है कि वे अद्वितीय हैं। इसके अलावा यह अगली कड़ी bytes.com/topic/postgresql/answers/423281-oid-not-not- इस पोस्ट के मूल उत्तर का उल्लेख है जिसमें कहा गया है कि OID उपयोगकर्ता तालिका के लिए पदावनत हैं।
एंडो

1
क्या आप कुछ और ठोस विवरण जोड़ सकते हैं कि आप किस प्रकार का स्कीमा बनाने की कोशिश कर रहे हैं। मेरे लिए यह स्पष्ट नहीं है कि यदि आप विदेशी कुंजी रिश्तों को थोड़ा बदलते हैं, तो आपको विश्व स्तर पर विशिष्ट आईडी की आवश्यकता है।
पीटर आइसेनट्राट

1
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. इससे क्या फर्क पड़ता है कि यूनिक आईडी कैसा दिखता है?
nmtoken

"... लेकिन बड़े पाठ और संख्या मूल्य जो बाहर थूकते हैं वह भयानक है।" नहीं यह नहीं। यह सिर्फ लंबा है, जैसा कि विश्व स्तर पर किसी विशिष्ट आईडी नंबर की आवश्यकता है
jpmc26

जवाबों:


5

मैं अलग-अलग मध्यस्थ तालिकाएं आदि बनाऊंगा buildings_attach, parcels_attachफिर आपको वैश्विक पहचानकर्ता की आवश्यकता नहीं है।


हाय पीटर, प्रतिक्रिया के लिए धन्यवाद। मैं आखिरकार हमारे डीबीए के साथ संपर्क करने में कामयाब रहा (वह दूसरे कार्यालय में आधारित है), उसने वही उपाय सुझाया जो आपने किया था। मुझे उस मार्ग पर जाने में खुशी हो रही है क्योंकि मैं निश्चित रूप से एक डीबी व्यक्ति नहीं हूं (मेरे स्कीमा ड्राइंग से स्पष्ट हो सकता है? -?), लेकिन क्या यह वास्तव में सबसे अच्छा समाधान है? यदि कोई ऐसा लगाव था जो पार्सल फीचर और बिल्डिंग फीचर दोनों के लिए प्रासंगिक था, तो क्या होता है? मेरे उपरोक्त आरेख में मुझे केवल एक बार अनुलग्नक के लिए विवरण दर्ज करने की आवश्यकता होगी, जहां समाधान के रूप में डीबीए ने सुझाव दिया कि मुझे इसे दो अलग-अलग तालिकाओं में दो बार करने की आवश्यकता होगी।
एंडो

1
हां, लेकिन वे जानकारी के दो अलग-अलग टुकड़े हैं, इसलिए उन्हें दो अलग-अलग स्थानों में दर्ज करना ठीक है। यह सिर्फ एक तरह से रिलेशनल डेटाबेस डिज़ाइन है।
पीटर आइजेंट्रूट

पीटर की मदद के लिए धन्यवाद, मैं स्पष्टीकरण की सराहना करता हूं! मैं उस मार्ग से नीचे जाऊंगा। चीयर्स
एंडियो

9

दो समाधान:

1) एक एकल अनुक्रम बनाएं और सभी तालिकाओं को उस अनुक्रम का उपयोग करें, शुरुआत से किया जा सकता है या आप एक आईडी कॉलम बना सकते हैं और अभी इन तालिकाओं को अपडेट कर सकते हैं।

अनुक्रम बनाने के लिए:

CREATE SEQUENCE universal_sequence;

फिर एक मेज:

CREATE TABLE (
colname integer NOT NULL DEFAULT nextval('universal_sequence'));

नई आईडी के साथ मौजूदा टेबल आईडी फ़ील्ड को अपडेट करने के लिए (सभी तालिकाओं के लिए जो आप उसी क्रम का पालन करना चाहते हैं):

UPDATE table1
SET id=nextval('universal_sequence'));

2) दूसरा समाधान: एक अस्थायी अनुक्रम बनाएं और वे एक नया आईडी कॉलम बनाते हुए क्वेरी चलाते हैं।

यहाँ और अधिक: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html


4

सबसे अच्छा विकल्प UUID या GUID है। वे इस कारण से बनाए गए हैं, विश्व स्तर पर अद्वितीय कोई फर्क नहीं पड़ता कि क्या तालिका है। बदसूरत? हां लेकिन वे इस स्थिति के लिए सर्वश्रेष्ठ हैं।

Https://stackoverflow.com/questions/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008 देखें

मैंने ऐसी विधियाँ देखी हैं जहाँ लोग ID1 जैसे कि col1 + somestring + col2 बनाने के लिए तालिका से डेटा का उपयोग करते हैं, मैं वास्तव में इस के खिलाफ ( यहाँ देखें ) का पालन करूंगा । बुद्धिमान आईडी एक बहुत बुरा विचार है।


0

अभिनंदन

आप बड़ी तालिका से आईडी क्यों नहीं लेते हैं और इसके बजाय स्थानिक तालिकाओं में डालते हैं?

यदि स्थानिक तालिकाओं में से एक में एक पंक्ति बड़ी तालिका में कई पंक्तियों से संबंधित है तो मुझे समस्या दिखाई देती है, अन्यथा बड़ी तालिका आईडी पर्याप्त होनी चाहिए, या मैं कुछ याद कर रहा हूं।

/ Nicklas


हाय Nicklas, मैं इसे इस तरह से नहीं कर सकता क्योंकि मेरी स्थानिक विशेषताओं में से एक बड़ी तालिका में 1 या अधिक रिकॉर्ड से संबंधित हो सकता है
एंडियो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.