2011-10-14 9 views
9

Ho una tabella di utenti (ID, FNAME, LNAME, INTERESTS, ...) più un'altra tabella per contenere lo specifico set di INTERESSI tra cui scegliere: Film, TV, Radio, Stage, Standup.Memorizza elenco di valori (come interessi)

Possono avere più di un interesse, quindi come posso memorizzare queste informazioni nel campo INTERESSI degli utenti? O qual è il miglior metodo alternativo per raggiungere questo obiettivo?

+0

Questo mi ha aiutato: http://stackoverflow.com/questions/1009025/facebook-database-design –

risposta

0

la migliore soluzione a questo è utilizzare 3 tavoli (un terzo per memorizzare il collegamento di interessi useres):

user (id, name) 
interest (id, description) 
user_interest (user, interest) 

Questo è chiamato database normalization.

3

Leggi informazioni su database normalisation nel tuo libro MySQL. È un argomento importante, quindi probabilmente c'è un ampio capitolo a riguardo.

In breve, si rimuove interests e finisce invece con un terzo tavolo , come:

user_id | interest_id 
--------+------------ 
    1 |  1 
    1 |  2 
    2 |  1 
    3 |  4 

Questo ti dà il tuo molti-a-molti.

+0

Ecco un video sulla normalizzazione dei database che mi ha aiutato: https://youtu.be/UrYLYV7WSHM –

+0

@ MattG: O leggi il tuo libro :) –

6

È una relazione molti-a-molti. Si memorizzano questi intoducing una "tabella di join".

Table Users: 
----------- 
UserID PK 
Name 
... 


Table Interests 
------- 
InterestID PK 
Description. 
.... 


User_interest 
----------- 
UserID PK, FK 
InterestID PK, FK 
+1

La colonna 'UserInterestID' in 'User_interest' è ridondante. La tabella dovrebbe avere solo due colonne e la sua chiave primaria dovrebbe essere '(UserID, InterestID)'. – Hammerite

+0

Giusto. Ho modificato di conseguenza la risposta. –

+1

suona bene, ma come faccio a interrogare il database per portarmi un elenco degli interessi di un utente utilizzando questo metodo? – Dan

Problemi correlati