Лучшие практики для максимальной мобильности в SQL Server 2016

8

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

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

Есть ли способ или какой-либо известный способ принудительного использования стандартного SQL поверх диалекта T-SQL непосредственно в SQL Server или через SQL Server Management Studio (SSMS)?

s.demuro
источник
3
Переносимость - хорошая цель учебника, но это редко случается на практике. Когда у вас есть выбор между стандартным синтаксисом ( <>) и нестандартным ( !=), где нет никаких компромиссов по производительности или удобству обслуживания, я всегда выбираю стандартный. Но когда это происходит с другими затратами, или нет никакого стандартного эквивалента, я выхожу и проприетарный. То, что вы отказываетесь только ради возможности впоследствии полностью переключать платформы, просто не стоит того.
Аарон Бертран
6
Единственная временная переносимость - это реалистичная цель, когда вы пишете приложение, которое должно интегрироваться с несколькими платформами одновременно, потому что ваши клиенты используют разные платформы. Даже тогда, если вы не хотите, чтобы функциональность была ограничена, а производительность была ужасной на всех платформах, я бы поставлял пакеты, предназначенные для использования преимуществ отдельных платформ.
Аарон Бертран
1
Просто любопытно; В истории вы когда-нибудь меняли систему баз данных, которую приложение использовало для другой системы такого же уровня (например, Oracle -> SQLS)? У меня нет
Caius Jard
2
Другая вещь, которая меня интересовала; сколько из вашего прототипа разумно выживает, чтобы быть системой полного производственного класса? Большинство моих прототипов почти не имеют общих аспектов с полными системами, которые выписаны из них после того, как прототип доказал концепцию и озвучил некоторые разумные подходы к тому, как должно выглядеть решение; Вы делаете свои прототипы слишком совершенными / слишком долго держитесь за них?
Caius Jard

Ответы:

16

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

Переносимость - хорошая цель учебника, но это редко случается на практике.

Если у вас есть платформам изменения в какой - то момент, там будут изменения , необходимые для приложения, базы данных, и , возможно , многое другое. Если вы можете быть немного «независимыми от платформы» без особых усилий, это нормально. Но это действительно плохое деловое решение использовать это как цель проекта.

Есть много мест в Интернете, где люди обсуждают недостатки или программируют таким образом, вот одно из них, которое я считаю довольно убедительным:

Слои абстракции базы данных должны умереть!

Ошибка переносимости

Автор использует аргумент, который я слышу постоянно: если вы используете хороший уровень абстракции, вам будет легко перейти от $ this_database к $ other_database в будущем.

Это фигня. Это никогда не легко.

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

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

Это ничем не отличается от высказывания «Я делаю все, чтобы ограничиться подмножеством PHP, которое одинаково в Perl и C, потому что я мог бы захотеть переключать языки однажды и« безболезненно »переносить мой код».

Такого просто не бывает.

Стоимость переключения баз данных после разработки и развертывания приложения достаточно высока. У вас есть возможные изменения схемы и индекса, изменения синтаксиса, оптимизация и настройка работы, которую нужно сделать заново, советы по настройке или удалению и так далее. Изменение mysql_foo () на oracle_foo () действительно является наименьшей из ваших проблем. Ты будешь касаться большинства, если не всех, твоего SQL - или тебе, по крайней мере, нужно будет это проверить.

Это не звучит "безболезненно" для меня.

Джош Дарнелл
источник
11

Не применять STD SQL.

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

McNets
источник
9

На самом деле, нет.

Есть SET FIPS_FLAGGER 'FULL'.

Это выводит предупреждение для нестандартного SQL - но некоторые предупреждения

  • Я не уверен, какой конкретный стандарт это использует (и подозреваю, что это может быть SQL 92)
  • Из быстрого теста это не жалуется на использование +оператора для конкатенации строк или проприетарных функций, таких как, GETDATE()так что это не кажется слишком полным.
Мартин Смит
источник
3

«часто технологии еще не определены»

Я бы сказал, что это абсолютно НЕ случай в моем опыте. На самом деле я не верю, что когда-либо слышал об этом, разве что что-то очень маленькое.

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

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

Марбри Хардин
источник