如何将类层次结构(基类和继承类)映射到数据库

时间:2011-05-27 19:05:56

标签: asp.net-mvc database

我想在ASP.NET MVC中创建一个分层对象模型,但我不确定为此设计数据库的最佳方法是什么。我有一个产品基类,有一些属性,如Title,Price,OnHandQty等。我有几个继承的类,如Book,它有额外的属性,如ISBN号,作者等。我的许多产品将属于通用(基础)产品类,但有些产品属于这些派生类(例如Book)。我不确定将此映射到数据库的最佳方法是什么。我应该为每种产品类型创建单独的表(包括一种用于通用产品)吗?还是有更好的方法吗?

请注意,我并没有真正询问OR映射。我知道如何使用Entity Framework从数据库表创建类。但在这种情况下,我对数据库设计本身感到困惑。

1 个答案:

答案 0 :(得分:1)

如果您打算使用Entity Framework,那么您应该通过mortezam查看Inheritance with EF Code First。他解释了可用于表示继承层次结构的三种策略:

  1. 每个层次结构表(TPH):启用 通过非规范化的多态性 SQL模式,并使用一种类型 保持类型的鉴别器列 信息。
  2. 每种类型的表(TPT):代表“是 一个“(继承)关系为 “有一个”(外键)关系。
  3. 每个具体类别(TPC)的表格: 放弃多态性和继承 完全来自的关系 SQL架构。
  4. 这个想法(使用Code First)是您定义类和继承,并让框架为您创建数据库。这样你就不必担心数据库设计了。

    您可能还想考虑使用Object Database或其中一个NoSQL存储策略,例如Mongo DB,当您拥有这些“锯齿状”类时,这些策略比关系数据库更有效