我会选择这样的设置。
这将保存所有用户过去的经验
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
这将保存用户的工作经验 - positions 和 users 的“中间”表。
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 人”的工作经验
-
work_experience.seeker_user 引用 users.user_id
-
work_experience.seeker_position 引用 positions.position_id