2011-05-27 154 views
2

我想在ASP.NET MVC中创建分层对象模型,但我不确定为此设计数据库的最佳方式是什么。我有一个产品基类,具有某些属性,如标题,价格,OnHandQty等。我有几个像Book一样的继承类,它具有诸如ISBN编号,Author等额外属性。我的许多产品都属于通用(基本)Product类,但有些产品将属于这些派生类(例如Book)。我不确定将此映射到数据库的最佳方法是什么。我应该为每种产品类型(包括一种通用产品)创建单独的表格吗?或者有没有更好的方法?如何将类层次结构(基类和继承类)映射到数据库

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

+0

类似的问题,你可能会发现有用的讨论:http://stackoverflow.com/questions/561576/polymorphism-in-sql-database-tables – Jollymorphic 2011-05-27 19:51:58

回答

1

如果您打算使用实体框架,那么您应该通过mortezam检出Inheritance with EF Code First。他解释说,可用于表示继承层次的三种策略:每层次(TPH)

  1. 表:通过非规范化的 SQL模式启用 多态性,并利用持有型 信息 类型鉴别列。
  2. 每种类型表(TPT):表示“是 一个”(继承)关系为 “有一个”(外键)关系。
  3. 表每个具体类(TPC): 完全从 SQL模式中丢弃多态性和继承 关系。

想法(使用Code First)是您定义您的类和继承并让框架为您创建数据库。这样你就不必太担心数据库设计。

您可能还需要考虑使用Object Database或类似Mongo DBNoSQL存储策略时,你有这几样“锯齿”类的工作,这比关系型数据库更好的一个。

+0

谢谢。我首先对EF代码是陌生的,但是这确实指向了我正确的方向。 – 2011-05-29 05:04:34