J'ai un préfixe trie. Quel est le schéma recommandé pour représenter cette structure dans une base de données relationnelle? J'ai besoin de la sous-chaîne correspondante pour rester efficace.Comment stockez-vous un trie dans une base de données relationnelle?
Répondre
Qu'en est-il du design Materialized Path?
CREATE TABLE trie (
path VARCHAR(<maxdepth>) PRIMARY KEY,
...other attributes of a tree node...
);
Pour mémoriser un mot comme « stackoverflow »:
INSERT INTO trie (path) VALUES
('s'), ('st'), ('sta'), ('stac'), ('stack'),
('stacko'), ('stackov'), ('stackove'), ('stackover'),
('stackover'), ('stackoverf'), ('stackoverflo'),
('stackoverflow');
Le chemin matérialisé dans l'arbre est la séquence de caractères préfixé lui-même. Cela forme également la clé primaire. La taille de la colonne varchar est la profondeur maximum de trie que vous voulez stocker.
Je ne peux pas penser à quelque chose de plus simple et direct que cela, et il préserve le stockage et la recherche de chaîne efficace.
Le lien redirige vers rien d'intéressant. Voici une version archivée: http://web.archive.org/web/20071019044908/http://www.dbazine.com/oracle/or-articles/tropashko4 – Howie
@Howie, merci, j'ai répondu il y a 5.5 ans, donc Ce n'est pas une surprise que certains liens soient viciés. –
Pouvez-vous donner un exemple de comment allez-vous interroger cette table pour dire "st" et il y a plus de mots comme "stackoverflowone" – zengr
Est-ce que l'une de vos entités a une relation avec une autre? Sinon, c'est-à-dire non relationnel, une table de hachage avec une sérialisation le ferait.
Oui, pas d'arbre. Voir http://en.wikipedia.org/wiki/Trie – dkretz
Est-ce que vous stockez et récupérez le trie dans/de DB à utiliser dans votre code? Parce que pour la recherche DB, il existe des outils intégrés comme l'indexation de texte intégral (basé sur des principes similaires) –