Ich möchte einen datengesteuerten Assistenten mit dem in einer Oracle-Datenbank gespeicherten Fragenbaum implementieren. Welches ist das beste Schema, das verwendet werden kann, um den Datenbankabschnitt flexibel zu machen (d. H. Leicht neue Pfade von Fragen hinzuzufügen), ohne zu viel Leistung zu opfern?Implementieren eines '20 Fragen'-ähnlichen Assistenten in einer Datenbank
0
A
Antwort
0
Sie können eine Baumstruktur mit einem Fremdschlüssel erstellen, der auf die gleiche Tabelle verweist (eine "Schweineohr" -Beziehung, wie sie oft genannt wird). Dann können Sie die CONNECT BY-Syntax verwenden, um den Baum zu durchlaufen. Hier ist ein einfaches Beispiel:
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.
Beachten Sie, wie die spezielle Keyword-Ebene verwendet werden kann, um zu bestimmen, wie weit der Baum, den wir sind, die ich dann verwendet, um die Daten einrücken die Struktur zu zeigen.