Особые ключи данных между приложением и базой данных? - PullRequest
0 голосов
/ 30 ноября 2009

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

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

Что я имею в виду, используя PHP в качестве примера, сейчас я могу использовать

$infoToUpdateUser[ User::FIELD_FIRST_NAME ]

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

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

(имя таблицы: primary_key)

  • кошки: cat_id
  • собаки: dog_id
  • parrots: bird_id (помните, плохой дизайн, следовательно, несоответствие между parrots / bird_id)
  • ящерицы: lizard_id
  • и т.д.

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

  • AnimalForm
  • DogForm расширяет AnimalForm
  • CatForm расширяет AnimalForm
  • ParrotForm расширяет AnimalForm
  • и т.д.

Теперь я хочу обновить запись в базе данных SQL, используя функцию обновления в родительском классе AnimalForm, поэтому мне не нужно дублировать код в 20 подклассах.

Однако я не знаю способа обобщения запроса на обновление, поэтому в настоящее время каждый подкласс имеет переменную-член idFieldName, и родительский класс вставляет ее в запрос, например

"UPDATE " . $this->table . " SET <data> WHERE " . $this->idFieldName

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

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

1 Ответ

1 голос
/ 30 ноября 2009

То, что вы ищете, называется слоем объектно-реляционного отображения.

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

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

...