Переносимость базы данных (с сервера sql на mysql, postgresql) - PullRequest
2 голосов
/ 30 июля 2009

Я работаю над бизнес-приложением (asp.net). Прямо сейчас я использую сервер sql. Но я планирую поддержать как минимум mysql и postgresql в будущем. Какие вопросы я должен рассмотреть, чтобы избежать будущих головных болей? Особенно о типах данных (типы столбцов). Например. Я думаю, что столбец BIT не поддерживается на некоторых БД, поэтому я использую tinyint?

В основном я использую простой sql (без фреймворка для сущностей, linq и т. Д.) И стараюсь сделать его максимально простым. Я не использую такие вещи, как триггеры и т. Д. Я использую хранимые процедуры, но при необходимости их можно заменить на простой sql.

Ответы [ 3 ]

1 голос
/ 30 июля 2009

Ваша единственная надежда - разделить доступ к данным на соответствующий уровень доступа к данным, как предлагает Ремус Русану. Уровень доступа к данным может иметь один согласованный интерфейс с остальным кодом и может быть заменен на другие версии для каждой платформы БД. Поддержание стандарта стандарта SQL поможет, но на самом деле невозможно написать одно тело кода SQL и заставить его работать везде (стандарт SQL не так хорошо реализован.)

1 голос
/ 31 июля 2009

Рассмотрим (с некоторыми затратами с точки зрения кривой обучения) принятие модели предметной области и уровня доступа к данным на основе OR / M, подобного NHibernate (https://www.hibernate.org/343.html)

0 голосов
/ 30 июля 2009

Убедитесь, что вы пишете весь свой код клиента, используя абстрактный IDbConnection , IDbCommand , IDataReader вместо конкретного. Вам также придется постоянно проверять свои операторы SQL, чтобы убедиться, что вы используете только совместимый синтаксис.

Вы также можете попробовать подключиться через компоненты OdbcConnection / OdbcCommand и использовать универсальный синтаксис ODBC и универсальные типы данных ODBC (т. Е. Материал {fn SUBSTRING(...)}, иначе. синтаксис EBCed ODBC ).

В качестве альтернативы я предпочитаю изолировать доступ к данным и создать специальные классы DAL для каждого внутреннего интерфейса. Я использую XML и XSLT для генерации кода DAL. Подобно , этот метод интеграции генерации кода XSLT из моего блога, но с XSLT, ориентированными специально для каждого внутреннего конкретного кода.

...