У меня есть интересная проблема Active Record, и я не совсем уверен, что
самое чистое решение. Устаревшая база данных, с которой я интегрирую
имеет странную складку в своей схеме, где одна логическая таблица была
«разделен» на несколько физических таблиц. Каждая таблица имеет одинаковый
структура, но содержит данные о разных предметах.
Я не очень хорошо объясняю это ясно (как вы можете сказать!). Дай мне попробовать
и объяснить на конкретном примере. Допустим, у нас есть автомобиль, который имеет
одно или несколько колес. Обычно мы представляем это с таблицей автомобилей и
Колеса настольные вроде так:
CREATE TABLE cars (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255),
;etc
)
CREATE TABLE wheels (
`id` int(11) NOT NULL auto_increment,
`car_id` int(11) NOT NULL,
`color` varchar(255),
;etc
)
Пока все хорошо. Но со стратегией «разделения», которая находится в моем наследии
База данных это будет выглядеть больше как:
CREATE TABLE cars (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255),
;etc
)
CREATE TABLE car_to_wheel_table_map (
`car_id` int(11) NOT NULL,
`wheel_table` varchar(255)
)
CREATE TABLE wheels_for_fords (
`id` int(11) NOT NULL auto_increment,
`car_id` int(11) NOT NULL,
`color` varchar(255)
)
CREATE TABLE wheels_for_buicks (
`id` int(11) NOT NULL auto_increment,
`car_id` int(11) NOT NULL,
`color` varchar(255)
)
CREATE TABLE wheels_for_toyotas (
`id` int(11) NOT NULL auto_increment,
`car_id` int(11) NOT NULL,
`color` varchar(255)
)
Итак, у нас есть набор таблиц wheel_for_x и
таблица car_to_wheel_table_map, которая содержит отображение из car_id в
конкретный wheel_for_x, который содержит колеса для конкретного автомобиля. Если я
хочу найти комплект колес для автомобиля я сначала должен выяснить какие
колесные диски для использования через таблицу car_to_wheel_table_map, а затем посмотрите
количество записей в таблице колес, указанной в car_to_wheel_table_map.
Во-первых, может ли кто-нибудь просветить меня, если есть стандартное название
эта техника?
Во-вторых, есть ли у кого-нибудь указания на то, как я могу заставить эту работу работать в
Активная запись в хорошем чистом виде. То, как я это вижу, я могу иметь
Модель колеса, где имя таблицы может быть определено для каждого экземпляра, или я могу
динамически создавать классы Model во время выполнения с правильным именем таблицы
как указано в таблице сопоставления.
РЕДАКТИРОВАТЬ : Обратите внимание, что изменение схемы, чтобы быть ближе к тому, что хочет AR, не вариант. Различные устаревшие кодовые базы опираются на эту схему и не могут быть реально изменены.