“每桌一班”是一条经验法则,很好的开始。但它不是刻在石头上的。您可以(也应该)评估应用程序的需求,数据的预测使用模式等。将多个表映射到单个类并不罕见,反之亦然:将单个表表示为多个类。
建议根据OO范例设计您的类(而不是试图将它们映射到您的表结构)。如果需要,您可以对课程设计进行微调以符合数据层的要求。
在具体情况下,取决于您是否预见需要单独获取书籍数据(没有作者&类别),还是更典型一次需要全部3个。这也是一个问题,作者和类别有多少属性。
如果您经常只抓取书籍数据和/或作者&类别有很多属性,将它们保存在不同的类中更有意义。如果你将它们放在一个班级中,你将会有很多重复的数据(因为很多书籍会有相同的类别或作者数据),并且你总是需要不必要地加载3行数据库中的连接,因此你需要付出一定的性能在大多数情况下,没有任何惩罚。
OTOH如果您通常一次从所有3个表中获取数据,那么将它们保留在一个类中可能有意义。即使如此,我仍然会选择单独的课程,以避免类别数据的重复。此外,如果这些作者是分开的实体而不是Book类的一部分,您甚至可以将作者的类别缓存起来。
很大程度上取决于您的开发语言和工具;例如在使用像Hibernate这样的ORM工具的Java中,设置这些映射要容易得多,在您了解应用程序的更多信息时使用延迟获取并优化获取计划,使用JDBC。
非常感谢您的回复! 的确,我决定为作者和类别分别开设类,并且Book类有一本书的属性Writer和Category对象。 – Nikos 2010-02-21 19:29:32