在同一列的数据库中存储不同的值

时间:2014-09-22 05:45:58

标签: php mysql database

我是数据库的初学者。我正在网站上工作,我必须在不同用户的数据库中保存教育资格。例如

  

有一位用户Alex.He毕业于新加坡的计算机科学专业   大学于2006年。他还是加拿大计算机科学硕士   大学在2009年。

不同的用户会有所不同。

我应该为所有教育资格考试新表,并将id提供给用户表。

Select * from users,education;

如何将此保存在数据库中并记住最佳实践?

先谢谢。 :)

2 个答案:

答案 0 :(得分:0)

您必须创建2个表,例如用户和教育

用户表结构就像 id username等等

教育 id user_id course / degree

然后你可以获取就像

select * from users as u ,education as e where u.id = e.user_id

答案 1 :(得分:0)

您希望normalize您的数据,这意味着删除冗余和不一致。虽然您可以通过2个表格来完成粗略版本的布局,您可以让用户接受多种教育,但您要确保自己不会为自己创造更多的工作这条路。

2表布局的问题在于您可能拥有相同学校,学位或专业的记录,但可能会以不同方式输入。

所以如果你做了一个像`SELECT * FROM users INNER JOIN education的搜索 ON users.user_id = education.user_id WHERE education.major LIKE'%Computer Science%'如果某些专业的输入类似于" CompSci,那么你可能无法返回相关专业的所有结果。"

所以你可能实际上有多个表。这些多个表的一个示例可能是:

  • 用户
  • user_degrees
  • 学校
  • degree_types
  • 专业
  • 状态
  • 国家

user_degrees的表格结构可能如下所示:

  • user_degree_id(INT)
  • user_id(INT)
  • school_id(INT)
  • degree_type_id(INT)
  • major_id(INT)
  • gradu_year(DATETIME)

学校看起来像这样:

  • school_id(INT)
  • school_name(TINYTEXT)
  • school_city(VARCHAR(45))
  • state_id(INT)
  • country_id(INT)

学位类型可能是:

  • 艺术副学士
  • 科学副学士
  • 文学士
  • 大师
  • 博士

several other types of degrees

你明白了。基本上,前提是您输入每种类型记录的信息一次,然后您可以将该信息与各种表交叉关联,而无需再次输入。此外,它允许使用相同信息对任何记录进行全局更改。

您可read more about Database normalization