Frage

Ich möchte einen datengesteuerten Assistenten implementieren, dessen Fragenbaum in einer Oracle-Datenbank gespeichert ist.Welches Schema eignet sich am besten, um den Datenbankteil flexibel zu gestalten (d. h.(einfach neue Fragepfade hinzuzufügen), ohne zu große Einbußen bei der Leistung hinnehmen zu müssen?

War es hilfreich?

Lösung

Sie können eine Baumstruktur mithilfe eines Fremdschlüssels erstellen, der auf dieselbe Tabelle verweist (eine „Schweinsohr“-Beziehung, wie sie oft genannt wird).Anschließend 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 das spezielle Schlüsselwort LEVEL verwendet werden kann, um zu bestimmen, wie weit unten im Baum wir uns befinden. Mit diesem Schlüsselwort habe ich dann die Daten eingerückt, um die Struktur anzuzeigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top