数据库表这样写行不?

需求是这样的:

一个用户对应多个账单,账单对应多个账单分组和账单类型,一个用户又有多个账单分组,一个账单分组又有多个账单类型。



我设计的表结构:

--用户

create table users

(

userId int auto_increment primary key,

userName varchar(50) not null ,

userPass varchar(50) not null

)



--账单分组

create table billGroup

(

groupId int auto_increment primary key,

groupName varchar(50) not null,

userId int not null,

foreign key(userId) references users(userId)

)



--账单类型

create table billType

(

typeId int auto_increment primary key,

typeName varchar(50) not null,

isIncome varchar(20) not null,

groupId int not null,

foreign key(groupId) references billGroup(groupId)

)



--账单

create table bill

(

billId int auto_increment primary key,

amount varchar(20) not null,

content varchar(100) ,

groupId int not null,

typeId int  not null,

billDate varchar(30) not null,

userId int not null,

foreign key(groupId) references billGroup(groupId),

foreign key(typeId) references billType(typeId),

foreign key(userId) references users(userId)

)





欢迎大家提出改正的建议,谢谢~~
问题补充:
需求是这样的:


一个用户对应多个账单,账单对应多个账单分组和账单类型,一个用户又有多个账单分组,一个账单分组又有多个账单类型。





我设计的表结构:


--用户


create table users


(


userId int auto_increment primary key,


userName varchar(50) not null ,


userPass varchar(50) not null


)





--账单分组


create table billGroup


(


groupId int auto_increment primary key,


groupName varchar(50) not null,


userId int not null,


foreign key(userId) references users(userId)


)





--账单类型


create table billType


(


typeId int auto_increment primary key,


typeName varchar(50) not null,


isIncome varchar(20) not null,


groupId int not null,


foreign key(groupId) references billGroup(groupId)


)





--账单


create table bill


(


billId int auto_increment primary key,


amount varchar(20) not null,


content varchar(100) ,


groupId int not null,


typeId int? not null,


billDate varchar(30) not null,


userId int not null,


foreign key(groupId) references billGroup(groupId),


foreign key(typeId) references billType(typeId),


foreign key(userId) references users(userId)


)








欢迎大家提出改正的建议,谢谢~~





-----------------------补充---------------------

有朋友问账单分组和账单类型的关系,我解释下哦。

账单分组就是说,比如,固定收入是一个分组,

那个属于这个组的类型就有:工资,奖金,兼职赚的外快等



可能这样的设计不是很好,希望有朋友能提出更好得建议~~~
问题补充:


-----------------------补充---------------------

有朋友问账单分组和账单类型的关系,我解释下哦。

账单分组就是说,比如,固定收入是一个分组,

那个属于这个组的类型就有:工资,奖金,兼职赚的外快等



可能这样的设计不是很好,希望有朋友能提出更好得建议~~~



再补充一点:每个用户都有自己的账单分组,即这个分组是可以自己设置修改的

我觉的你还是解释下
帐单和帐单分组之间的业务关系
帐单和帐单类型,帐单和帐单分组之间的业务关系

举些实体的例子,如果只是看一对多的话,看不出什么

我个人理解,帐单类型应该还可以分为2个表
一个是帐单类型表,一个是帐单分组类型表,

麻烦解释下帐单分组的概念

我看了一下,不知道理解对吧:如下:
主要是账单,人不用管他,因为人是与账单发生关系的.
所以
1.账单配置一张表涉及到账单分组和账单类型,也就是合并一张表,没必要分成两张表,其实这和我以前做的菜单权限一样;
2.账单表一张,对于账单配置表的账单类型;
3.用户表

每个用户都有自己的账单分组,即这个分组是可以自己设置修改的

这个权限有什么区别?用户可以先放一边啊.

--用户
create table users
(
userId int auto_increment primary key,
userName varchar(50) not null ,
userPass varchar(50) not null,
billId int --++账单id
)
--账单分组
create table billGroup
(
Id int auto_increment primary key,
groupId int,--账单分组id
typeId int,--账单分类id
groupName varchar(50), --账单分组名称
typeName varchar(50),--账单分类名称
fartherid int,--账单分类id对应的账单分组id
)

--账单
create table bill
(
billId int auto_increment primary key,
amount varchar(20) not null,
content varchar(100) ,
groupId int not null,
typeId int not null,
billDate varchar(30) not null,
userId int not null,
foreign key(groupId) references billGroup(groupId),
foreign key(typeId) references billType(typeId)
)

然后你加上删除标志,预留字段就可以了.
账单分组的表还可以优化的,你看看.
我的思路就是这样的.