【MySQL之设计表(二)】一个典型的数据库设计问题

假如我有好多间房屋,每个房屋需要收不同的费用,如管理费、网费、电费、水费...等。但是每间房屋的收费标准和收费项目都不一样。而且,很有可能以后还会增加其它费用。有的要收网费,有的不需要收网费。怎样设计数据库?


我有两个方案,

第一个方案是把所有的费用都设一个列,并且增加很多个预留字段

不足之处:要有很多个列,并且有很多个预留字段,表太长。


房屋收费表



第二个方案是,用三个表表示关系。

不足之处,关系太复制,第三方表(房屋费用表的数据量巨大)



房屋费用表具体例子:

1(HouseFeeId1) 1(房屋1)    1(管理费)

2(HouseFeeId2) 1(房屋1)    2(网费)

3(HouseFeeId3) 1(房屋1)    3(水费)

4(HouseFeeId4) 1(房屋1)    4(电费)

5(HouseFeeId5) 2(房屋2)    1(管理费)

6(HouseFeeId6) 2(房屋2)    2(网费)

7(HouseFeeId7) 2(房屋2)    3(水费)

….

第三个方案,用拼接字符串的方法

如:1       管理费,网费,水费,电费 150,50,20,30

不足之处:不符合数据库的设计原则


究竟怎样设计才好?有没有更好的方法?


答:

你这个,一般用过数据库的都会选择第二种方式
关系复杂不是问题,主要是那种设计是最合理的,而且关系模式比较容易懂
 
第一个,看似一目了然,但是将来你添加费用字段会很麻烦
第三个,费用拆分起来也很麻烦
第二个虽然关系复杂,但是你要查的东西都可以用连接的方式将其查询出来
 
记得学数据库时有三个表吧
学生表,课程表,分数表
关系模式跟你第二个完全类似

那还有没有更好的方法那?


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值