2011-10-14 13 views
9

Mam tabelę użytkowników (ID, FNAME, LNAME, ZAINTERESOWANIA, ...) oraz inną tabelę, w której można przechowywać określony zestaw ZAINTERESOWANIA, z których mogą wybrać: Film, TV, Radio, Stage, Standup.Przechowuj listę wartości (takich jak zainteresowania)

Mogą mieć więcej niż jedno zainteresowanie, więc w jaki sposób mogę przechowywać te informacje w polu ZAINTERESOWANIA UŻYTKOWNIKÓW? Lub jaka jest najlepsza alternatywna metoda, aby to osiągnąć?

+0

To pomogło mi: http://stackoverflow.com/questions/1009025/facebook-database-design –

Odpowiedz

0

najlepszym rozwiązaniem jest, aby korzystać z 3 tabel (a trzeci do przechowywania połączenie interesów do Useres):

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

To się nazywa database normalization.

3

Przeczytaj o database normalisation w książce MySQL. To ważny temat, więc prawdopodobnie istnieje duży rozdział na ten temat.

W skrócie, usunąć interests i zamiast skończyć z trzecim stole, jak:

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

To daje swój wiele-do-wielu.

+0

Oto film o normalizacji bazy danych, który pomógł mi: https://youtu.be/UrYLYV7WSHM –

+0

@ MattG: Lub przeczytaj książkę :) –

6

Jest to relacja wiele do wielu. Przechowujesz je, wprowadzając "tabelę złączeń".

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


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


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

Kolumna 'UserInterestID' w' User_interest' jest nadmiarowa. Tabela powinna mieć tylko dwie kolumny, a jej kluczem podstawowym powinno być '(identyfikator użytkownika, identyfikator_dysku). – Hammerite

+0

Całkiem dobrze. Odpowiednio zmienili odpowiedź. –

+1

brzmi dobrze, ale jak mogę zapytać bazę danych, aby wyświetlić listę zainteresowań użytkownika za pomocą tej metody? – Dan

Powiązane problemy