从数据库中检查 3 table,同时保留每个 table 的信息以验证登录表单 php

Check 3 table from database while kept the information of each table for authenticate login form php

我有 table 个这样的

员工

Id | IdEmployee  | Employee | Address     | Phone_num | 
1  | EM10000     |  Jack    | wall st.    | 9000010   | 
2  | EM10001     |  Paul    | elm st.     | 9000010   |
3  | EM10002     |  George  | ex  st .    | 9000010   |

技术员

id | IdTech      | TechName | Address      | phone_num | 
1  | TE10000     | Gabut    | Hello st.    | 9000010   | 
2  | TE10001     | Polnaref | coding st.   | 9000010   |
3  | TE10002     | Rafioli  | stack st.    | 9000010   |

管理员

id | IdAdmin     | username | password     | phone_num | 
1  | AM10000     |  sim1    | 1234         | 9000010   | 
2  | AM10001     |  sim2    | luvcoding    | 9000010   |
3  | AM10002     |  sim3    | okaymate     | 9000010   |

如何让 Table 技术人员员工 也成为用户,这样他们就可以将他们的信息用作用户名在登录表单中?另外,我希望 TechnicianEmployee 的每个 ID(不是 "AutoIncrement" ID)都将成为用户名。

如何管理这样的数据库?

还是我应该在两个 table 中都添加密码列? (员工和技术员)

还是我应该像这样制作一个table?

(新)管理员

id | Id          | username | password     | phone_num | 
1  | AM10000     |  sim1    | 1234         | 9000010   | 
2  | AM10001     |  sim2    | luvcoding    | 9000010   |
3  | AM10002     |  sim3    | okaymate     | 9000010   |
4  | AM10003     |  EM10000 | test1        |  NULL     |
5  | AM10004     |  EM10001 | test2        |  NULL     |
6  | AM10005     | EM10002  | test3        |  NULL     |
7  | AM10006     | TE10000  | 1234         |  NULL     | 
8  | AM10007     | TE10001  | ok123        |  NULL     |

Technician 和 Employee 之间没有关系(独立 table)

在您的情况下,您最好按如下规范化形式制作表格:

员工

IdEmployee  | Employee | Address     | Phone_num 
EM10000     |  Jack    | wall st.    | 9000010  
EM10001     |  Paul    | elm st.     | 9000010  
EM10002     |  George  | ex  st .    | 9000010 

技术人员

IdEmployee | TechName 
TE10000    | Gabut   
TE10001    | Polnaref

管理员

IdEmployee  |  Password  
TE10001     |  hashed_pass1 
EM10002     |  hashed_pass2 

这确保您没有复制数据,并确保您可以使用外键正确关联表。

因此,如果您的管理员有 IdAdmin 'EM10002',要使用以下查询获取该员工的密码:

// Will return a row with EM10002's password, which is 'hashed_pass2'. 
SELECT Password from Admins WHERE IdEmployee = EM10002

这是 foreign key 用法的另一个示例。

要进一步了解归一化,请查看 this thread