我正在研究这些表:
staff(staffID, staffName, branchID, address, phone, lastUpdatedDate)
branchRef(branchID, branchName)
生成按分支
分类的员工详细信息报告SELECT staffID, staffName, staff.branchID, address, phone, lastUpdateDate, branchName
FROM staff, branchRef
WHERE staff.branchID=branchRef.branchIC
例如,如果,John在2011年的Branch01和Branch03 2012中,那么。更新到(Branch02,2012)时如何保留(Branch01,2011)。我已经读过使用触发器来完成这项工作,触发器涉及几乎所有的字段,但我只希望保留旧的branchID的记录。这个问题有什么建议吗?谢谢!
答案 0 :(得分:0)
听起来您需要更新数据模型。
没有考虑到工作人员可能会切换branches.c
触发器无法帮助您解决此问题。
你可以:
staff_member_works_in_branch
,其中包含start_date
和end_date
,staffId
和branchId
等字段,以表示新的m:n关系。您的报告可能需要更新。 (推荐的解决方案,如果您经常这样做) 答案 1 :(得分:0)
目前,您有一对多关系:一名员工有一个分支,但一个分支有很多员工。
如果一名工作人员现在能够成为多个分支机构的一部分(即使是历史记录,正如您在评论中所说的那样),那么这种关系将成为多对多关系。除此之外我想想你想让其他分支机构按顺序排列,所以你可以做的是:
保持现有表格不变,但从员工处删除branchId:
staff(staffID, staffName, address, phone, lastUpdatedDate)
branchRef(branchID, branchName)
创建一个新表staff_branches
,用于保存它们之间的关系:
staff_branches(staffID, branchID)
表的主键是两个字段。现在您应该实现这些表的顺序。如果您只关心订单,只需添加一个包含该订单的整数字段(1,2等)。如果您想获得其他信息(例如工作人员在该分支机构中开始的日期),只需使用orderField的日期:
staff_branches(staffID, branchID, orderField)
完成后,您可以通过在该表中搜索具有该staffId的max(orderField)的分支来查询员工的当前分支。