我如何将外键应用于此特定要求

时间:2015-02-02 12:59:20

标签: php mysql database innodb

我目前正在制作一个薪资单系统,其中有两个表,account_tablepayslip_table。我目前在数据库设计方面遇到了麻烦,我在创建两个表之间的关系或根本不创建一个表之间徘徊。我想我首先要解释一下这个系统的工作原理:

  1. 管理员登录网站
  2. 管理员转到上传工资单页面
  3. 管理员上传excel文件,后端代码解析excel文件并将其保存在数据库中
  4. 用户登录网站
  5. 用户转到薪资单页面
  6. Payslip页面显示employee_id为session_user的行(因为用户的用户名是他的employee_id)
  7. 帐户表格包含以下列:
    employee_id
    2.密码
    3. first_name
    4. last_name
    5. user_type

    薪资单表格包括以下栏目:
    payslip_id
    2. employee_id
    工资
    税收 5. total_deductions
    6. total_salary

    此系统的要求是,即使用户不是某个用户的帐户,所有者也希望上传工资单。

    Q值。那你的桌子为什么这样设计呢? 答:薪酬单本质上有一个employee_id,它的存在是决定哪个工资单所拥有的关键。为了让我有效地显示薪资单,我需要做的就是将会话用户(我提到的是他们的员工ID,因为它的用户名)与payslip表上的employee_id进行比较,然后回显一下被击中了。

    Q值。当用户不再是员工时,工资单会发生什么变化? payslip_table上会有无用的行 答:我已经决定创建一个名为created_on的列,并添加一个triger来删除3个月前的工资单(因为它们已经没用了)

    Q值。当用户不再是员工时,帐户会发生什么? A.管理员有权删除用户,一旦用户离开公司,管理员可以终止帐户,如上所述,已删除用户的工资单最终将被删除

    Q值。为什么要经历这一切呢? 答:业主明确表示,即使尚未开立账户,他也想准备好工资单,如果有人创建账户,他的工资单自动准备好查看

    我对数据库设计知之甚少,而且我对建议非常开放。

    或者,如果你们可以建议一种使用外键实现要求的替代方法,那么这将是最好的方法。

1 个答案:

答案 0 :(得分:0)

您应该在两者之间创建关系,如您所见here,您将能够将空值添加到外键字段中,并稍后使用employee_id填充它。

这将有助于查找行,并确保没有浪费空间的无用数据。

我看到的唯一问题是管理员如何将系统上已有的工资单链接到新的员工帐户。例如找到新员工编号的正确工资单