2011-09-05 83 views
1

之間的鏈接大量價值不措辭我的問題非常好,但這些表:設計數據庫:表

USER TABLE      ANIMALS 
    u_id username     a_id animal 
    --------------------------  --------------------------- 
     2 alice      1 cat 
     4 brian      2 small dog 
     7 carla      3 big dog 
             4 rabbit 
             5 guinea pig 
             etc. 

我希望用戶能夠自己擁有但許多動物添加到他們的個人資料。

什麼新的表格/字段和數據類型是我最好的辦法呢?

謝謝。

回答

3

如果您需要爲每個用戶允許多種類型的相同動物(珍妮特可以有多個兔子),請執行以下操作。使UserId和AnimalID成爲主鍵。

我只想做

UserAnimals 
------------ 
UserId 
AnimalID 

數據的桌上擺滿可能是這樣的:

UserAnimals 
------------ 
UserId || AnimalId 
     4 || 3 
     4 || 2 
     7 || 4 

布萊恩有一個小的狗和一隻大狗。卡拉有一隻兔子。

+0

謝謝你的回答。 – penpen

+0

謝謝你的回答。 我的例子中的一個缺陷是你只能擁有一種類型的動物。 我考慮過使用一個像你說的表(減去數量字段)但不會有大量冗餘數據,特別是如果它是一個非常大的表? 有沒有有效的方式做這樣的表: 表名稱 - UserAnimals。 FIELD - User_ID(例如值:「4」)。 FIELD - Animal_IDS(例如值:「1,2,5」)。 – penpen

+0

這正是我的答案是...沒有數量列。我會用一個例子來修改我的答案。 –

0

我會推薦你​​多對多的關係表。

例子:id爲

table: users_x_animals 
----------------------- 
pid | u_id | a_id 
1  2  3 
2  4  5 
3  2  5 
4  7  1 
5  4  2 

這樣,如果你有U_ID指數(獨立)和A_ID您可以任意查詢「ID爲X的動物是由用戶擁有」或者周圍的其他方式「用戶x擁有這些動物「。

希望有所幫助。 :)

+1

如果用戶只能有一種類型的動物(珍妮特可以有許多動物,但只有一隻兔子),那麼你可以刪除主鍵列並將u_id和a_id列作爲主鍵。 –

+0

是的,這是真的,因爲主鍵是獨特的,我以爲一個用戶可以添加一種動物,例如我可以有兩隻貓「朱莉」和「湯姆」,我想添加「貓」我的動物列出兩次,一次是「朱莉」,一次是「湯姆」。 Up投票:) – ludesign

+0

OP沒有指定他們是否需要支持多種類型的相同動物......我修改了我的答案,在Janet可以有2只兔子的場景中使用數量列。你的解決方案也適用於這種情況,但我認爲一個數量列比爲這個目的計數行要好。 –

1

本質上你需要一個表,將用戶ID映射到動物ID。 如果你想將它們添加1的時間,你可以只使用一個表像這樣:

UserAnimals 
----------- 
UserID (fk to User Table) 
AnimalId (fk to Animal Table) 

假設他們可能擁有,說3只狗,你要跟蹤的號碼,你既可以有每個動物或行,你可以修改表,包括各類型的動物的數量:

UserAnimals 
----------- 
UserID 
AnimalID 
Count 

我可能這樣做的,如果我知道有一個很好的機會,人們將有數倍一個給定的動物,否則當檢索到達總數時還有更多的工作要做。

我想人們可以提出這樣的觀點:ID字段對動物來說也不是絕對必要的。它可能只是一個字符串查找表,雖然這需要更多的空間用於存儲,並且如果您決定由於某種原因決定修改動物名稱,則會使事情稍微複雜一些。

+0

Upvoted是迄今爲止唯一提及外鍵的人。但新表上的主鍵應該是(UserID,AnimalID),我相信OP也需要知道這一點。 –

+0

@Catcall,感謝您的支持。當然,表上的主鍵將取決於OP是否添加一個Count列 - 顯然如果沒有Count列並且需要有N個狗,例如我們不能創建PK(UserID,AnimalID ) - 因爲在那個點上會有N行有相同的用戶ID,所以AnimalID組合 - 可能會在那裏拋出單向ID,我想。雖然我可能傾向於與自己的Count領域一起去。 – itsmatt