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

Database design 如何在关系数据库中存储trie?,database-design,schema,relational,trie,Database Design,Schema,Relational,Trie,我有一个前缀trie。在关系数据库中表示此结构的推荐模式是什么?我需要子字符串匹配以保持效率。设计如何 树中的物化路径是前缀字符序列本身。这也构成了主键。varchar列的大小是要存储的trie的最大深度 我想不出比这更简单、更直接的了,它保留了高效的字符串存储和搜索。您的实体中有任何实体与其他实体有关系吗?如果不是,也就是说,不是关系型的,一个具有序列化的哈希表就可以了。是的,trie not tree。请参阅您是否正在存储和检索要在代码中使用的数据库的trie?因为对于DB查找,有一些内置的

我有一个前缀trie。在关系数据库中表示此结构的推荐模式是什么?我需要子字符串匹配以保持效率。

设计如何

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


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

您的实体中有任何实体与其他实体有关系吗?如果不是,也就是说,不是关系型的,一个具有序列化的哈希表就可以了。

是的,trie not tree。请参阅您是否正在存储和检索要在代码中使用的数据库的trie?因为对于DB查找,有一些内置的工具,比如全文索引(基于类似的原则),这实际上不是一个尝试。。。我同意把它放在db之外可能是有道理的,但是把它变成一个哈希表?链接重定向到没有什么感兴趣的地方。这是一个存档版本:@Howie,谢谢,我在5.5年前回答了这个问题,所以有些链接过时并不奇怪。你能举一个例子说明你如何查询这个表,比如说“st”,还有更多的单词像“stackoverflowone”
从trie WHERE path='st'中选择path
。如果返回非空集,则“st”在Trie中。关于第二点,我不知道你在说什么。
CREATE TABLE trie (
  path VARCHAR(<maxdepth>) PRIMARY KEY,
  ...other attributes of a tree node...
);
INSERT INTO trie (path) VALUES
  ('s'), ('st'), ('sta'), ('stac'), ('stack'),
  ('stacko'), ('stackov'), ('stackove'), ('stackover'),
  ('stackover'), ('stackoverf'), ('stackoverflo'),
  ('stackoverflow');