【发布时间】:2010-10-03 15:41:16
【问题描述】:
我已经使用 C# 和 Java 编程一年多了,并且对面向对象编程有相当的了解,但是我的新项目需要一个数据库驱动的模型。我正在使用 C# 和 Linq,这似乎是一个非常强大的工具,但是我在围绕面向对象的方法设计数据库时遇到了麻烦。
我的两个主要问题是:
如何处理数据库中的继承问题? 假设我正在构建一个员工排班应用程序,并且我有一个抽象类 Event。从 Event 我派生出抽象类 ShiftEvent 和 StaffEvent。然后我有具体的类 Shift(派生自 ShiftEvent)和 StaffTimeOff(派生自 StaffEvent)。还有其他派生类,但为了论证,这些就足够了。
我应该为 ShiftEvents 和 StaffEvents 设置一个单独的表吗?也许我应该为每个具体类设置单独的表格?这两种方法似乎都会在与数据库交互时给我带来问题。另一种方法可能是拥有一个 Event 表,并且该表对于我的任何具体类中的每种类型的数据都有可为空的列。所有这些方法都感觉可能会阻碍未来的可扩展性。很可能还有第三种我没有考虑过的方法。
我的第二个问题:
如何以面向对象的方式处理集合和一对多关系?
假设我有一个 Products 类和一个 Categories 类。类别的每个实例都将包含一个或多个产品,但产品本身不应该知道类别。如果我想在数据库中实现这一点,那么每个产品都需要一个映射到类别表的类别 ID。但是从 OO 的角度来看,这引入了比我更喜欢的耦合。产品甚至不应该知道类别存在,更不用说包含类别 ID 的数据字段了!有没有更好的办法?
【问题讨论】:
-
这是一个很好的问题。你会得到很好的答案,但很少有人赞成。这就是我们在 SO 上滚动的方式。
-
他是对的.. 4 年后,只有 22 票。这个问题值得更好。
标签: sql linq database-design oop