0
Oracleデータベースに格納された質問ツリーを使ってデータ駆動型ウィザードを実装しようとしています。パフォーマンスの点で多大な犠牲を払うことなく、データベース部分を柔軟にするために使用する最良のスキーマは何ですか?データベースに'20 Questions 'のようなウィザードを実装する
Oracleデータベースに格納された質問ツリーを使ってデータ駆動型ウィザードを実装しようとしています。パフォーマンスの点で多大な犠牲を払うことなく、データベース部分を柔軟にするために使用する最良のスキーマは何ですか?データベースに'20 Questions 'のようなウィザードを実装する
同じテーブルを参照する外部キー(しばしば知られている「豚の耳の関係」)を使用してツリー構造を構築することができます。次に、CONNECT BY構文を使用してツリーをトラバースすることができます。特別なキーワードレベルがどこまで私は、その後の構造を示すために、データをインデントするために使用されてきた私たちは木、ダウン決定するために使用することができる方法
SQL> create table qs
2 (q_id integer primary key
3 , parent_q_id integer references qs
4 , parent_q_answer varchar2(1)
5 , q_text varchar2(100)
6*);
Table created.
SQL> insert into qs values (1, null, null, 'Is it bigger than a person?');
1 row created.
SQL> insert into qs values (2, 1, 'Y', 'Does it have a long neck?');
1 row created.
SQL> insert into qs values (3, 2, 'Y', 'It is a giraffe');
1 row created.
SQL> insert into qs values (4, 2, 'N', 'It is an elephant');
1 row created.
SQL> insert into qs values (5, 1, 'N', 'Does it eat cheese?');
1 row created.
SQL> insert into qs values (6, 5, 'Y', 'It is a mouse');
1 row created.
SQL> insert into qs values (7, 5, 'N', 'It is a cat');
1 row created.
SQL> commit;
Commit complete.
SQL> select rpad(' ',level*4,' ')||parent_q_answer||': '||q_text
2 from qs
3 start with parent_q_id is null
4 connect by prior q_id = parent_q_id;
RPAD('',LEVEL*4,'')||PARENT_Q_ANSWER||':'||Q_TEXT
------------------------------------------------------------------------------------------------------------------------------
: Is it bigger than a person?
Y: Does it have a long neck?
Y: It is a giraffe
N: It is an elephant
N: Does it eat cheese?
Y: It is a mouse
N: It is a cat
7 rows selected.
注:ここでは簡単な例です。