2008-12-10 18 views
11

मेरे पास एक उपसर्ग त्रिभुज है। एक रिलेशनल डेटाबेस में इस संरचना का प्रतिनिधित्व करने के लिए अनुशंसित स्कीमा क्या है? मुझे कुशल बने रहने के लिए मिलान करने की आवश्यकता है।आप एक रिलेशनल डेटाबेस में एक trie कैसे स्टोर करते हैं?

+1

हां, ट्री ट्री नहीं। Http://en.wikipedia.org/wiki/Trie – dkretz

+0

देखें क्या आप अपने कोड में उपयोग करने के लिए डीबी से/से त्रिभुज को संग्रहीत और पुनर्प्राप्त कर रहे हैं? क्योंकि डीबी लुकअप के लिए अंतर्निहित टूल्स हैं जैसे फुल-टेक्स्ट इंडेक्सिंग (समान सिद्धांतों के आधार पर) –

उत्तर

6

Materialized Path डिज़ाइन के बारे में कैसे?

CREATE TABLE trie (
    path VARCHAR(<maxdepth>) PRIMARY KEY, 
    ...other attributes of a tree node... 
); 

"stackoverflow" जैसा कोई शब्द की दुकान करने के लिए:

INSERT INTO trie (path) VALUES 
    ('s'), ('st'), ('sta'), ('stac'), ('stack'), 
    ('stacko'), ('stackov'), ('stackove'), ('stackover'), 
    ('stackover'), ('stackoverf'), ('stackoverflo'), 
    ('stackoverflow'); 

पेड़ में materialized पथ ही पात्रों में से पहले से जुड़ा हुआ अनुक्रम है। यह प्राथमिक कुंजी भी बनाता है। वर्कर कॉलम का आकार उन तीनों की गहराई है जिन्हें आप स्टोर करना चाहते हैं।

मैं उससे कहीं अधिक सरल और सीधा नहीं सोच सकता, और यह कुशल स्ट्रिंग स्टोरेज और खोज को सुरक्षित रखता है।

+1

लिंक ब्याज के कुछ भी रीडायरेक्ट नहीं करता है। यहां एक संग्रहीत संस्करण है: http://web.archive.org/web/20071019044908/http://www.dbazine.com/oracle/or-articles/tropashko4 – Howie

+1

@ हाउ, धन्यवाद, मैंने 5.5 साल पहले उत्तर दिया, इसलिए यह आश्चर्य की बात नहीं है कि कुछ लिंक बेकार हो जाते हैं। –

+0

क्या आप इस उदाहरण को "सेंट" कहने के लिए कैसे पूछेंगे और "stackoverflowone" जैसे अधिक शब्द हैं – zengr

0

क्या आपकी कोई भी संस्था किसी अन्य के साथ संबंध रखती है? यदि नहीं, तो, संबंध नहीं है, एक धारावाहिक के साथ एक हैश तालिका यह करेगी।

+0

यह वास्तव में एक trie नहीं है ... मैं मानता हूं कि यह संभवतः डीबी से बाहर रखने के लिए समझ में आता है, लेकिन इसे एक हैशटेबल में बदल रहा है? – dgtized

+0

ओ (1) एल्गोरिदम संसाधनों को बचाने में अच्छा नहीं है। ;) – yogman

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