首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >供多个表登录的用户表

供多个表登录的用户表
EN

Stack Overflow用户
提问于 2020-05-02 07:02:58
回答 4查看 199关注 0票数 0

我正在尝试构建学校管理系统,但我在设计最佳数据库结构时遇到了麻烦。我有学生,教职员工和用户表用于登录。用户表将只包含登录信息(userNumber、密码),而学生和教职员工将包含个人信息。我将学生和教职员工分开,因为他们包含不同的个人数据。但他们都有一个userNumber。

代码语言:javascript
复制
users(
id,
userNumber,
password
)

students(
id,
studentNumber,
name,
age
)

staff(
id,
staffNumber,
name,
age,
salary,
dateOfHiring,
staffType
)

假设我使用userNumber 98242登录,如何让系统知道我应该在学生表还是教员表中查找?

我想要一些关于数据库结构的建议。

EN

回答 4

Stack Overflow用户

发布于 2020-05-02 07:07:51

只需向users表添加列userType

票数 0
EN

Stack Overflow用户

发布于 2020-05-02 07:10:35

你可以做一些事情。您可以在users表中创建一个类型并进行查找。您还可以连接这两个表,然后在收到记录时检查是否返回了学生id或教职员工id。

那么您的查询可能如下所示

代码语言:javascript
复制
SELECT users.id as user_id, students.id, staff.id FROM users 
LEFT JOIN students ON users.id = students.id
LEFT JOIN staff ON users.id = staff.id
WHERE id = 98242
票数 0
EN

Stack Overflow用户

发布于 2020-05-02 07:18:39

Inheritance:

代码语言:javascript
复制
create table persons (
  id,
  name,
  age
);

create table users (
  number,
  password
) inherits (persons);

create table students (
) inherits (users);

create table stuff (
  salary,
  dateOfHiring,
  staffType
) inherits (users);

简单地说,就像这样。使用tableoid system column,您可以知道特定行的原点:

代码语言:javascript
复制
select
  *,
  tableoid::regclass -- Prints the origin table name (users, students, stuff, ...)
from users
where number = 98242;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61552136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档