2012-02-07 14 views
17

के साथ छात्र/कक्षाओं को मॉडल कैसे करें I DynamoDB और NoSQL के साथ अपना रास्ता प्राप्त करने का प्रयास कर रहा हूं।डायनेमोडीबी (नोएसक्यूएल)

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

जो छात्रों को एक विशिष्ट वर्ग में हैं:

मॉडल का अनुसरण सवालों के जवाब देने की जरूरत है?

छात्र कौन सी कक्षाएं लेते हैं? क्वेरी प्रकार प्रति एक:

धन्यवाद

+0

क्या यह होमवर्क है? यदि ऐसा है, तो कृपया इसे इस तरह टैग करें (मतलब होने की कोशिश नहीं कर रहा है, लेकिन केवल जांच कर रहा है)। – Kiril

+5

यह होमवर्क नहीं है; मैंने सबसे आसान रचनात्मक प्रश्न के साथ आने की कोशिश की है जिसे मैं कुछ समय व्यतीत करने के बाद नोएसक्यूएल और गैर-रिलेशनल मॉडल को समझने की कोशिश कर रहा हूं ... –

उत्तर

14

एक बहुत ही सरल सुझाव (रेंज कुंजी के बिना) दो तालिकाओं के लिए किया जाएगा। यह NoSQL डेटाबेस में असामान्य नहीं है।

आपके मामले में हम होगा: (हैश प्रकार) प्राथमिक कुंजी के रूप विशेषता StudentId साथ

  • एक तालिका Student। प्रत्येक आइटम में Attends नामक एक विशेषता हो सकती है, जिसका मूल्य कक्षाओं पर आईडी की सूची थी।
  • एक तालिका Class विशेषता ClassId (हैश प्रकार) प्राथमिक कुंजी के साथ। प्रत्येक आइटम के पास AttendedBy नामक एक विशेषता हो सकती है, जिसका मूल्य छात्रों पर आईडी की सूची थी।

अपने प्रश्नों को निष्पादित करना आसान होगा। एक "उपस्थिति" के साथ डेटाबेस को अद्यतन करना - एक छात्र और कक्षा के बीच संबंध दो अलग-अलग लिखने की आवश्यकता है, प्रत्येक तालिका में से एक।

एक अन्य डिज़ाइन में एक हैश और रेंज प्राथमिक कुंजी के साथ एक तालिका Attends होगी। प्रत्येक रिकॉर्ड एक छात्र की उपस्थिति का प्रतिनिधित्व एक वर्ग में करेगा। हैश विशेषता वर्ग का आईडी हो सकती है और श्रेणी कुंजी छात्र का आईडी हो सकती है। कक्षा और छात्र पर पूरक डेटा तब अन्य तालिकाओं में रहेंगे।

+0

चूंकि (मेरी समझ में) मैं डायनेमो डीबी में कोई हैश कुंजी तक सीमित हूं (नहीं कॉलम इंडेक्स) यह उपयोगकर्ता नाम होना चाहिए और कुछ मनमानी उपयोगकर्ता नहीं होना चाहिए क्योंकि मैं "प्रश्न" –

+0

पर अपना नाम प्रदान करते समय छात्र की कक्षाएं प्राप्त करना चाहता हूं हां, यदि आपके पास प्रत्येक छात्र के लिए एक अद्वितीय उपयोगकर्ता नाम है, तो यह उपयोग करने के लिए सही पहचानकर्ता है । –

+0

क्या इसे डी-सामान्यीकरण माना जाता है? –

-1

दो अमेज़न DynamoDB टेबल

निम्न उदाहरण अमेज़न DynamoDB में संग्रहीत डेटा की दो हाइव टेबल नक्शे शामिल होने के लिए। फिर यह उन दो तालिकाओं में शामिल होने को बुलाता है। शामिल होने पर क्लस्टर पर गणना की जाती है और लौटा दी जाती है। अमेज़ॅन डायनेमो डीबी में शामिल नहीं होता है। यह उदाहरण ग्राहकों की एक सूची देता है और उन ग्राहकों के लिए उनकी खरीदारी करता है जिन्होंने दो से अधिक ऑर्डर दिए हैं।

CREATE EXTERNAL TABLE hive_purchases(customerId bigint, total_cost double, items_purchased array<String>) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
TBLPROPERTIES ("dynamodb.table.name" = "Purchases", 
"dynamodb.column.mapping" = "customerId:CustomerId,total_cost:Cost,items_purchased:Items"); 

CREATE EXTERNAL TABLE hive_customers(customerId bigint, customerName string, customerAddress array<String>) 
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Customers", 
"dynamodb.column.mapping" = "customerId:CustomerId,customerName:Name,customerAddress:Address"); 

Select c.customerId, c.customerName, count(*) as count from hive_customers c 
JOIN hive_purchases p ON c.customerId=p.customerId 
GROUP BY c.customerId, c.customerName HAVING count > 2; 
+4

यह डायनेमो डीबी नहीं है, और डेटा मॉडलिंग के बारे में सवाल का जवाब नहीं देता है – Tyrsius

संबंधित मुद्दे