将数据拆分为多个表

时间:2009-08-26 15:41:14

标签: php mysql

我正在建立员工页面。

有些信息会进入“员工”表格,但有些信息会进入“可用性”表格,该表格会引用“员工”表格:

可用性: id / employeeid(来自employees表的唯一ID)/ monday available /以及on on和on /

因此,在创建员工表之前,我没有该员工表中的唯一ID。

在我设置员工信息然后查询以获取员工表中最后创建的行,然后使用其中的唯一ID来设置可用性时,可以进行查询吗?

或者是那么混乱,我应该有一个创建员工页面,然后是一个设置可用性页面吗?

所以基本上我想知道它是否更清晰,更好'编码来分离这两个功能?

5 个答案:

答案 0 :(得分:3)

添加@ Quassnoi的回答:

您可以添加员工记录,然后使用MySQL LAST_INSERT_ID()功能查找您添加的employee记录的自动增量唯一ID。然后,您可以将该值反馈回availability INSERT语句。

更多详细信息,请参见http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html

的MySQL手册页

重要的是不要使用SELECT语句(例如SELECT MAX(employee.id)),因为可能还有其他用途添加记录。 LAST_INSERT_ID()特定于您的连接

答案 1 :(得分:1)

当然先创建employee,然后再创建availability

如果您的表是InnoDB,您可以在事务中执行此操作,以便在出现问题时可以回滚整个更新。

答案 2 :(得分:1)

  

在我设置的地方进行查询是否可以   员工信息,然后查询   获取最后创建的行   员工表然后使用唯一   id来自那个设置   可用性...

是的,听起来不错。如果对employeeid使用自动增量列,则可以使用mysql_insert_id()或等效项来安全地检索最后插入的ID。不要SELECT MAX(employeeid) FROM ....,因为当大量人员同时使用它时,您可能会遇到问题。

答案 3 :(得分:1)

您可以通过

轻松获取最后一个未记录的记录
mysql_insert_id()

之后,您可以插入所需员工的可用性记录。 注意:我会选择一个处理这些问题的框架,比如Symfony或Cake。

答案 4 :(得分:1)

使用“最后创建的行”可能并不总是以您期望的方式工作,如果有增长或者另一个程序员承担该项目,将来可能会使事情复杂化。如果我理解你在寻找什么,你应该有3个表。应使用一个员工表,一个可用表和第三个表来存储关联的唯一记录。在关联表中,每一行都有以下列:唯一ID,员工ID,可用性ID。