Ma base de données a deux tables, "question" et "champ". Les questions peuvent avoir plusieurs champs, et les champs peuvent avoir plusieurs champs. C'est un arbre avec un noeud racine spécial.Hibernate, SQL et les associations récursives
Je veux les utiliser avec mise en veille prolongée (actuellement potgresql) - il devrait donc être simple et facile à utiliser de java.
Quelle est la meilleure solution à cela?
- ajouter question_parent_id et field_parent_id à la table "sur le terrain", et utiliser uniquement question_parent_id si elle est un descendant direct de celui-ci. (vérifiez XOR quelle contrainte SQL ... peut dépendre du serveur SQL)
- ajoutez question_parent_id et field_parent_id, et utilisez toujours question_parent_id. Souvenez-vous de rester cohérent ... (question_id ne devrait pas changer, probablement pas un risque réel)
- Utilisez l'héritage de table spécifique postgresql: « question » et « champ » étend « contenu », donc une colonne clé étrangère suffit. Utilisez une contrainte supplémentaire sur "question" et "champ".
- utilisez une troisième table (appelée "conteneur"), constituée uniquement d'un ID. Les conteneurs peuvent avoir plusieurs champs et un champ peut avoir un conteneur. Les questions ont exaclty un conteneur. Mais cela nécessite un code supplémentaire en Java, et a un risque de boucles infinies, même avec une clé unique sur field_container_id ...
J'ai ajouté quelques paragraphes supplémentaires à ma réponse. Vous devez fournir des informations plus spécifiques pour obtenir des réponses spécifiques. (Pensez à poser une nouvelle question si vous trouvez quelque chose de spécifique à demander.) –