postgresql - 我真的需要为我的三种类型的用户提供单独的表吗?

标签 postgresql database-design

如果我有三种类型的用户。比方说卖家、消费者和销售人员。我应该为名称、电子邮件密码和所有其他凭据等详细信息制作单独的表,并为每个表创建一个 role_type 表或单独的表。考虑到 DBMS 的所有工程原理(如规范化等),对于大型项目,哪种方法是最佳方法。

另请告诉我,如果我在表中有很多连接来执行某些操作,它会影响应用程序的性能吗?

最佳答案

如果区分这些人的唯一是角色,但所有细节都相同,那么我肯定会选择单 table 。

然而,问题是,一个人可以担任多个角色吗?如果不是这种情况,则向人员表添加一个 role_type 列。根据这些角色的固定程度,可能会使用查找表和外键,例如:

create table role_type
(
   id integer primary key,
   name varchar(20) not null unique
);

create table person
(
  id integer primary key, 
  .... other attributes ..., 
  role_id integer not null references role_type
);

但是,根据我的经验,每个人只能担任一个角色的限制通常不成立,因此您需要多对多关系

create table role_type
(
   id integer primary key,
   name varchar(20) not null unique
);

create table person
(
  id integer primary key, 
  .... other attributes ..., 
);

create table person_role
(
  person_id integer not null references person, 
  role_id integer not null references role_type, 
  primary key (person_id, role_id)
);

关于postgresql - 我真的需要为我的三种类型的用户提供单独的表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55060480/

相关文章:

postgresql - 如何创建一个通常在条目更新之前的条目后运行的函数?

postgresql - Postgres jsonb_set 多个嵌套字段

sql - 插入或更新另一个表时更新表中列的 Postgresql 触发器

sql - 数据库作业调度

mysql - 不必要的标准化

mysql - 具有多态关联的数据方案

sql查询转json结果

mysql - 为什么像 Postgresql 和 Mysql 这样的开源数据库没有加密存储过程?

SQL:帮我优化 mySQL

php - 高级数据库设计 - 执行以下操作的最有效方法是什么