Lei non ha detto se si stesse utilizzando un linguaggio di alto livello, quindi mi limiterò a dare un esempio generale con DB-come ad esempio:
Progettazione di database è difficile. Quindi, questa sarà una risposta rapida e semplice.
La tua domanda è una domanda di base sulle relazioni dati e sulla progettazione del database. Cerca alcune guide di base per aiutare questa risposta. Può essere utile pensare a come le informazioni sono raggruppate e collegare "indietro" al set principale (tabella) degli altri gruppi (tabelle).
Quindi, gli utenti sono utenti - questo è il tuo tavolo. Dovrebbe contenere gli elementi (colonne) principali comuni dei dati associati a un utente.
Quindi, questo altro insieme di informazioni (ad es. Permessi o qualcosa) è un'altra tabella.
Assicurati solo che questa altra tabella abbia un valore (colonna) che rimandi all'utente, a cui fa riferimento. Probabilmente si vorrà dire al vostro database per creare un "indice" tra di loro (per migliorare le prestazioni di ricerca, etc.)
Ad esempio, una sorta di tabella "autorizzazione" per gli utenti:
- integer "id" <--- unique, index column, auto-increment
- integer "user_id" <--- this is which user this belongs
- ...
- Boolean "can_write" <--- example data column
- Boolean "can_read" <--- example data column
- Boolean "can_reboot_system" <--- example data column
- etc, whatever you want
Quindi, potresti "SELEZIONARE * FROM user_table WHERE first_name = 'joe' (o simile) ... per ottenere un utente.In là, mi auguro che tu abbia un qualche tipo di valore 'id' per identificare quella riga
Ora basta fare un 'SELECT * FROM autorizzazioni WHERE user_id =' nnnn '(qualunque sia l'id dell'utente)
Se un utente ha solo 1 permesso impostato, allora si può semplicemente avere user_id senza la colonna "id" aggiuntiva.
Grazie, dj_segfault. Sono andato con l'opzione n. 1 e ho creato una tabella utente con i campi comuni e un campo userType cui fanno riferimento le altre tabelle utente "specifiche". I NULI stavano sicuramente causando mal di testa, sono contento di liberarmene ora! – littleK
correggimi se ho torto (capita molto) ma se qualcuno dovesse memorizzare i propri dati in modo tale che i campi comuni fossero a un livello "utente" come fname, lname, email, pw ... e così via . Non ci sarebbe modo di ottenere più informazioni specifiche dell'utente con una query, giusto? Ci vorrebbe sempre una seconda query basata sul tipo di utente per ottenere informazioni più specifiche. – ackerchez
@ackerchez certo che c'è. Tutto quello che devi fare per ottenere TUTTE le informazioni è di unire internamente tutte le tabelle utente specifiche del tipo utente con la tabella utente principale, qualunque sia il tuo UID. Le colonne per le tabelle che non sono per quel tipo di utente saranno null. –