Come si conserva un trie in un database relazionale?
-
21-08-2019 - |
Domanda
Ho un trie prefisso. Qual è lo schema raccomandato per rappresentare questa struttura in un database relazionale? Ho bisogno sottostringa corrispondente a rimanere efficiente.
Soluzione
Come circa il href="http://www.dbazine.com/oracle/or-articles/tropashko4" Percorso materializzate progettare?
CREATE TABLE trie (
path VARCHAR(<maxdepth>) PRIMARY KEY,
...other attributes of a tree node...
);
Per memorizzare una parola come "StackOverflow":
INSERT INTO trie (path) VALUES
('s'), ('st'), ('sta'), ('stac'), ('stack'),
('stacko'), ('stackov'), ('stackove'), ('stackover'),
('stackover'), ('stackoverf'), ('stackoverflo'),
('stackoverflow');
Il percorso materializzata nella struttura è la sequenza prefissata di caratteri stesso. Ciò costituisce anche la chiave primaria. La dimensione della colonna varchar è la profondità massima di trie che si desidera memorizzare.
Non riesco a pensare a qualcosa di più semplice e diretto di questo, e conserva efficiente archiviazione e la ricerca della stringa.
Altri suggerimenti
Fa le tue entità hanno un rapporto con un altro? In caso contrario, cioè non relazionale, una tabella hash con una serializzazione lo farebbe.