【问题标题】:How to map class hierarchy (base class and inherited classes) to a database如何将类层次结构(基类和继承类)映射到数据库
【发布时间】:2011-09-03 15:19:45
【问题描述】:

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

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

【问题讨论】:

标签: asp.net-mvc database


【解决方案1】:

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

  1. 每个层次结构的表 (TPH):启用 通过非规范化的多态性 SQL 模式,并利用一个类型 包含类型的鉴别器列 信息。
  2. 每种类型的表 (TPT):表示“是 a"(继承)关系为 “具有”(外键)关系。
  3. 每个混凝土类 (TPC) 的表: 丢弃多态性和继承 关系完全从 SQL 架构。

这个想法(使用代码优先)是您定义类和继承,并让框架为您创建数据库。这样您就不必担心数据库设计。

您可能还想考虑使用Object DatabaseNoSQL 之一的存储策略,例如Mongo DB,当您拥有此类“锯齿状”类时,它们比关系数据库更有效。

【讨论】:

  • 谢谢。我首先是 EF 代码的新手,但这无疑为我指明了正确的方向。
猜你喜欢
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
相关资源
最近更新 更多