2011-10-14 23 views
9

Kullanıcılardan oluşan bir tablo (ID, FNAME, LNAME, INTERESTS, ...) ve bunlardan seçim yapabileceğiniz belirli INTERESTS setini tutacak başka bir tablo var: Film, TV, Radyo, Sahne, Standup.Değerler listesi (ilgi alanları gibi)

Birden fazla ilgi alanına sahip olabilirler, bu nedenle bu bilgileri Kullanıcılar INTERESTS alanının alanına nasıl kaydedebilirim? Ya da bunu başarmak için en iyi alternatif yöntem nedir? Bu database normalization denir

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

:

+0

Bu bana yardımcı: http://stackoverflow.com/questions/1009025/facebook-database-design –

cevap

0

bu en iyi çözüm 3 tablolar (useres için önemli bir bağlantı saklanması için üçüncü bir) kullanmaktır.

3

MySQL kitabınızda database normalisation hakkında bilgi edinin. Bu önemli bir konu, bu yüzden muhtemelen bu konuda büyük bir bölüm var.

gibi Kısacası, interests kaldırıp üçüncü tabloyla yerine sonuna kadar:

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

Bu size-pek çok ilişki verir.

+0

İşte bana yardımcı veritabanı normalleştirme üzerinde bir video: https://youtu.be/UrYLYV7WSHM –

+0

@ MattG: Ya da kitabını oku :) –

6

Çoktan çoğa ilişkisi var. Bunları bir "birleştirme tablosu" nu kullanarak depolarsınız.

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


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


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

'User_interest' içindeki' UserInterestID 'sütunu gereksiz. Tabloda sadece iki sütun bulunmalı ve birincil anahtarı '(UserID, InterestID) olmalıdır. – Hammerite

+0

Oldukça doğru. Buna göre düzeltilmiş bir cevabınız var. –

+1

kulağa hoş geliyor ancak bu yöntemi kullanarak bir kullanıcının ilgi alanlarının bir listesini çıkarmak için veritabanını nasıl sorgularım? – Dan

İlgili konular