Je cherche à implémenter un assistant piloté par les données avec l'arborescence de questions stockée dans une base de données Oracle. Quel est le meilleur schéma à utiliser pour rendre la partie de base de données flexible (c'est-à-dire facile à ajouter de nouveaux chemins de questions) sans sacrifier trop en termes de performance?Implémentation d'un assistant de type «20 questions» dans une base de données
0
A
Répondre
0
Vous pouvez créer une structure arborescente à l'aide d'une clé étrangère faisant référence à la même table (une relation «oreille de porc», comme on l'appelle souvent). Ensuite, vous pouvez utiliser la syntaxe CONNECT BY pour traverser l'arbre. Voici un exemple simple:
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.
Remarque comment le niveau de mot-clé spécial peut être utilisé pour déterminer jusqu'à quel point bas de l'arbre que nous sommes, que je l'ai ensuite utilisé pour mettre en retrait les données pour montrer la structure.
Questions connexes
- 1. Comment fonctionnent 20 questions?
- 2. Questions de base de données de débutant
- 3. Implémentation Round Robin Assignment (base de données)
- 4. Assistant de connexion à la base de données SOAP UI
- 5. en utilisant SET type de données dans une base MySQL
- 6. Elmah questions de configuration de base/problèmes
- 7. Questions de requête MySQL avec une base de données de clé étrangère
- 8. Implémentation d'un délégué de quota de base de données WebView
- 9. Implémentation de Comet du côté de la base de données
- 10. Plusieurs questions C de base
- 11. Fonctionnalités de type questions/réponses de type Stackoverflow pour Sharepoint
- 12. données dans une table emboîtées de base de données
- 13. Utilisation de LINQ2SQL et de MVC pour la fonctionnalité de sauvegarde de type assistant
- 14. Concevoir une base de données
- 15. Assistant de publication de base de données SQL avec SQL Server 2008
- 16. Existe-t-il une implémentation de base de données avec notifications et révisions?
- 17. Java: créer une nouvelle implémentation de type à l'exécution?
- 18. Questions SQL de base ... Left Join
- 19. typedef en tant que type de données de base
- 20. Comment accepter une collection d'un type de base dans WCF
- 21. Enregistrement dans une base de données SQL?
- 22. Créer une base de données dans QT
- 23. Implémentation de Captcha dans ROR
- 24. Index de base de données
- 25. Représentation illimitée dans la base de données avec le type de données entier
- 26. Impossible de créer une colonne dans la base de données MySQL avec le type de données TEXT
- 27. Données sensibles persistantes dans asp.net, implémentation impaire
- 28. Pourquoi un déclencheur de base de données serait-il invalide dans une base de données Oracle?
- 29. Création d'une structure de base de données d'appartenance ASP.Net dans une base de données existante
- 30. Données de base: questions de conception. Des wrappers d'objets ou non?