Надеюсь, кто-нибудь сможет пролить свет на эту проблему с помощью либо примера, либо, возможно, кто-то предложит прочитать. Мне интересно, каков наилучший подход к проектированию таблиц моделирования после их эквивалентности иерархии классов . Лучше всего это можно описать на примере:
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
, чтобы он содержал имя связанной таблицы? Это единственное решение, к которому пришли мои коллеги и я, но оно кажется слишком «грязным». Ключом здесь является возможность расширения дизайна, что позволяет легко добавлять новые подклассы .
Если бы кто-то мог предоставить пример или ресурсы, показывающие чистый способ зеркального отображения иерархий классов / таблиц, это было бы очень ценно.