Mi scuso se questa è una domanda un po 'stupida o generica, ma vorrei un feedback generale per favore!
Diciamo che ho questa struttura DB per gli utenti (in Mongo / JS, ma in realtà è tutto pseudocodice- e gli ID sarebbero in realtà riferimenti DB, non interi di base):
users = [
{
id: 1,
name: 'John Smith'
},
{
id: 2,
name: 'Sheila X. Ample'
}
]
... e voglio definire alcuni progetti in cui una o più di queste persone possono essere dei collaboratori. Il progetto definirà chi ha accesso generale ad esso e chi lo ha creato, chi è l'attuale collaboratore principale (questo cambierà regolarmente), chi lo ha aggiornato, ecc. Ecc.
Questo metodo è il migliore, dove gli ID sono rappresentati direttamente sull'oggetto del progetto:
projects = [
{
id: 1,
name: 'Project One',
collaborators: [
2
],
primaryCollaborator: 2,
lastUpdatedBy: 2,
createdBy: 2
},
{
id: 2,
name: 'Another Project',
collaborators: [
1,
2
],
primaryCollaborator: 1,
lastUpdatedBy: 2,
createdBy: 1
}
]
// Get the primary collaborator:
primaryID = projects.find({id: 2}).primaryCollaborator;
O questo, dove le proprietà sono booleane per ogni singolo collaboratore:
projects = [
{
id: 1,
name: 'Project One',
collaborators: [
{
id: 2,
primaryCollaborator: true,
lastUpdatedBy: true,
createdBy: true
}
]
},
{
id: 2,
name: 'Another Project',
collaborators: [
{
id: 1,
primaryCollaborator: true,
lastUpdatedBy: false,
createdBy: true
},
{
id: 2,
primaryCollaborator: false,
lastUpdatedBy: true,
createdBy: false
}
]
}
]
// Get the primary collaborator:
primaryID = projects.find({id: 2}).collaborators.find({primaryCollaborator: true}).id;
Come ho detto, sono sicuro che questo tipo di domanda strutturale è stata posta un milione di volte prima, ma non vorrei che la vita di me sappia cosa trovare a Google!
Quali sono i vantaggi o gli svantaggi di farlo in entrambi i modi? Fa anche la differenza? Il primo metodo richiederebbe che gli ID referenziati sull'oggetto del progetto esistessero e causerebbero un mal di testa se, per esempio, un collaboratore fosse stato rimosso dal progetto. Il secondo metodo sembra un po 'pesante e causerebbe un mal di testa se qualcosa andasse storto e più di un collaboratore fosse classificato come true
come il collaboratore principale, ad esempio. O c'è un metodo migliore del tutto?
Grazie in anticipo! :)