如何为2个非常相似的实体设计数据库?

时间:2011-03-22 21:33:14

标签: c# linq-to-sql generics database-design

我正在使用linq到sql而且我有2个表(sedan,suv:除了suv有一个高度列,其他一切都相同,它们都是一样的)但是因为它们在不同的表和预生成的类中我有很多ifs在我的函数中。根据枚举汽车的类型,我会选择其中一个。我想摆脱ifs,我应该如何设计数据库,或者我如何能够消除ifs?我可以使用泛型吗?

3 个答案:

答案 0 :(得分:2)

我会使用相同的表,但是有一个可以为空的高度列(映射到C#中的可空类型)。使用另一列(比如type)对车辆类型进行编码(您可以将其用作类的鉴别器)。使用约束,以便当鉴别器显示它是SUV时,高度列必须是非空的。

现在将表映射到具有SUV和Sedan子类的抽象Car类,由类型列区分。我可能会在Car类中保护height属性,然后在SUV类中添加一个公共属性来公开height属性(基本上将它用作支持字段)。

答案 1 :(得分:0)

嗯......就像有两张桌子,一张用于梅赛德斯,另一张用于宝马,因为宝马有一列加号。因此,最好有一辆桌车,只为宝马填充该栏目。

请根据您的情况进行调整,当然您的高度栏只会填写SUV。

答案 2 :(得分:0)

您可以通过更改架构来解决它。将两个表组合成一个“car”表,并包含一个类型和高度的列。

另一种方法是更改​​Sedan和SUV类的实现以包含特定于类的逻辑。 (我会假设每个实现一个“Car”接口?)这样,你让特定的对象弄清楚该做什么而不是调用类。例如:( sudo code)

Sedan的实施:

public function climbMountain() {
   spinTires();
   setSpeed(0);
}

SUV的实施:

public function climbMountain() {
    if (randomNumber == 3) rollOver();
}
相关问题