【问题标题】:SQL database design for multiple rooms check in and check out times for multiple employees多个房间的SQL数据库设计多个员工的入住和退房时间
【发布时间】:2012-07-11 06:07:51
【问题描述】:

我正在开发一个网络应用程序,用于跟踪工作人员在特定房间的入住和退房时间。我有多个员工,多个房间,以及每个房间的入住和退房时间。每次工人进入或离开房间时,他们都会扫描一个二维码,该二维码在该房间的 URL 中有一个 ID 变量;我需要记录房间、日期/时间、员工姓名以及是否进出。

一种方法是制作一个表格,如下所示:

房间 |员工 |时间 |进出|

数据将被输入数据库,如:

Mens Room, Joe, 6/29 7:30, In

Womens Room, John, 6/29 7:35, In

Mens Room, Joe, 6/29 8:00, Out

Womens Room, John, 6/29 8:05, Out

我想这样查看它:

Mens Room, Joe, 6/29 7:30, In

Mens Room, Joe, 6/29 8:00, Out

Womens Room, John, 6/29 7:35, In

Womens Room, John, 6/29 8:05, Out

我想查看按入住时间排序的数据,但下一行是该房间的下一次退房时间。

【问题讨论】:

    标签: mysql sql database-design


    【解决方案1】:

    您可以使用三个表:

    表 1:员工

    EmpID ....int ........主键
    EmpName ......... varchar(50)

    表 2:房间

    RoomNo ........ int ........ 主键
    RoomDetails ..... varchar(20)

    表 3:EmployeeInOut

    Id ........int ..... P.K
    EmpID ..... int ....... F.K
    RoomNo ......int ........ F.K
    InTime ...... 日期时间
    OutTime ...... 日期时间

    【讨论】:

    • 为什么在第三张表 EmployeeInOut,InnTime,OutTime 中分开制作?我们可以输入 2 个条目,例如时间、方向(即输入/输出)。否则一切都很好。
    • 我确实有前两个表。我确实想像你说的那样做我的第三张桌子,但不知道该怎么做。因为,员工进去的时候会扫描一个二维码,输入PIN,然后出去扫描二维码,输入PIN。我如何将 OutTime 输入到已经创建的行中,其中包含员工扫描时的时间?
    • @SomnathMuluk 因为在查询时您不需要每次都匹配 In 或 Out。您只需要选择适当的列。我觉得把它分开比较好,反正你的选择也行。
    • @ScottK 您只需要更新 OutTime 列。有什么问题?
    • 从 EmployeeInOut 表中选择该员工的 max(Id) 并更新 OutTime。
    【解决方案2】:

    创建两个查找表..

    1. 员工{emp_id (pk),员工信息}

    2. 房间{room_id (pk),房间信息}

    还有一个参考表..

    1. Room_Employee_log {log_id (pk), room_id (fk-Room), employee_id (fk-Employee), log_time, direction (in/out)}

    【讨论】:

    • 这是我前进的方向。我试图弄清楚如何以有意义的方式查看数据。经理希望能够查看何时进入和离开房间,查看花费了多少时间等。我正在考虑如何查看我在问题中描述的方式,但不确定如何查询。
    • select e.name,r.name,l.time from Room_Employee_log l left join employee e on e.employee_id=l.employee_id left join room r on r.room_id=l.room_id order by l.employee_id,l.time;
    • 我如何查询它,以便房间 a 'out' log_time 直接在房间 a 'in' log_time 之后,而房间 b 'in' log_in 时间介于房间 a 和房间之间出去?
    • 请看查询,我已经按employee_id和log_time排序了记录,所以一个员工不离开第一个房间就不能进入第二个房间!!正确的?它会根据您的需要自动对数据进行排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2012-03-06
    • 2014-07-18
    • 2018-07-05
    • 2017-05-12
    相关资源
    最近更新 更多