Structure de données pour faire les bonnes requêtes

a marqué ce sujet comme résolu.

Je suis en train de mener un petit projet perso et j'ai besoin d'une petite base de donnée. Ne voulant pas m'embêter avec une "vraie" bdd pour différentes raisons je me suis tourné vers firebase que je découvre à l'occasion.

Je n'y connais pas grand chose (presque rien ?) en base de donnée, aussi je voulais vous demander votre avis sur la structure que je compte adopter. Si j'ai bien compris FireBase ne permet que des requêtes sur les noeuds de l'objet json ce qui rend la formulation de certaines requêtes dépendante de la structure de l'arbre choisit. Par exemple impossible de faire des SELECT LIKE comme en SQL.

Ma base de donnée est simple, il s'agira d'un site qui proposera des questions/réponses, la base de donnée devra donc stocker pour chaque question :

  • La question
  • La réponse
  • Le theme
  • L'auteur

Voici ce que j'aimerai pouvoir faire comme requêtes sur la base de donnée : - Récupérer les noms des questions par thème pour les afficher - Récupérer la réponse et l'auteur d'une question précise (l'auteur écrit la question et la réponse) - Récupérer les questions d'un auteur en particulier

Si j'adopte une structure "classique" comme la suivante il me sera impossible si j'ai bien compris de récupérer la liste des questions pas thème car cela ne correspond pas a un noeud et firebase ne peut faire des requêtes sur les valeurs des propriétés :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    questions: {
        question1: {
            theme: "theme1",
            question: "question1",
            reponse: "reponse1",
            auteur: "auteur1"
        },
        question2: {
            theme: "theme1",
            question: "question2",
            reponse: "Blablaba2",
            auteur: "auteur1"
        },
        question3: {
            theme: "theme2",
            question: "question3",
            reponse: "Blablaba3",
            auteur: "auteur2"
        }
    }
}

Je pense que la structure suivante serait plus adaptée car en une requête je peux avoir ma liste des questions, les réponses aux questions ou les questions faites par chaque auteur.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
    questionNames: {
        theme1: {
            question1: "question1 ?",
            question2: "question2 ?"
        },
        theme2: {
            question3: "question3 ?"
        }
    },
    reponses: {
        question1: {
            reponse: "reponse1",
            auteur: "auteur1"
        },
        question2: {
            reponse: "reponse2",
            auteur: "auteur1"
        },
        question3: {
            reponse: "reponse3",
            auteur: "auteur2"
        }
    },
    auteurs:{
        auteur1: {
            prenom : "Paul",
            nom: "Bismut",
            questions : {
                question1: "question1 ?",
                question2: "question2 ?"
            }
        },
        auteur2: {
            prenom : "Jean",
            nom: "Bobine",
            questions : {
                question1: "question3 ?",
            }
        }
    }
}

Cette structure est-elle bien adaptée pour ce que je veux faire ou pas ? Si ce n'est pas le cas pourquoi ? Que me conseillerai-vous alors ?

+0 -0

La question initiale est : as-tu reellement besoin d'une base NoSQL pour ce genre de choses ? Quels avantages y vois-tu ? Quels sont les contraintes techniques futures d'utiliser une base relationnelle a la place ?

Au passage, si tu disposes en tout temps du theme, alors tu peux penser a une troisieme structure ou le theme englobe les questions / reponses. Je doute que ce soit le cas mais sait-on jamais.

La question initiale est : as-tu reellement besoin d'une base NoSQL pour ce genre de choses ? Quels avantages y vois-tu ? Quels sont les contraintes techniques futures d'utiliser une base relationnelle a la place ?

Je n'ai absolument aucun besoin d'utiliser une base NoSQL pour être honnête. Mon projet est de créer un petit site du même genre que http://loitravail.lol/ mais sur l'économie. Il y aura donc des questions par thème et des réponses courtes associés qui s'afficheraient en cliquant sur une question. Je me suis dis que séparer les réponses/questions dans une base de donnée était une meilleure idée que d'écrire directement en html une page par question/réponse.

Ma contrainte principale est que je veux utiliser vue.js coté front end. Je sais que cela n'a aucune utilité pratique et que php serait bien plus adapté mais je n'ai pas fait de php depuis longtemps et je me dis que apprendre à n'utiliser que du js sera plus adapté pour le futur que d'apprendre correctement les deux langages en même temps. C'est un souhait personnel de me tourner uniquement vers js.

L inconvénient est que je n'ai jamais vraiment touché à js coté serveur et ça me fait un peu peur de devoir apprendre ça pour mettre en place une toute petite base de donnée. C'est pour ça que je pensais utiliser quelque chose comme Firebase pour essayer de créer simplement une petite bdd accessible à distance sans avoir à gérer ça moi même !

Tu penses que je devrais faire autrement ?

alors tu peux penser a une troisieme structure ou le theme englobe les questions / réponses.

J'y avais pensé mais alors il me semble que je ne pourrais plus récupérer uniquement les titres des questions. Le site sera organisé pour que chaque catégorie affiche les questions en rapport et qu'en cliquant sur une question cela entraine sur une page dédiée qui exposera la réponse. Je voudrait donc éviter d'avoir à charger toutes les réponses en même temps.

+0 -0

Je connais pas firebase mais leur doc sur comment structurer tes données est pas trop mal il me semble ?

Sinon, dans l'absolu, les structures du genre

1
2
3
4
5
6
7
{
  "items": {
    "item1": {}, 
    "item2": {}, 
    "item3": {}
  }
}

sont complètement absurdes. Si tu veux des listes, utilise des listes.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte