一般在做数据库设计的时候,会把common的信息存在一张基本的表里,而会把附加的信息存在另外一张表里。
例如,人员的基本信息---如姓名,性别,年龄放在一张基本表里。而教育信息,工作经验信息,放在另外的两张表里。并且会额外信息的表里建立一个基本信息的表的id。可能根据需要建立约束。
那么在对象领域(用UML的 class图表示),则可以这样。假如用hibernate的自动代码生成工具,假设里建立的外键关联的话,生成的class里会这样:
class Person{
//..other properties and setter & getter
private Collection educations;
private Collection workings;
//setter and getter
}
而在class Education{
private Person person;//setter & getter
}
class Working{
private Person person;//setter & getter
}
我们认为上面的这个是一种组合的关系,除此以外,还可以这样来看(有些持久层框架。比如说NCS的pfw),把他看成是继承的关系.换一个例子:
Case是罚金,有多种罚金,比如说针对Permit的Case叫做PermitCase,针对WMRS的WMRSCase,还有MRSACase。
Case表里只存放,罚金的基本信息,比如说罚款金额,罚款原因,罚金编号,那么在PermitCase表里会存放一个case的id,会存放Permit本身的信息,比如说许可证编号等。
那么可以让PermitCase extends Case。
这样做也是可以的。