Re: Организация работы над MS SQL 2008 DB Project
От: Sinix  
Дата: 06.09.10 06:05
Оценка: 4 (1)
Здравствуйте, Poul_Ko, Вы писали:

P_K>Как можно создать файл dbschema имея терминальный доступ к серверу БД?

vsdbcmd? Не проверял.

P_K>как удалять объекты из БД? Удаляю файл из Solution Explorer, но после билда в скрипте не появляется инструкции DROP.

Копаемся в настройках скриптогенератора (файл Database.sqldeployment).



P_K>Прошу поделиться опытом
Всё нижесказанное — для "взрослых баз", если у вас база используется чисто для хранения данных вашего приложения, можно спокойно забивать на то, что не нравится.

Деплоймент:
1. Обязательно иметь тестовый сервак, на него деплоить только пересозданием базы. В результате имеете постоянно рабочий deployment script для новых инсталляций.
2. Для деплоймента на боевой сервак генерим скрипт, переносим в management studio, тщательно проверяем, бэкапим, запускаем (или полагаемся на студию/VSDBCMD и надеемся что ничего не сломается).
3. Более мягкий вариант — используем скрипт, сгенерированный schema compare.
В любом случае — скрипт создаётся из проекта, не из тестовой базы.

Для комфортной работы придётся:
1. Обновиться до GDR R2. По возможности переходить на 2010ю студию, в VSTSDB 2008 множество багофич без шансов на исправление.
2. Активно использовать схемы, именовать файлы в стиле "TableName.table.sql" (без имени схемы). Здорово облегчает работу с большими базами и последующий рефакторинг.
3. Обязательно упорядочивать объекты по схемам, а не по типу (задаётся при создании проекта, как поменять потом — не разбирался).
4. По возможности работать с проектом через Schema View, поддерживать структуру папок руками нереально.
5. Обязателен vcs и регулярные коммиты — поломать структуру папок можно на раз-два
6. Сразу же озаботиться общим стилем кода — либо приобретать что-то платное (ходят слухи что кактолькотаксразу выпустят бесплатный автоформаттер), либо писать свои правила для static code analysis. Энфорсить стоит:
— обязательные точки с запятой
— N перед nvarchar-строками
— запрет на deprecated-фичи
— псевдонимы для таблиц
SELECT T.Name
  FROM SchemaName.TableName AS T

6. Если ссылаетесь на объекты из master/msdb — обязательно делать так.
7. Создать проект для сервера, в нём выставить ограничения для деплоймента.
8. Если используете SQLCLR — добавить в солюшн SQLCLR проект, запретить его деплоить, добавить в VSDB проект как reference, ручками прописать импортируемые объекты. Если сборка содержит только хелперы, но используется в нескольких базах — сослаться на неё в каждой базе. Если включить сборку только в одну базу, а из остальных баз ссылаться на импортированные методы — геммороя будет несравненно больше, для начала — с циклическими зависимостями.

По дизайну баз.
1. Используем схемы. По возможности не располагаем в одной схеме "внутренние" объекты и объекты, к которым имеет доступ приложение. В результате, разрешения раздаются прямо на уровне схемы, не требуется возиться с отдельными объектами.
2. По возможности избегаем прямого доступа к таблицам, оборачиваем в SP/View.
3. Если вы решили хранить данные в нескольких базах, не ссылайтесь на объекты в другой базе напрямую. Вместо этого используйте синонимы.

Будут вопросы — приходите ещё
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.