假如我有好多间房屋,每个房屋需要收不同的费用,如管理费、网费、电费、水费...等。但是每间房屋的收费标准和收费项目都不一样。而且,很有可能以后还会增加其它费用。有的要收网费,有的不需要收网费。怎样设计数据库?
我有两个方案,
第一个方案是把所有的费用都设一个列,并且增加很多个预留字段
不足之处:要有很多个列,并且有很多个预留字段,表太长。
房屋收费表
第二个方案是,用三个表表示关系。
不足之处,关系太复制,第三方表(房屋费用表的数据量巨大)
房屋费用表具体例子:
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
不足之处:不符合数据库的设计原则
究竟怎样设计才好?有没有更好的方法?
答:
你这个,一般用过数据库的都会选择第二种方式
关系复杂不是问题,主要是那种设计是最合理的,而且关系模式比较容易懂
第一个,看似一目了然,但是将来你添加费用字段会很麻烦
第三个,费用拆分起来也很麻烦
第二个虽然关系复杂,但是你要查的东西都可以用连接的方式将其查询出来
记得学数据库时有三个表吧
学生表,课程表,分数表
关系模式跟你第二个完全类似
那还有没有更好的方法那?