2009-09-15 3 views
5

Снова и снова, я видел людей здесь и везде, защищая от непереносимых расширений языка SQL, this - последний пример. Я вспоминаю только одну статью о том, что я собираюсь сказать, и у меня больше нет этой ссылки.Насколько необходимо или удобно писать переносные SQL?

Удалось ли вам в письменном виде переносить SQL и отклонять запатентованные инструменты/синтаксис вашего диалекта?

Я никогда не видел случая, когда кто-то борется за создание сложного приложения на mysql, а затем говорит Вы знаете, что было бы просто персиковым? Перейдем к (PostGreSQL | Oracle | SQL Server)!

Общие библиотеки в -say-PHP делают абстрактные тонкости SQL, но по какой цене? В конечном итоге вы не можете использовать эффективные конструкции и функции для предполагаемого проблеска портативности, которого вы, скорее всего, никогда не будете использовать. Для меня это звучит как учебник YAGNI.

EDIT: Может быть, например, я уже слишком элегантная, но я думаю, что дело остается: если вы планируете переход от одной СУБД к другой, вы, вероятно, редизайн приложения в любом случае, или вы не было бы делая это вообще.

ответ

7

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

Когда вы работаете в пределах предприятия, которое вы можете извлечь из знания платформы.

Вообще говоря, уровень БД должен быть хорошо инкапсулирован, поэтому даже если вам пришлось переносить в новую базу данных, изменение не должно распространяться. Я думаю, что разумно использовать подход YAGNI для портирования, если у вас нет конкретной поддержки немедленной поддержки нескольких поставщиков. Заставьте его работать с вашей текущей целевой базой данных, но тщательно структурируйте код, чтобы обеспечить будущую мобильность.

1

В подавляющем большинстве приложений я бы сделал ставку на то, что мало пользы и даже отрицательного эффекта от попыток написать портативный sql; однако в некоторых случаях существует реальный прецедент. Предположим, вы создаете веб-приложение Time Tracking. И вы хотели бы предложить самостоятельное решение.

В этом случае вашим клиентам необходимо будет иметь сервер БД. У вас есть несколько вариантов. Вы можете заставить их использовать определенную версию, которая может ограничить вашу клиентскую базу. Если вы можете поддерживать несколько СУБД, тогда у вас есть более широкий потенциальный клиент, который может использовать ваше веб-приложение.

1
  • Если вы корпоративный, то вы используете платформу, которую вы данный
  • Если вы поставщика, вы должны планировать для нескольких платформ

Стаж для корпоративных:

  • Возможно, вы перепишете код клиента перед переносом СУБД
  • СУБД, вероятно, переживет ваш код клиента (Java или C# против '80 mainfra меня)

Помните:

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

Итак, предположим, что у вас есть приложение на SQL Server 6.5. Он по-прежнему работает с несколькими настройками на SQL Server 2008. Бьюсь об заклад, вы не используете здравый код клиента ...

3

Проблема с расширениями заключается в том, что вам необходимо обновить их при обновлении самой системы базы данных , Разработчики часто думают, что их код будет длиться вечно, но большинство кода нужно будет переписать в течение 5-10 лет. Базы данных, как правило, выживают дольше, чем большинство приложений, поскольку администраторы достаточно умны, чтобы не исправлять вещи, которые не нарушены, поэтому они часто не обновляют свои системы с каждой новой версией.
Тем не менее, это настоящая боль при обновлении базы данных до более новой версии, но расширения не совместимы с этим и, следовательно, не будут работать. Это делает обновление намного сложнее и требует перезаписывания большего количества кода.
Когда вы выбираете систему баз данных, вы часто придерживаетесь этого решения в течение многих лет.
Когда вы выбираете базу данных и несколько расширений, вы застряли с этим решением гораздо дольше!

+0

Я считаю, что это не так, если вы не ждать несколько истекших версий программного обеспечения для обновите свою базу данных. Большинство поставщиков баз данных стараются обеспечить обратную совместимость. Если бы они никого не обновляли, поскольку данные критически важны для бизнеса. – HLGEM

+0

Это действительно относится к долгосрочному использованию. В целом, компании просто не модернизируются, чтобы экономить расходы, чтобы избежать простоев или просто потому, что обновление не устраняет никаких проблем. Нет ничего необычного в том, чтобы все еще видеть SQL Server 2000 в дикой природе! Или Oracle 8. И снова это означает, что эти компании существуют уже более 5-10 лет ... –

+0

Хорошо, но вы получили преимущество, которое предоставили вам эти расширения? –

3

Единственный случай, когда я вижу, что это необходимо, - это когда вы создаете программное обеспечение, которое клиент будет покупать и использовать в своих системах. Безусловно, большинство программ не относится к этой категории. Отказ от использования специфического для поставщика кода заключается в том, чтобы убедиться, что у вас есть исполняющая база данных, поскольку код конкретного поставщика обычно записывается для повышения производительности определенных задач над стандартным SQL ANSII, и он написан, чтобы получить поддержку конкретной архитектуры этой базы данных. Я работал с базами данных более 30 лет и еще никогда не видел, как компания меняет свою базу данных без полной перезаписи приложений. В этом случае избегать кода, специфичного для поставщика, означает, что вы повредите свою производительность без каких-либо оснований в большинстве случаев.

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

1

Всегда есть преимущества и некоторые издержки использования диалекта «наименьшего общего знаменателя» на языке, чтобы обеспечить переносимость. Я думаю, что опасность блокировки конкретной СУБД невысока по сравнению с аналогичными опасностями для программирования languges, библиотек объектов и функций, писателей отчетов и т. П.

Вот что я бы рекомендовал в качестве основного способа обеспечения дальнейшей переносимости. Сделайте логическую модель схемы, которая включает в себя таблицы, столбцы, ограничения и домены. Сделайте это как СУБД независимым, как вы можете, в контексте баз данных SQL.Единственное, что зависит от диалекта, - это тип данных и размер для нескольких доменов. На некоторых более старых диалектах отсутствует поддержка домена, но в любом случае вы должны сделать свою логическую модель с точки зрения доменов. Тот факт, что два столбца взяты из одного и того же домена и не просто разделяют общий тип данных и их размер, имеет решающее значение для логического моделирования.

Если вы не понимаете различия между логическим моделированием и физическим моделированием, изучите его.

Сделайте как можно больше структуры индекса портативной. В то время как каждая СУБД имеет свои собственные специальные функции индекса, взаимосвязь между индексами, таблицами и столбцами является независимой от СУБД.

С точки зрения обработки CRUD SQL в приложении, при необходимости используйте конкретные конструкции СУБД, но старайтесь их документировать. В качестве примера я без колебаний использую конструкцию Oracle CONNECT BY, когда я думаю, что это принесет мне пользу. Если ваше логическое моделирование было независимым от СУБД, большая часть вашего CRUD SQL также будет независимой от СУБД, даже без особых усилий с вашей стороны.

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

(Слово «вы» в вышеописанном, кому это может касаться, а не ОП, в частности.)