Три общих стратегии:
Составляют таблицу для каждого класса в иерархии, которые содержат свойства, определенные для каждого класса и внешнего ключа назад к таблице суперкласса верхнего уровня. Таким образом, Вы могли бы иметь vehicle
таблица с другими таблицами как car
и airplane
, которые имеют vehicle_id
столбец. Недостаток здесь - то, что Вы, возможно, должны выполнить много соединений только для вывода одного типа класса.
Составляют таблицу для каждого класса в иерархии, которая содержит все свойства. Этот может стать хитрым, так как не легко поддержать общий идентификатор через все таблицы, если Вы не используете что-то как последовательность. Запрос для супертипа класса потребовал бы объединений против всех рассматриваемых таблиц.
Составляют одну таблицу для всей иерархии классов. Это устраняет соединения и объединения, но требует, чтобы все столбцы для всех свойств класса были в одной таблице. Необходимо будет, вероятно, оставить большинство столбцов nullable, так как некоторые столбцы не будут относиться к записям другого типа. Например, vehicle
таблица могла бы содержать столбец, названный wingspan
, который соответствует эти Airplane
тип. При создании этого столбца NOT NULL затем, любой экземпляр Car
вставленный в таблицу потребует значения для wingspan
даже при том, что значение NULL
могло бы иметь больше смысла. При отъезде столбца nullable, Вы смогли работать вокруг этого с проверочными ограничениями, но это могло стать ужасным. ( Единственное Наследование Таблицы )
Глава 8. Наследование, Отображающееся в следующей ссылке также, обсудило это. http://nhibernate.info/doc/nh/en/index.html#inheritance
Это - документ NHibernate.