Существует ли парадигма, в которой я могу изменить имя ключа данных только в одном месте и в одном месте и правильно ли оно обрабатывается приложением и базой данных?
В последнее время я прибегал к использованию констант классов для отображения имен полей базы данных, но
Я все еще должен держать их в соответствие с необработанными ключами базы данных.
Что я имею в виду, используя 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
Кажется неряшливым сделать это таким образом, но я не могу придумать лучшего решения на данный момент.
Существует ли модель проектирования или парадигма, которая связывает воедино или абстрагирует имена ключей данных для совместного использования в качестве ссылки как базой данных, так и приложением?