我将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")
答案 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