如何在关系数据库中存储trie?

时间:2008-12-10 04:06:33

标签: database-design schema relational trie

我有一个前缀trie。在关系数据库中表示此结构的推荐架构是什么?我需要子串匹配才能保持高效。

2 个答案:

答案 0 :(得分:9)

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');

树中的物化路径是前缀字符序列本身。这也构成了主键。 varchar列的大小是您要存储的最大trie深度。

我想不出比这更简单,更直接的东西,它保留了有效的字符串存储和搜索。

答案 1 :(得分:0)

您的任何实体是否与其他实体有关系?如果不是,那就不是关系,那么带有序列化的哈希表就可以了。