ToDo सूची के लिए डेटाबेस स्कीमा


15

मैं PHP, MySQL, Jquery templating और JSON के साथ एक बहुत ही सरल टूडू सूची एप्लिकेशन बनाने की कोशिश कर रहा हूं ... हालांकि, मेरा स्कीमा JSON में चीजों को जटिल करने के लिए लगता है।

इसे करने का सबसे अच्छा तरीका क्या है?

  1. प्रत्येक सूची के लिए एक नई तालिका, जिसमें आइटम हैं।

या

  1. सूचियों के लिए एक तालिका, और किसी भी तरह से शामिल होने वाली वस्तुओं के लिए एक तालिका? क्योंकि मैंने यह कोशिश की है और यह ऐसा करने का सही तरीका नहीं लगता है? उदाहरण http://jsfiddle.net/Lto3xuhe/

आप कितनी सूचियों का समर्थन करना चाहेंगे?

अधिकतम 100. सीमाएं क्या हैं?
कोडस्लो

21
जिस तरह से एक dba मायने रखता है। एक सामान्य व्यक्ति को "1,2,3,4 ... 10" के रूप में दस तक गिना जाता है। एसी प्रोग्रामर "0,1,2,3, ... 9" के रूप में दस तक गिना जाता है। एक dba मायने रखता है "शून्य, एक, कई।"

जवाबों:


66

वहाँ एक मजाक है जो मैंने कुछ समय पहले सुना था:

प्रश्न 10 में एक बेसिक कोडर कैसे गिना जाता है?
एक 1,2,3,4,5,6,7,8,9,10

Q एक सी कोडर 10 तक कैसे गिना जाता है?
एक 0,1,2,3,4,5,6,7,8,9

Q DBA की गिनती 10 तक कैसे होती है?
एक 0,1, कई

इस मज़ाक के पीछे की सच्चाई यह है कि एक बार डेटाबेस संरचना (कॉलम या टेबल) में एक ही चीज़ के दो (या अधिक) होने पर आप इसे गलत कर रहे हैं।

ऐसा स्कीमा जो दिखता है:

+----------+
| id       |
| name     |
| phone1   |
| phone2   |
|          |
+----------+

गलत है क्योंकि अगर किसी के पास तीसरा फोन नंबर होगा तो आप उसे कहां रखेंगे?

वही तालिकाओं पर लागू होता है। इसकी एक खराब चीज स्कीमा को रनटाइम पर संशोधित करने के लिए है, जो "प्रत्येक सूची के लिए नई तालिका" का अर्थ है। (संबंधित: MVC4: रन टाइम में मॉडल कैसे बनाएं? )

और इस प्रकार, समाधान एक टूडू सूची बनाना है जिसमें दो तालिकाओं का समावेश है। आपके पास दो चीजें हैं - सूचियां और आइटम।

तो, एक तालिका संरचना है कि यह दर्शाता है:

+----------+       +-------------+
| List     |       | Task        |
+----------+       +-------------+
| id (pk)  <---+   | id (pk)     |
| name     |   +---+ listid (fk) |
|          |       | desc        |
|          |       |             |
+----------+       +-------------+

सूची में एक आईडी (सूची के लिए प्राथमिक कुंजी), और एक नाम है। कार्य में एक आईडी (प्राथमिक कुंजी) एक सूची (एक विदेशी कुंजी) और कार्य का विवरण है। विदेशी कुंजी किसी अन्य तालिका की प्राथमिक कुंजी से संबंधित है।

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


अब, यह सब एक रिलेशनल डेटाबेस के रूप में इसे लिखने से संबंधित है। लेकिन वहाँ डेटाबेस का एकमात्र प्रकार नहीं है। यदि आप एक सूची को एक दस्तावेज मानते हैं तो दस्तावेज स्टाइल नोस्कल डेटाबेस भी एक दृष्टिकोण प्रदान कर सकता है जो गलत नहीं है।

जबकि मैं इसमें बहुत दूर नहीं जा रहा हूँ, वहाँ सोफे पर टूडू सूचियों के लिए कई ट्यूटोरियल हैं। एक ऐसा जो खोज के साथ आया था , काउचडीबी में एक सरल कार्य सूची है । काउचडब विकी में एक और शो: टू-डू लिस्ट के लिए प्रस्तावित स्कीम

एक सोफे के लिए उपयुक्त दृष्टिकोण में, प्रत्येक सूची डेटाबेस में संग्रहीत एक JSON दस्तावेज़ है। आप बस सूची को JSON ऑब्जेक्ट में रख देंगे, और डेटाबेस में डाल देंगे। और फिर आप डेटाबेस से पढ़ते हैं।

JSON ऐसा दिख सकता है:

[
 {"task":"get milk","who":"Scott","dueDate":"2013-05-19","done":false},
 {"task":"get broccoli","who":"Elisabeth","dueDate":"2013-05-21","done":false},
 {"task":"get garlic","who":"Trish","dueDate":"2013-05-30","done":false},
 {"task":"get eggs","who":"Josh","dueDate":"2013-05-15","done":true}
]

( स्टैक ओवरफ्लो पर एक json फ़ाइल के साथ खरीदारी सूची बनाने से )।

या कि कुछ आ रहा है। कुछ अन्य रिकॉर्ड है कि सोफे दस्तावेज़ के हिस्से के रूप में है।

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


6

विकल्प 2 एक पारंपरिक मास्टर / डिटेल सेटअप है। शायद यही आप यहाँ चाहते हैं। आइटम आईडी तालिका में रखें, और उस पर शामिल हों। स्कीमा JSON को प्रभावित नहीं करना चाहिए। आपकी क्वेरी कुछ इस तरह दिख सकती है:

select lists.name as list_name, items.name as item_name 
from items 
join lists on (lists.id = items.list_id)

यह त्रुटि हो रही है: mysqli_fetch_assoc () पैरामीटर 1 को mysqli_result, बूलियन दिए जाने की उम्मीद है?
कोडस्लो

6
@ कोडस्लो: यह एक विशिष्ट, विस्तृत कोड प्रश्न है, अधिक उचित रूप से stackoverflow.com
FrustratedWithFormsDesigner

3

मैं यूआई को सीधे आपके यूआई प्रतिनिधित्व या डेटा को प्रसारित करने की कोशिश नहीं करूंगा कि आप डेटा को कैसे संग्रहीत करना चाहते हैं। दोनों को अलग-अलग रखने और दोनों से शादी करने के लिए कुछ मिडिलवेयर लॉजिक का उपयोग करने से आप आसानी से किसी भी पक्ष को प्रभावित कर सकते हैं।

डेटा भंडारण के दृष्टिकोण से, आप संभावना विकल्प 2 का उपयोग करेंगे जो सामान्यीकृत डेटा पैटर्न का अनुसरण करता है जहां पुनरावृत्ति से बचने और डेटाबेस ब्लोट को कम करने के लिए सामान्य भागों को अपने स्वयं के तालिकाओं में विभाजित किया जाता है।

एक दृश्य परिप्रेक्ष्य से, आपको बस परिणाम सेट में प्रासंगिक डेटा में शामिल होने के लिए एक डेटाबेस क्वेरी का उपयोग करने की आवश्यकता है और फिर उस परिणाम को पुनरावृत्त करना और अपने UI की आवश्यकताओं के लिए लागू एक json प्रतिक्रिया उत्पन्न करना है। आप जो करना चाहते हैं वह JSON में डेटा को फीड करना है ताकि यह आपकी UI की आवश्यकताओं को यथासंभव सर्वोत्तम रूप से फिट करे, अक्सर आपके वेब पेजों में अतिरिक्त स्क्रिप्टिंग तर्क की आवश्यकता को समाप्त करता है।


यह वही है जो मुझे करने की आवश्यकता है, लेकिन यह करने के बारे में कोई विचार नहीं है कि कैसे जाना है। क्या आपके पास कोई उदाहरण सामग्री है जिसे मैं देख सकता हूं / अनुसरण कर सकता हूं? धन्यवाद - PHP में
जेन्सन पैदा करना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.