Особые ключи данных между приложением и базой данных?
Существует ли парадигма, в которой я могу изменить имя ключа данных в одном месте и только в одном месте и правильно ли оно обрабатывается как приложением, так и базой данных?
В последнее время я прибегал к использованию констант классов для сопоставления с именами полей базы данных, но мне все равно нужно сохранять их согласованными с необработанными ключами базы данных.
Я имею в виду, используя PHP в качестве примера, прямо сейчас я мог бы использовать
$infoToUpdateUser[ User::FIELD_FIRST_NAME ]
Это означает, что когда я изменяю его на константу, мне не нужно искать код, чтобы изменить все ссылки на это поле.
Другая область, в которой это всплывает, - это ссылки на поля. Из-за некоторых ранних неудачных дизайнерских решений у меня есть, например, такие таблицы:
(имя таблицы: primary_key)
- кошки: cat_id
- собаки: dog_id
- попугаи: bird_id (помните, плохой дизайн, следовательно, несоответствие между попугаями / bird_id)
- ящерицы: lizard_id
- так далее
Тогда, скажем, у меня есть серия классов форм, которые обновляют записи.
- AnimalForm
- DogForm расширяет AnimalForm
- CatForm расширяет AnimalForm
- ParrotForm расширяет AnimalForm
- так далее
Теперь я хочу обновить запись в базе данных SQL, используя функцию обновления в родительском классе AnimalForm, поэтому мне не нужно дублировать код в 20 подклассах.
Однако я не знаю способа обобщения запроса на обновление, поэтому в настоящее время каждый подкласс имеет переменную-член idFieldName, и родительский класс вставляет ее в запрос, как
"UPDATE " . $this->table . " SET <data> WHERE " . $this->idFieldName
Это кажется неаккуратным, но я не могу придумать лучшего решения на данный момент.
Существует ли модель проектирования или парадигма, которая связывает воедино или абстрагирует имена ключей данных для совместного использования в качестве ссылки как базой данных, так и приложением?
1 ответ
То, что вы ищете, называется слоем объектно-реляционного отображения.
ORM отделяет проблемы доступа к данным от бизнес-логики, отображая реляционную базу данных в объектную модель. Поскольку ORM выполняет весь перевод, если вы изменяете имя таблицы или столбца базы данных, вам нужно будет сообщить ORM только один раз, и он будет правильно применять это изменение ко всему вашему коду.
Поскольку вы указываете, что используете PHP, здесь возникает вопрос, касающийся библиотек ORM в PHP. Дополнительную информацию о технологиях ORM можно найти в Википедии.