Дизайн таблиц и иерархии классов

Надеемся, что кто-то сможет пролить свет на эту проблему с помощью либо примера, либо, возможно, кто-то из предложивших прочитатьМне интересно, каков наилучший подход к проектированию для моделирования таблиц после их эквивалентности иерархии классов, Лучше всего это можно описать на примере:

abstract class Card{
    private $_name = '';
    private $_text = '';
}

class MtgCard extends Card{
    private $_manaCost = '';
    private $_power = 0;
    private $_toughness = 0;
    private $_loyalty = 0;
}

class PokemonCard extends Card{
    private $_energyType = '';
    private $_hp = 0;
    private $_retreatCost = 0;
}

Теперь, когда моделируем таблицы для синхронизации с этой иерархией классов, я использовал нечто очень похожее:

TABLE Card
  id            INT, AUTO_INCREMENT, PK
  name          VARCHAR(255)
  text          TEXT

TABLE MtgCard
  id            INT, AUTO_INCREMENT, PK
  card_id       INT, FK(card.id)
  manacost      VARCHAR(32)
  power         INT
  toughness     INT
  loyalty       INT

TABLE PokemonCard
  id            INT, AUTO_INCREMENT, PK
  card_id       INT, FK(card.id)
  hp            INT
  energytype    ENUM(...)
  retreatcost   INT

Проблема, которую я имею, пытается выяснить, как связать каждыйCard запись с записью, содержащей ее данные из соответствующей таблицы. В частности, как определить, в какой таблице я должен искать.

Должен ли я добавитьVARCHAR столбец кCard держать имя связанной таблицы? Это единственное решение, к которому пришли мои коллеги и я, но оно кажется слишком «грязным».Ключом к этому является сохранение расширяемости дизайна, что позволяет легко добавлять новые подклассы.

Если бы кто-то мог предоставить пример или ресурсы, показывающие чистый способ зеркального отображения иерархий классов / таблиц, это было бы очень ценно.

Ответы на вопрос(2)

Ваш ответ на вопрос