【问题标题】:How to organize common columns to a single table?如何将常用列组织到单个表中?
【发布时间】:2022-01-16 23:53:01
【问题描述】:

我对数据库设计非常陌生,我正在创建一个小项目以更好地理解它,我正在尝试提出一个新的学校 crm。我从以下架构开始:

create table student(
    id int not null, 
    firstname varchar(100),
    lastname varchar(100),
    PRIMARY key (id)
);

create table address(
    id int not null, 
    street varchar(30) not null,
    city varchar(30) not null, 
    PRIMARY KEY (id)
);

-- they have own roles for app
create table guardians(
    id int not null, 
    firstname varchar(100),
    lastname varchar(100),
    primary key (id)
);

--  teacher have own roles
create table teacher(
    id int not null, 
    firstname varchar(100),
    lastname varchar(100),
    PRIMARY key (id)
)

guardiansteachers 将有 password 用于登录门户网站。我创建单独表的原因主要是因为teachers将来可能会有salaryschoolId等列。但是现在如果我看一下这里的架构,大部分firstNamelastname 对所有studentteacherguardians 都很常见。

如何为此类可重复的字段名称创建一个公用表?还是这个设计好?我还想要另一个表ROLE,它将在应用程序级别授予权限以更新/插入某些表。不知道我该如何设计它。

【问题讨论】:

    标签: database postgresql


    【解决方案1】:

    您计划的架构最终将在不同的表中具有大量冗余(如您为三个表中的每一个所描述的 firstName 和 lastName)。此外,如果将来出现新角色,您将创建新表并导致更多冗余。

    我建议您最好为用户创建一个表并在该表中定义用户的角色。

    例如:

    create table user(
        u_id int not null, 
        firstname varchar(100),
        lastname varchar(100),
        role varchar(100),
        PRIMARY key (id)
    );
    

    您可以在不同的表中维护角色特定的数据,并且可以通过用户表的主键访问。

    例如:

    create table teacher(
        t_id int not null,
        u_id int,
        Salary int,
        qualification varchar(100),
        PRIMARY key (id),
        FOREIGN KEY (u_id) REFERENCES user(u_id)
    )
    

    在用户表中有一个角色列也可以解决您的第二个问题。

    【讨论】:

    • 这是个好主意,guardians table 仍然可以保持学生和家长之间的关系对吗?
    • 您可以将监护人详细信息(名字、姓氏等)存储在用户表中,并将监护人表的规格存储在另一个表中,例如教师。在该表中,您可以处理学生和家长的关系。
    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 2017-01-19
    • 2012-10-10
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多