32

プレフィックストライがあります。リレーショナル データベースでこの構造を表すために推奨されるスキーマは何ですか? 効率を維持するには、部分文字列の一致が必要です。

4

2 に答える 2

18

具体化されたパスの設計はどうですか?

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 列のサイズは、格納するトライの最大深度です。

これほどシンプルでわかりやすいものは考えられず、効率的な文字列の格納と検索が維持されます。

于 2008-12-10T04:15:36.707 に答える
0

あなたのエンティティのいずれかが他のエンティティと関係を持っていますか? そうでない場合、つまりリレーショナルでない場合は、シリアル化されたハッシュ テーブルがそれを行います。

于 2008-12-10T04:30:02.140 に答える