Пользователь Aaron Bertrand сделал несколько комментариев, которые хорошо согласуются с моими мыслями по вашему вопросу. Это более сложная задача, чем ответ на ваш конкретный вопрос, но я думаю, что это важно рассмотреть в этом контексте.
Переносимость - хорошая цель учебника, но это редко случается на практике.
Если у вас есть платформам изменения в какой - то момент, там будут изменения , необходимые для приложения, базы данных, и , возможно , многое другое. Если вы можете быть немного «независимыми от платформы» без особых усилий, это нормально. Но это действительно плохое деловое решение использовать это как цель проекта.
Есть много мест в Интернете, где люди обсуждают недостатки или программируют таким образом, вот одно из них, которое я считаю довольно убедительным:
Слои абстракции базы данных должны умереть!
Ошибка переносимости
Автор использует аргумент, который я слышу постоянно: если вы используете хороший уровень абстракции, вам будет легко перейти от $ this_database к $ other_database в будущем.
Это фигня. Это никогда не легко.
В любом нетривиальном приложении, поддерживаемом базой данных, никто не считает переключение баз данных простым делом. Думать, что «обращение будет безболезненным» - это фантазия.
Хорошие инженеры стараются выбрать лучшие инструменты для работы, а затем делают все возможное, чтобы воспользоваться уникальными и наиболее мощными функциями своего инструмента. В мире баз данных это означает конкретные подсказки, индексацию, типы данных и даже решения по структуре таблиц. Если вы действительно ограничиваете себя набором функций, которые являются общими для всех основных СУБД, вы оказываете себе и своим клиентам огромную медвежью услугу.
Это ничем не отличается от высказывания «Я делаю все, чтобы ограничиться подмножеством PHP, которое одинаково в Perl и C, потому что я мог бы захотеть переключать языки однажды и« безболезненно »переносить мой код».
Такого просто не бывает.
Стоимость переключения баз данных после разработки и развертывания приложения достаточно высока. У вас есть возможные изменения схемы и индекса, изменения синтаксиса, оптимизация и настройка работы, которую нужно сделать заново, советы по настройке или удалению и так далее. Изменение mysql_foo () на oracle_foo () действительно является наименьшей из ваших проблем. Ты будешь касаться большинства, если не всех, твоего SQL - или тебе, по крайней мере, нужно будет это проверить.
Это не звучит "безболезненно" для меня.
<>
) и нестандартным (!=
), где нет никаких компромиссов по производительности или удобству обслуживания, я всегда выбираю стандартный. Но когда это происходит с другими затратами, или нет никакого стандартного эквивалента, я выхожу и проприетарный. То, что вы отказываетесь только ради возможности впоследствии полностью переключать платформы, просто не стоит того.