Я работаю над веб-приложением, которое использует PHP для его кода, и MySQL для его механизма хранения. При работе над моей моделью данных я понял, что у меня небольшая проблема с обработкой данных «по умолчанию».Где я должен поместить свои дефолты?
Я разработал схему MySQL для включения значений по умолчанию, что имело смысл в то время, потому что я в основном манипулировал данными «вручную» - через год мы собрались добавить панель управления, чтобы другие изменяли данные.
Проблема заключается в том, как обрабатывать значения по умолчанию, необходимые для некоторых объектов. Технически, оставляя вещи «null», также является дефолтом, но я не был особенно обеспокоен этим раньше.
Если я использую значения по умолчанию MySQL, когда я вставляю новое значение, я должен немедленно развернуться и запросить его, чтобы получить «реальные» данные из базы данных. Если, с другой стороны, я установил свои значения по умолчанию в PHP, я начинаю нарушать DRY, имея значения по умолчанию в двух местах. И если кто-то когда-нибудь сделает «быстрое» исправление и изменит их только в одном месте, я могу завершить некоторые интересные «интересные» ошибки для отладки. В то же время я не могу удалить значения по умолчанию из MySQL, потому что они действительно являются частью схемы данных и должны быть оставлены в ней.
Я готов поспорить, что я либо что-то пропускаю, либо делаю недопустимое предположение где-то, но я не знаю, что это такое. У кого-нибудь есть рекомендации относительно того, как с этим справиться?
Edit:
Для ясности, мой PHP код может быть что-то вдоль линий:
$foo = new foo();
//Add in instance-specific data
$foo -> save;
Foo Сохраним метод затем выполнить запрос:
INSERT INTO FOO (bar1, bar2)
VALUES (:bar1, :bar2)
Но это только вставляет 2 из (многих) переменных, которые использует Foo. Все это делает меня в состоянии «по умолчанию». На данный момент, я тогда должен бежать:
$foo= Foo::getFooWithId($foo->id); //I know I should use a DBA; this is legacy code
и $ Foo затем заполняется данными, которая была создана в базе данных. E. G. bar3 и bar4 имеют значения по умолчанию, которые не заданы при первом создании объекта - пользователи могут впоследствии их изменить, если они захотят (и, вероятно, будут), но они не являются частью объекта «по умолчанию».
Должен ли я переместить эти значения по умолчанию в PHP? Оставьте их в MySQL и вытащите из него? Нарушить СУХО, помещая их в оба места? Или я пропустил четвертый, лучший вариант?
Отбрасывание этого вопроса: это вызывает у меня проблемы: но можете ли вы использовать таблицу основных значений для установки значений по умолчанию для полей в вашей схеме, чтобы приложение всегда могло ссылаться на нее как для операций SELECT, так и для INSERT/UPDATE ? Мне было бы интересно узнать об этом. Иностранные ключи - проблема, если она должна быть действительно реляционной, я полагаю? – cerd
Я бы заполнил объект их в конструкторе по умолчанию. –