2013-01-14 48 views
1

如果你有下面的类:映射表上课

Public Class Male 
    Inherits Person 

    Private Age As integer 
    Private TelephoneNumber As String 

End Class 

和下表所示

CREATE TABLE Person (ID int identity not null, Age int, TelephoneNumber varhchar(30), sex varhchar(6), primary key (ID)) 

为了填充男类,你将不得不运行SQL语句,他说:在哪里性别='男性'。这是一个糟糕的设计选择,其中一个数据库表有两个类?即存在一对多的关系。

回答

1

这是Table per Class Hierarchy,完全可以接受。这种设计模式使用单个表来存储多个子类,并使用鉴别器(在您的案例Sex)区分它们。

+0

谢谢,我没有使用NHibernate。辨别器的概念是否仍然适用? – w0051977

+0

在我的情况下,数据库中的鉴别器列包含大约三十个不同的值。 – w0051977

+0

NHibernate只是一个ORM工具。 ORM的概念不是NHibernate独有的。您拥有的鉴别器值的数量并不重要。事实上,鉴于你有很多不同的类型,我认为你选择的很好。否则,想象不得不维护30个独立的桌子!如果你需要添加更多的子类,你还有另外一个好处,你只需要提出一个新的鉴别值,而不需要一个新的表。 – DeanOC