PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

दुनिया में मेरे कई रिश्ते क्यों होंगे?

किसी फ़ील्ड में डेटा संरचना एम्बेड करना साधारण मामलों के लिए काम कर सकता है लेकिन यह आपको रिलेशनल डेटाबेस का लाभ लेने से रोकता है। रिलेशनल डेटाबेस आपके डेटा को खोजने, अपडेट करने, हटाने और सुरक्षित रखने के लिए डिज़ाइन किए गए हैं। अपने स्वयं के wad-o-data (सरणी, JSON, xml आदि) वाले एम्बेडेड फ़ील्ड के साथ, आप इसे स्वयं करने के लिए सभी कोड लिखना समाप्त कर देते हैं।

ऐसे मामले हैं जहां एम्बेडेड फ़ील्ड अधिक उपयुक्त हो सकता है, लेकिन इस प्रश्न के लिए एक उदाहरण के रूप में मैं एक ऐसे मामले का उपयोग करूंगा जो संबंधित तालिका दृष्टिकोण के लाभों पर प्रकाश डालता है।

एक उपयोगकर्ता की कल्पना करें और ब्लॉग के लिए उदाहरण पोस्ट करें।

एक एम्बेडेड पोस्ट समाधान के लिए, आपके पास कुछ इस तरह की एक तालिका होगी (psuedocode - ये शायद मान्य ddl नहीं हैं):

create table Users {
id int auto_increment,
name varchar(200)
post text[][],
}

संबंधित तालिकाओं के साथ, आप कुछ ऐसा करेंगे

create table Users {
id int auto_increment,
name varchar(200)
}
create table Posts {
id auto_increment,
user_id int,
content text
}

ऑब्जेक्ट रिलेशनल मैपिंग (ORM) टूल :एम्बेडेड पोस्ट के साथ, आप उपयोगकर्ता को पोस्ट जोड़ने, मौजूदा पोस्ट के माध्यम से नेविगेट करने, उन्हें मान्य करने, उन्हें हटाने आदि के लिए मैन्युअल रूप से कोड लिखेंगे। अलग टेबल डिज़ाइन के साथ, आप ActiveRecord (या जो भी ऑब्जेक्ट रिलेशनल सिस्टम आप का लाभ उठा सकते हैं) उपयोग कर रहे हैं) इसके लिए उपकरण जो आपके कोड को अधिक सरल रखना चाहिए।

लचीलापन :कल्पना कीजिए कि आप पोस्ट में दिनांक फ़ील्ड जोड़ना चाहते हैं। आप इसे एक एम्बेडेड फ़ील्ड के साथ कर सकते हैं, लेकिन आपको अपने सरणी को पार्स करने के लिए कोड लिखना होगा, फ़ील्ड को मान्य करना होगा, मौजूदा एम्बेडेड पोस्ट आदि को अपडेट करना होगा। अलग तालिका के साथ, यह बहुत आसान है। इसके अलावा, मान लें कि आप अपने सिस्टम में एक संपादक जोड़ना चाहते हैं जो सभी पदों को स्वीकृत करता है। संबंधपरक उदाहरण के साथ यह आसान है। ActiveRecord के साथ 'बॉब' द्वारा संपादित सभी पोस्ट खोजने के लिए एक उदाहरण के रूप में, आपको बस आवश्यकता होगी:

Editor.where(name: 'Bob').posts

एम्बेडेड पक्ष के लिए, आपको डेटाबेस में प्रत्येक उपयोगकर्ता के माध्यम से चलने के लिए कोड लिखना होगा, उनकी प्रत्येक पोस्ट को पार्स करना होगा और संपादक क्षेत्र में 'बॉब' देखना होगा।

प्रदर्शन :कल्पना करें कि आपके पास औसतन 100 पोस्ट वाले 10,000 उपयोगकर्ता हैं। अब आप एक निश्चित तिथि पर किए गए सभी पोस्ट ढूंढना चाहते हैं। एम्बेडेड फ़ील्ड के साथ, आपको प्रत्येक रिकॉर्ड के माध्यम से लूप करना होगा, सभी पदों की संपूर्ण सरणी को पार्स करना होगा, तिथियां निकालना होगा और जो आप चाहते हैं उसे दोबारा जांचें। यह सीपीयू और डिस्क i/0 दोनों को चबाएगा। डेटाबेस के लिए, आप आसानी से दिनांक फ़ील्ड को अनुक्रमित कर सकते हैं और प्रत्येक उपयोगकर्ता से प्रत्येक पोस्ट को पार्स किए बिना सटीक रिकॉर्ड निकाल सकते हैं।

मानक :विक्रेता विशिष्ट डेटा संरचना का उपयोग करने का अर्थ है कि आपके एप्लिकेशन को किसी अन्य डेटाबेस में ले जाना एक दर्द हो सकता है। पोस्टग्रेज़ में डेटा प्रकारों का एक समृद्ध सेट प्रतीत होता है, लेकिन वे MySQL, Oracle, SQL सर्वर आदि के समान नहीं हैं। यदि आप मानक डेटा प्रकारों के साथ चिपके रहते हैं, तो आपके पास बैकएंड को स्वैप करने में बहुत आसान समय होगा।

ये मुख्य मुद्दे हैं जिन्हें मैं ऊपर से देखता हूं। मैंने यह गलती की है और इसके लिए कीमत चुकाई है, इसलिए जब तक कोई सुपर-सम्मोहक कारण न हो, अन्यथा करें, मैं अलग तालिका का उपयोग करूंगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मेरे कस्टम टेक्स्ट सर्च कॉन्फ़िगरेशन के लिए थिसॉरस डिक्शनरी को सही तरीके से कैसे बनाएं

  2. पोस्टग्रेज टेबलफंक क्रॉसस्टैब () के साथ शून्य व्यक्तिगत मान लौटाना

  3. PostgreSQL में किसी तालिका के स्कीमा विवरण को क्वेरी करें?

  4. MYSQL में शर्तों के साथ अद्वितीय बाधा

  5. PostgreSQL में पैटर्न मिलान करते समय स्ट्रिंग से कैसे बचें