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


How would I apply foreign keys to this specific requirement

我目前正在制作一个工资单系统,其中有两个表,account_table表和payslip_table表。我目前在数据库设计方面遇到问题,我在创建两个表之间的关系或根本不创建一个表之间左右为难。我想我将首先解释这个系统是如何工作的:

  1. 管理员登录到站点
  2. 管理员转到上传工资单页面
  3. 管理员上传 excel 文件,后端代码解析 excel 文件并将其保存在数据库中
  4. 用户登录到站点
  5. 用户转到工资单页面
  6. 工资单页面显示employee_id为session_user的行(因为用户的用户名是他的employee_id)

客户表包含以下列:
1. employee_id
2. 密码
3. first_name
4. last_name
5. user_type

工资单表包含以下列:
1. payslip_id
2. employee_id
3. 工资
4. 税
5. total_deductions
6. total_salary

该系统的要求是,即使"没有用户的帐户",所有者也希望上传工资单。

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

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

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

问。为什么要经历所有这些麻烦?
一个。所有者特别表示,即使尚未创建帐户,他也希望准备好工资单,因此如果一个人要创建一个帐户,他的工资单会自动准备好查看

我对数据库设计知之甚少,我非常乐于接受建议。

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

您应该在

两者之间创建关系,正如您在此处看到的,您将能够将 null 值添加到外键字段中,并在以后用 employee_id 填充它。

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

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