Progettazione del database per la modifica dei ruoli utente

2

Quale progettazione di database suggeriresti per il seguente esempio?

Esempio: immagina un autobus con alcune persone all'interno. Ogni persona ha alcuni attributi come il nome, ecc. Inoltre ci sono attributi specifici per guidatore e passeggero. Ogni poche ore cambiano i ruoli, il che significa che il guidatore diventa un passeggero normale e uno dei passeggeri diventa l'autista. Quale sarebbe un modo elegante per modellarlo? Il progetto a cui sto lavorando è scritto in Ruby, ma immagino che non abbia molta importanza.

Ho pensato di utilizzare AASM (una macchina a stati) o di lavorare con una tabella "Current-Role" che include user_id e il ruolo corrente. Ma questo mi sembra sbagliato. Grazie in anticipo per i tuoi suggerimenti!

    
posta Peter Piper 10.12.2016 - 18:57
fonte

3 risposte

2

Modello ER concettuale

  • PERSON ha gli attributi di una persona
  • DRIVER ha attributi che si applicano solo ai driver. Non è necessario eliminare queste informazioni se la persona cambia ruolo da passeggero a conducente. Gli attributi rimangono lì poiché la persona può diventare di nuovo un autista.
  • ROLE , beh ... passeggero, autista, ecc.
  • PERSON_ROLE , dice che persona è in quale bus e con quale ruolo. Oltre ad essere solo una tabella di join, può contenere attributi come SEAT_NUMBER (il driver avrebbe un numero di posto speciale come, ad esempio, 0.
  • BUS , attributi bus
risposta data 11.12.2016 - 07:07
fonte
1

Sembra che sia necessario modellare le persone sull'autobus che sono tutti passeggeri. Alcuni passeggeri possono essere autisti (un sottotipo di passeggeri) e richiedono attributi aggiuntivi. È possibile che alcuni attributi esistano solo passeggeri che non sono guidatori. Sarebbe problematico se la stessa persona continuasse a cambiare tipo (che tu descrivi come un ruolo). Vorrei ricercare i sottotipi di modellazione.

Quale driver sta guidando il bus è un attributo del bus. In questo caso sarebbe limitato al passeggero sul bus, preferibilmente un autista. Normalmente modellerei questo come una tabella delle relazioni che unisce bus e passeggero con un attributo di avvio e una durata o un tempo di fine. Normalmente ci sono vincoli su intervalli di sovrapposizione.

    
risposta data 11.12.2016 - 03:57
fonte
0

Concentrati prima sul pezzo più complesso. Penso che stia monitorando cosa sta succedendo durante un viaggio. Invece di salvare solo lo stato corrente, avrei una tabella che è più di un registro. Dovrebbe dirti,

  • In ogni viaggio, dove sono seduti tutti
  • A che ora cambiano i posti
  • qual è il ruolo di quel posto (Driver o Passeggero).

    Se una persona è al posto di guida durante un determinato periodo, ci sono ulteriori informazioni sugli attributi di guida di quella persona.

Per gli autobus con sedili identificabili individualmente, puoi anche tenerne traccia.

Collegando il bus al viaggio, ma in questo caso si ottiene solo un bus per registrazione di viaggio.

    
risposta data 11.12.2016 - 21:46
fonte

Leggi altre domande sui tag