युगल बातें भी विचार करने के लिए ...
1) जब आप कहते हैं कि "प्रकार reddit की तरह" रैंक या के आधार पर तारीख, क्या आपका मतलब शीर्ष-स्तर या पूरी चीज है?
2) जब आप नोड हटाते हैं, तो शाखाओं के साथ क्या होता है? क्या आप उन्हें फिर से माता-पिता करते हैं? मेरे कार्यान्वयन में, मैं सोच रहा हूं कि संपादक निर्णय लेंगे - या तो नोड को छुपाएं और इसे दृश्यमान बच्चों के साथ "टिप्पणी छुपाएं" के रूप में प्रदर्शित करें, टिप्पणी छुपाएं और इसके बच्चे हैं, या पूरे पेड़ को नूक करें। पुन: parenting आसान होना चाहिए (केवल चिद्रेन के माता-पिता को हटाए गए माता-पिता पर सेट करें), लेकिन पूरे पेड़ को शामिल करने वाला कुछ भी डेटाबेस में लागू करना मुश्किल लगता है।
मैं PostgreSQL के लिए ltree मॉड्यूल देख रहा हूं। इसे पेड़ के हिस्सों को थोड़ा तेज़ी से शामिल करने के लिए डेटाबेस संचालन करना चाहिए।
ltreetest=# select path from test where path <@ 'Top.Science';
path
------------------------------------
Top.Science
Top.Science.Astronomy
Top.Science.Astronomy.Astrophysics
Top.Science.Astronomy.Cosmology
हालांकि, यह अपने आप ही रेफेरेंन्शिअल सत्यनिष्ठा के किसी भी प्रकार सुनिश्चित नहीं करता है: यह मूल रूप से आप तालिका की तरह लग रहा है कि एक क्षेत्र की स्थापना की सुविधा देता है। दूसरे शब्दों में, "Top.Science" या "Top" के रिकॉर्ड के बिना आपके पास "Top.Science.Astronomy" के लिए रिकॉर्ड हो सकते हैं। लेकिन यह आप करते हैं क्या है सामान की तरह:
-- hide the children of Top.Science
UPDATE test SET hide_me=true WHERE path @> 'Top.Science';
या
-- nuke the cosmology branch
DELETE FROM test WHERE path @> 'Top.Science.Cosmology';
पारंपरिक "comment_id"/"PARENT_ID" दृष्टिकोण संग्रहित प्रक्रियाओं का उपयोग कर के साथ संयुक्त हैं, तो मैं तुम्हें मिल सकता है सोच रहा हूँ दोनों दुनिया के सर्वश्रेष्ठ।आप अपने "पथ" का उपयोग कर डेटाबेस में टिप्पणी वृक्ष को जल्दी से पार कर सकते हैं और फिर भी "comment_id"/"parent_id" के माध्यम से संदर्भित अखंडता सुनिश्चित कर सकते हैं।
CREATE TABLE comments (
comment_id SERIAL PRIMARY KEY,
parent_comment_id int REFERENCES comments(comment_id) ON UPDATE CASCADE ON DELETE CASCADE,
thread_id int NOT NULL REFERENCES threads(thread_id) ON UPDATE CASCADE ON DELETE CASCADE,
path ltree NOT NULL,
comment_body text NOT NULL,
hide boolean not null default false
);
एक टिप्पणी देखने के लिए पथ स्ट्रिंग
<thread_id>.<parent_id_#1>.<parent_id_#2>.<parent_id_#3>.<my_comment_id>
इस प्रकार "1" के एक comment_id एक रास्ता होता है के साथ की धागा "102" एक रूट टिप्पणी हो जैसे: मैं की तरह कुछ envisioning कर रहा हूँ का:
102.1
और एक बच्चे जिसका comment_id है "3" होगा:
102.1.3
एक "3" होने आईडी "31" और "54" के के कुछ बच्चों होगा:
102.1.3.31
102.1.3.54
नोड "3" और उसके बच्चों को छुपाने के लिए, यदि आप इस समस्या होगी :
UPDATE comments SET hide=true WHERE path @> '102.1.3';
मुझे पता नहीं है - यह अनावश्यक ओवरहेड जोड़ सकता है। इसके अलावा मुझे नहीं पता कि कितनी अच्छी तरह से बनाए रखा है ltree है।
"स्मृति में" क्या आप एप्लिकेशन स्तर पर हैं? – Ced