Domanda

Ho un trie prefisso. Qual è lo schema raccomandato per rappresentare questa struttura in un database relazionale? Ho bisogno sottostringa corrispondente a rimanere efficiente.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top