首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL用户关系

SQL用户关系
EN

Stack Overflow用户
提问于 2014-08-21 01:20:19
回答 1查看 334关注 0票数 0

我有用户与不同类型的角色的关系。每个用户对所有角色都不可能。目前,用户最多可以有三个角色。我的用户DTO使用user_name和user_id作为主键。我首先尝试将它实现为user表,每个列都是特定的行,并且具有true和false值。相反,我选择使用一个字符串来连接该用户的所有三个角色。如何实现以java和jdbc编写的支持我的模型?

代码语言:javascript
复制
CREATE TABLE USERS 
   (    "USER_NAME" VARCHAR2(50 BYTE) NOT NULL ENABLE, 
    "USER_ID" VARCHAR2(50 BYTE) NOT NULL ENABLE, 
    "USER_PASSWORD" VARCHAR2(50 BYTE) NOT NULL ENABLE, 
    "USER_TYPE" VARCHAR2(50 BYTE), 
    "FIRST_NAME" VARCHAR2(50 BYTE), 
    "LAST_NAME" VARCHAR2(50 BYTE), 
    "CREATION_DATE" VARCHAR2(50 BYTE), 
     CONSTRAINT "USER_NAME_PK" PRIMARY KEY ("USER_NAME")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 01:27:17

我会用这个结构:

表格/字段:

代码语言:javascript
复制
USERS (USER_NAME, USER_ID, USER_PASSWORD, USER_TYPE, FIRST_NAME, LAST_NAME)
USER_TYPES (USER_TYPE, DESCR)
ROLEDEFN (ROLENAME, DESCR)
ROLEUSER (USER_NAME, ROLENAME)

外键:

代码语言:javascript
复制
USERS.USER_TYPE references USER_TYPES.USER_TYPE
ROLEUSER.ROLENAME references ROLEDEFN.ROLENAME

ROLEDEFN每个角色将有一行,并将存储每个角色的描述,以便您能够跟踪什么是什么。

ROLEUSER将为每个用户和角色的唯一组合拥有一行。即。如果每个用户有3个角色,那么它将有9行。

如果需要添加新角色,只需添加行,就不需要更改表。

以下是一些基于您的评论的ddl和dml示例-

Fiddle: http://sqlfiddle.com/#!4/a968d/1/0

代码语言:javascript
复制
create table roledefn
(
    rolename varchar2(20),
    descr varchar2(40),
    constraint role_pk primary key (rolename)
);

create table roleuser
(
    user_name varchar2(20),
    rolename varchar2(20),
    constraint role_fk foreign key (rolename)
    references roledefn (rolename)
);

insert into roledefn values ('admin','allows you to do admin stuff');
insert into roledefn values ('client','allows you to do client stuff');
insert into roledefn values ('worker','allows you to do worker stuff');

insert into roleuser values ('A','admin');
insert into roleuser values ('A','client');
insert into roleuser values ('A','worker');
insert into roleuser values ('B','admin');

select user_name, rolename, descr
from roleuser natural join roledefn
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25416915

复制
相关文章

相似问题

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