Особые ключи данных между приложением и базой данных?

Существует ли парадигма, в которой я могу изменить имя ключа данных в одном месте и только в одном месте и правильно ли оно обрабатывается как приложением, так и базой данных?

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

Я имею в виду, используя 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 можно найти в Википедии.

Другие вопросы по тегам