SQL用户关系

时间:2014-08-21 01:20:20

标签: sql jdbc relational-database

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

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")

1 个答案:

答案 0 :(得分:0)

我会使用这种结构:

表/领域:

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)

外键:

USERS.USER_TYPE references USER_TYPES.USER_TYPE
ROLEUSER.ROLENAME references ROLEDEFN.ROLENAME

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

对于用户和角色的每个唯一组合,ROLEUSER将有一行。 IE浏览器。如果有3个用户,每个用户有3个角色,那么它将有9行。

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

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

小提琴: http://sqlfiddle.com/#!4/a968d/1/0

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