2012-12-22 43 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的主键。 –