Pergunta

Eu estou olhando para a implementação de um data-driven assistente com a questão árvore armazenados em um banco de dados Oracle.Qual é o melhor esquema para usar para fazer a parte da base de dados flexível (i.e.fácil adicionar novos caminhos de perguntas) sem sacrificar muito em termos de desempenho?

Foi útil?

Solução

Você pode construir uma estrutura de árvore usando uma chave estrangeira que referencia a mesma tabela (uma "orelha de porco" relacionamento como muitas vezes ele é chamado).Em seguida, você pode usar a conexão PELA sintaxe para percorrer a árvore.Aqui está um exemplo simples:

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.

Observe como o especial de NÍVEL de palavra-chave pode ser usado para determinar o quão longe a árvore, o que eu tenho, em seguida, usado para recuar os dados para mostrar a estrutura.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top