【发布时间】:2014-07-25 18:08:55
【问题描述】:
我们有一个包含两列的表:
tblCategory
Id | Name
1 Brand
2 Band
3 Price
现在我们有了另一个表,它定义了类别的范围或括号
tblCategoryBrackets
Id | Value | Category_Id
1 5 3
2 10 3
3 20 3
4 Wilson 1
5 Babolat 1
6 Head 1
现在给定价格和品牌,我们需要为它们获取支架。
例如:给定Price = 17 和Brand = Dunlop,查询应该返回带有Id = 2 and 5 的括号
因为Price = 17 位于价格括号10 and 20 之间,而Brand = Dunlop 位于Babolat and Head 之间。所以我们返回较低的类别括号id。
我们实现的问题是因为tblCategoryBrackets 中的Value 是Varchar 类型,所有比较都是基于字符串的,所以5 被视为大于10。
表格应该如何设计?
选项 A - 我应该为不同的类别设置不同的表格吗?
我的意见 - 会导致桌子爆炸。但是会很灵活,并且可以键入值。对于Price Decimal,对于Brand Varchar 等。维护可能是一个问题,因为每当数据库中出现新类别时都需要更新。会导致停机。在代码中,根据类别类型从相应的表中检索数据。
选项 B - 按照我们现在的方式进行。
但是在代码(Java/C#)中形成查询,这样对于特定类别,特定的CAST 基于类别值类型完成,然后完成比较。
无法弄清楚该类的设计。
希望专家回复。
【问题讨论】:
标签: java c# mysql sql-server design-patterns