Mysql
 sql >> Database >  >> RDS >> Mysql

Domanda su MySQL - Come gestire più tipi di utenti - una tabella o più?

Il tuo istinto di non creare un grande tavolo con molti NULLS è giusto. Questa è una cattiva idea, dal punto di vista dell'archiviazione/recupero/manutenzione, nonché dal punto di vista della convalida dei dati (ne parleremo più avanti).

I due approcci più comuni:

1) Avere una tabella utente con tutti i campi comuni al suo interno, incluso un campo "userType". Quindi avere una tabella separata per ogni tipo di utente contenente i campi extra. Tutti gli utenti hanno una riga nella tabella degli utenti e una o più tabelle dei tipi di utenti specifici. Questo è il più normalizzato e il più efficiente per l'archiviazione e gli accessi rapidi. Ciò ti consente anche di utilizzare vincoli e chiavi esterne per assicurarti che tutte le informazioni richieste per ogni tipo di utente siano disponibili.

2) Avere una tabella utente con tutti i campi comuni al suo interno. Chiedi a un'altra tabella di chiamare qualcosa come UserAttributes che ha campi per userid, chiave e valore. Eventuali metadati aggiuntivi per un particolare utente possono essere archiviati qui. Ciò ha il vantaggio di non richiedere all'amministrazione del database di aggiungere nuovi tipi di utenti o metadati da archiviare per ciascun tipo di utente. Tuttavia, non ti consente di eseguire alcuna convalida dei dati a livello di database.