mysql — проверяет 3 таблицы из базы данных, сохраняя информацию каждой таблицы для аутентификации в форме входа в систему Переполнение стека

У меня есть такие таблицы

Работник

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   |

Как мне сделать стол техник а также Работник стать пользователем, чтобы они могли использовать свою информацию в качестве имени пользователя в форме входа? Кроме того, я хочу, чтобы каждый идентификатор (а не идентификатор «AutoIncrement») техник а также Работник станет именем пользователя.

Как управлять базой данных, как это?

или я должен добавить столбец пароля в обеих таблицах? (Сотрудник и техник)

или я должен сделать одну таблицу, как это?

(новый) Admin

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     |

Нет никаких отношений между техником и сотрудником (отдельный стол)

0

Решение

В вашем случае вам лучше будет составить таблицы в форме нормализации следующим образом:

Сотрудники

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

Вот еще один пример иностранный ключ использование.

Чтобы больше понять нормализацию, взгляните на эта тема.

1

Другие решения

Других решений пока нет …