多个选项复选框sql设计

时间:2014-01-17 22:45:22

标签: mysql sql database-design

我想知道存储多个复选框值的最佳方法是什么,以便于搜索。

如果技能表(足球,游泳,跳舞......)有任何优势吗?我指定了唯一的ID,或者我应该使用唯一的字符串 - 确切的单词存储在数据库中?

如果答案是"数字"并且总可用选项超过" 10"我应该从10开始增加id,这样我就可以避免在%2%时找到12,2,22,以防存储在14,23,34 /足球,游泳,在用户桌上跳舞。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

使用3个表:

  1. Person表。这包含单值属性,如姓名,生日等。
  2. Skills表。这包含每项技能的名称。
  3. PersonSkills表。这是一个关系表,包含前两个表之间的多对多关系。它有两列:Person_idSkill_id,它们是前两个表中的外键。
  4. 要获得所有技能,请加入表格:

    SELECT person_name, GROUP_CONCAT(skill_name) skills
    FROM Person p
    LEFT JOIN PersonSkills ps ON p.person_id = ps.person_id
    JOIN Skills s ON s.skill_id = ps.skill_id
    

    让所有具有特定技能的人:

    SELECT person_name
    FROM Person p
    JOIN PersonSkills ps ON p.person_id = ps.person_id
    JOIN Skills s ON s.skill_id = ps.skill_id
    WHERE skill_name = "swimming"