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

时间:2022-12-13 11:55:18

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


我有两个方案,

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

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


房屋收费表

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



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

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

【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(水费)

….

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

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

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

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


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


答:

你这个,一般用过数据库的都会选择第二种方式
关系复杂不是问题,主要是那种设计是最合理的,而且关系模式比较容易懂

第一个,看似一目了然,但是将来你添加费用字段会很麻烦
第三个,费用拆分起来也很麻烦
第二个虽然关系复杂,但是你要查的东西都可以用连接的方式将其查询出来

记得学数据库时有三个表吧
学生表,课程表,分数表
关系模式跟你第二个完全类似

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