Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中的对象存储_Mysql_Sql_List_Object_Database Design - Fatal编程技术网

mysql中的对象存储

mysql中的对象存储,mysql,sql,list,object,database-design,Mysql,Sql,List,Object,Database Design,我正在设计一个数据库,求职者必须列出他们以前的工作经验 工作经验是一门具有以下特点的课程: 雇主 职位 我想对这些课程进行建模,展示求职者和他们以前的工作经验之间的联系 我想为以前的工作经验创建一个表格,并将其引用给求职者,但每个求职者都可以有多个工作经验条目,这可能会变得混乱 另一种方法是将用户的所有工作经验存储为求职者表中的列表 我不确定该选择哪一个,我希望得到一些建议,哪些是可以接受的,哪些不是。我们欢迎并要求提供任何其他替代方案。谢谢您最初的想法是处理这种“多对一”情况的常用方法 使

我正在设计一个数据库,求职者必须列出他们以前的工作经验

工作经验是一门具有以下特点的课程:

  • 雇主
  • 职位
我想对这些课程进行建模,展示求职者和他们以前的工作经验之间的联系

我想为以前的工作经验创建一个表格,并将其引用给求职者,但每个求职者都可以有多个工作经验条目,这可能会变得混乱

另一种方法是将用户的所有工作经验存储为求职者表中的列表


我不确定该选择哪一个,我希望得到一些建议,哪些是可以接受的,哪些不是。我们欢迎并要求提供任何其他替代方案。谢谢

您最初的想法是处理这种“多对一”情况的常用方法


使用一个表存储求职者,另一个表存储以前的工作经验,每个PWE都有求职者的外键。(例如“jobseekerId”字段。)

我会使用类似的设置

这将保存所有用户过去的体验

CREATE TABLE `positions` (
  `position_id` int(11) NOT NULL AUTO_INCREMENT,
  `position_name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`position_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
这将保存用户的个人数据

CREATE TABLE `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_firstname` varchar(20) NOT NULL,
  `user_lastname` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
这将保存用户的工作经验-一个用于
职位
用户
的“中间”表格

CREATE TABLE `work_experience` (
  `seeker_id` int(11) NOT NULL AUTO_INCREMENT,
  `seeker_position` int(11) NOT NULL,
  `seeker_employer` varchar(20) NOT NULL,
  `seeker_user` int(11) NOT NULL,
  PRIMARY KEY (`seeker_id`),
  KEY `positon_id` (`seeker_position`),
  KEY `user_id` (`seeker_user`),
  CONSTRAINT `user_id` FOREIGN KEY (`seeker_user`) REFERENCES `users` (`user_id`),
  CONSTRAINT `positon_id` FOREIGN KEY (`seeker_position`) REFERENCES `positions` (`position_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
然后它会像这样工作

SELECT users.* FROM users;
+---------+----------------+---------------+
| user_id | user_firstname | user_lastname |
+---------+----------------+---------------+
|       1 | bob            | bob           |
+---------+----------------+---------------+
1 row in set

SELECT positions.* FROM positions;
+-------------+-------------------+
| position_id | position_name     |
+-------------+-------------------+
|           1 | stackoverflow guy |
+-------------+-------------------+
1 row in set

SELECT work_experience.* FROM work_experience;
+-----------+-----------------+-----------------+-------------+
| seeker_id | seeker_position | seeker_employer | seeker_user |
+-----------+-----------------+-----------------+-------------+
|         1 |               1 | StackExchange   |           1 |
+-----------+-----------------+-----------------+-------------+
1 row in set
用户“1”(bob)曾在“StackExchange”担任“stackoverflow guy”的工作经验

  • 工作经验。搜索者用户
    参考
    用户。用户id
  • 工作经验。求职者职位
    参考
    职位。职位id

感谢您的回复。我也在想,有没有办法把求职者的全部工作经历记录在一份记录中?因此,所有以前的位置都表示在此记录中。或者这种一对多表示是最好的方法吗?好吧,您可以以某种方式将所有这些信息序列化(例如JSON)到jobseeker表中的一个varchar字段中。。。但本质上,数据库表是信息列表。所以任何列表(特别是可变长度的列表)都最适合它自己的表。因此,您可以用两种方法解决问题,但使用两个表更适合数据库为您提供的结构。我喜欢这种设计。您认为即使系统的用户自己指定位置,这对a来说是否合适?这些都不是固定的。另外,我想知道,如果用户添加了另一个职位,我们现在如何将其添加到他的体验中。是的。使用positions表的原因是,您不需要两次存储相同的数据。例如,“系统管理”和“系统管理”是相同的;然而他们却占据了2个条目。我允许用户指定位置,但给他们一个当前存储的位置列表,这些位置与他们尝试输入的位置相似。我明白了。但是假设我们知道每个求职者都有一个独特的职位,我们现在是否可以去掉职位表,将职位作为工作经验表中的一个字段,基本上以@peter-m建议的结构结束?你可以,但你的表格不会正常化,因为你会有“系统管理”和“系统管理”,甚至“系统管理员”的多个条目。