2012-12-22 44 views
1

問題出在這裏:插入帶複選框的信息

用戶將在必填字段中輸入他的信息。然後,用戶將在複選框(用戶可以選擇多個)中選擇一個將被保存在數據庫中的選項(複選框的值)。

例如:

David選擇了2個選項。例如運動。大衛選擇籃球和排球。 在我的數據庫,它是這樣的:

| id | firstname | lastname | sports  | 
| 1 | David  | White  | Basketball | 
| 2 | David  | White  | Volleyball | 

我的主要問題是,如果我有權改變或者刪除這些信息,只有一行將被更改或刪除這是一個很大的問題。我無法讓它在爆炸或內爆中發生,因爲我已經顯示有多少用戶選擇了某項運動。

我該如何解決這個問題?

+0

這裏是一個不錯的指南數據庫規範化:HTTP://en.wikipedia。 org/wiki/Database_normalization(更新:看起來像英文頁面不如德文版...但它會給你一個方向) –

回答

1

看起來你需要規範你的表格。您可以創建一個表來存儲個人數據:

person = (personid, firstname, lastname, other fields related to person) 

和一個表來存儲的選擇:

sport = (sportid, name, other data related to sport) 

最後一張表來管理的關係:

PersonSport = (personid, sportid) 

然後在上述情況下,您的數據將爲:

Person 
personid Firstname Lastname 
    1   David  White 
    2   Sam   Black 

Sport 
sportid  name 
1    Basketball 
2    Football 
3    Tiddlywinks 

PersonSport 
Personid Sportid 
    1  1 
    1  2 
    2  3 
    2  1 

要統計有多少用戶選擇的運動:

Select count(*) from PersonSport where sportid = 1; 
+0

你可以告訴我,當我將刪除所需的SQL語句吃掉大衛的全部信息? Personid並不是遞增的嗎? – Jeyrus

+0

人與體育有n:m關係,所以我會創建三個表:Person,Sports和一個轉換表(例如PersonSports)。 –

+0

那就是@FabioPoloni。假設有更多關於運動的數據需要存儲,那麼我列出的名爲Sports的表應該是PersonSport,它將包含Sport和Person的主鍵。 –