我正在尝试在网站上创建一个PHP表单,用于收集用户的姓名,电子邮件,地址和工作经验。名称,电子邮件和地址都非常简单并且有自己的字段,但工作体验表包含三个字段:“时间段”,“雇主”和“位置”,用户可根据需要动态添加多行(JavaScript用于在网站上完成此操作)。
我的问题是,在MySQL数据库中对此进行建模的最佳方法是什么?我只使用这样一个表:
| UserId |名称|电子邮件|地址|时间|雇主|职位|
或者我应该使用这样的两个表:
| UserId |名称|电子邮件|地址|
| UserId |时间|雇主|职位|
我的胆量告诉我第二个解决方案可能就是我需要的,因为我不知道如何将动态数组添加到数据库中。但是如何将第二个表的相同UserIds与第一个表相关联?如果我只使用一个表坚持第一个解决方案,是否可以在一个UserId下保存Time,Employer和Position的数组?请记住,我无法事先知道用户将创建多少行工作经验。
答案 0 :(得分:1)
选项2是正确的,因为它会创建更少的冗余。
表1 | UserId |名称|电子邮件|地址|
表2 | UserId |时间|雇主|职位|
答案 1 :(得分:1)
Table 1 | UserId | Name | Email | Address |
Table 2 |Id| UserId | Time | Employer | Position |
选项2更好,如果你不想进入连接,只需从第一个表中获取$ userId并在第二个表上执行单个查询(WHERE UserId ='$ userId')。这将返回一个用户的所有工作经验的数组。
答案 2 :(得分:1)
Table 2 |Id| UserId | Time | Employer | Position |
这是我猜的正确选项..因为它会减少冗余。
答案 3 :(得分:1)
select u.userid, time, employer, position from user as u left join
user_experience as ue on u.userid = ue.userid
如果您想获取特定用户的数据,只需使用条件
select u.userid, time, employer, position from user as u left join
user_experience as ue on u.userid = ue.userid
where userid = 1