最近要做一个系统,现在要设计数据库中的字段,字段大致如下:用户名(唯一性主键)、密码、密码问题、密码答案、姓名、性别、年龄、身高、家乡、大学、入学年份。
现在要设计表,不知道该怎么设计,是设计成一张表还是多张表?自己感觉如果设计成一张表,表中字段比较多,不过好像没违反三范式;如果设计成两张表,两表的主键又好像都是用户名,是一样的。所以不知道该怎么设计?大家帮帮忙!!在下先感谢了!!
现在要设计表,不知道该怎么设计,是设计成一张表还是多张表?自己感觉如果设计成一张表,表中字段比较多,不过好像没违反三范式;如果设计成两张表,两表的主键又好像都是用户名,是一样的。所以不知道该怎么设计?大家帮帮忙!!在下先感谢了!!
单从字段来说,远不算多
可以做成两张表的
用户密码表(用户ID(唯一性主键)、密码、密码问题、密码答案)
用户基本信息表(用户ID(唯一性主键)、姓名、性别、年龄、身高、家乡、大学、入学年份)
是不是设置一个用户编号,int类型,让其自动递增,然后用户名(就是起的一昵称)也加入其中,这样可以吗?
/* Table: PASSWORD_QUESTION */
/*==============================================================*/
create table PASSWORD_QUESTION (
ID INT not null,
QUESTION VARCHAR(30) not null,
constraint PK_PASSWORD_QUESTION primary key (ID)
);comment on table PASSWORD_QUESTION is
'密码保护问题';/*==============================================================*/
/* Table: USER_INFO */
/*==============================================================*/
create table USER_INFO (
USERNAME VARCHAR(10) not null,
NAME VARCHAR(20),
SEX CHAR(2),
BIRTHDAY DATE,
HEIGHT DECIMAL(4, 1),
HOME VARCHAR(40),
COLLEAGE VARCHAR(30),
SCHOOL_DAY INT,
constraint PK_USER_INFO primary key (USERNAME)
);comment on table USER_INFO is
'这是用户基本信息表';/*==============================================================*/
/* Table: USER_LOGIN */
/*==============================================================*/
create table USER_LOGIN (
USERNAME VARCHAR(10) not null,
PASSWORD VARCHAR(16) not null,
PRO_QUESTION INT,
PRO_ANSWER VARCHAR(40),
constraint PK_USER_LOGIN primary key (USERNAME)
);comment on table USER_LOGIN is
'这是用户注册表';//'用户信息表'中的username参照'用户注册表'
alter table USER_INFO
add constraint FK_USER_INF_R1_USER_LOG foreign key (USERNAME)
references USER_LOGIN (USERNAME);
//'用户注册表'中的密保问题——参照'密保问题表'
alter table USER_LOGIN
add constraint FK_USER_LOG_R2_PASSWORD foreign key (PRO_QUESTION)
references PASSWORD_QUESTION (ID);大家看看我的设计合理不?