Как отобразить иерархию классов (базовый класс и унаследованные классы) в базу данных - PullRequest
2 голосов
/ 27 мая 2011

Я хочу создать иерархическую объектную модель в ASP.NET MVC, но я не уверен, что будет лучшим способом для разработки базы данных для этого. У меня есть базовый класс Product с определенными свойствами, такими как Title, Price, OnHandQty и т. Д. У меня есть несколько унаследованных классов, таких как Book, с дополнительными свойствами, такими как номер ISBN, Author и т. Д. Многие из моих продуктов подпадают под общий (базовый) класс Product, но некоторые продукты подпадают под эти производные классы (например, книга). Я не уверен, что это лучшая методология для сопоставления этого с базой данных. Нужно ли создавать отдельные таблицы для каждого типа продукта (в том числе для общего продукта)? Или есть способ получше?

Обратите внимание, что я на самом деле не спрашиваю об отображении ИЛИ. Я знаю, как создавать классы из таблиц БД, используя Entity Framework. Но в этом случае я запутался в самой структуре базы данных.

1 Ответ

1 голос
/ 27 мая 2011

Если вы собираетесь использовать Entity Framework, вам следует проверить Наследование с помощью EF Code First от mortezam.Он объясняет три стратегии, которые можно использовать для представления иерархии наследования:

  1. Таблица на иерархию (TPH): включите полиморфизм путем денормализации схемы SQL и используйте столбец дискриминатора типа, содержащий информацию о типе.
  2. Таблица для типа (TPT): представляет отношения «является» (наследование) как отношения «имеет» (внешний ключ).
  3. Таблица для конкретного класса (TPC): отбросить полиморфизм и наследованиеотношения полностью из схемы SQL.

Идея (с Code First) состоит в том, что вы определяете свои классы и наследование и позволяете платформе создать базу данных для вас.Таким образом, вам не нужно сильно беспокоиться о дизайне базы данных.

Возможно, вы захотите подумать об использовании Object Database или одного из NoSQL .стратегии хранения, такие как Mongo DB , которые работают лучше, чем реляционные базы данных, когда у вас есть такие «зубчатые» классы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...