我有用户与不同类型的角色的关系。每个用户对所有角色都不可能。目前,用户最多可以有三个角色。我的用户DTO使用user_name和user_id作为主键。我首先尝试将它实现为user表,每个列都是特定的行,并且具有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")发布于 2014-08-21 01:27:17
我会用这个结构:
表格/字段:
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.ROLENAMEROLEDEFN每个角色将有一行,并将存储每个角色的描述,以便您能够跟踪什么是什么。
ROLEUSER将为每个用户和角色的唯一组合拥有一行。即。如果每个用户有3个角色,那么它将有9行。
如果需要添加新角色,只需添加行,就不需要更改表。
以下是一些基于您的评论的ddl和dml示例-
Fiddle: 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 roledefnhttps://stackoverflow.com/questions/25416915
复制相似问题