Я в основном разработчик приложений, но мне приходится выполнять всю предварительную работу с базой данных для моего текущего проекта ( кстати ... его MS SQL Server 2008 ). В качестве первого решения я пытаюсь выяснить, следует ли разделить мое состояние, используя отдельные базы данных или используя отдельные схемы в одной и той же базе данных. Я немного почитал схемы SQL Server, и кажется, что это естественный способ разделения доменных объектов ( что мне нравится ), но я не уверен, могут ли быть скрытые затраты на этот шаблон.
Какие практические вещи я должен учитывать при выборе между этими двумя подходами? Если я буду избегать dbo.mytable
в пользу того, myschema.mytable
буду ли я создавать другие проблемы ( или проблемы ) для моей архитектуры?
Как примечание ... В какой-то момент это будет передано настоящему администратору базы данных для поддержки / поддержки, поэтому я стараюсь не усложнять им жизнь.
источник
Ответы:
Начну с того, что не рассматривайте схемы как пространства имен или доменные объекты в смысле ОО. Схемы по сути являются контейнерами разрешений с некоторой добавленной стоимостью (см. Ниже)
Кроме того, «отдельные схемы» или «отдельные базы данных» - это 2 разных понятия. Данные, которые должны быть согласованными по транзакциям и ссылкам, должны находиться в одной базе данных. Видите одну базу данных или десять? статья в блоге для большего.
В этой базе данных вы можете или не можете использовать схемы для организации ваших объектов.
Лично я фанат схем и всегда использую их, но для таких вещей, как разрешения и логическая группировка. Для этого я отсылаю вас к предыдущим вопросам, где вы можете увидеть общее мнение в их пользу:
Для случая для отдельных баз данных, см . Ответ Аарона , но все это зависит от «согласованного с точки зрения транзакций» требования.
источник
Согласитесь с @gbn. Я разработал решения, использующие схемы для разделения и базы данных для разделения, и я считаю, что использование баз данных гораздо более практично. Пара причин:
<schema>
перед всеми ссылками на объекты. Это поддается либо динамическому SQL, либо множеству разных входов в приложение со схемами по умолчанию (то есть ваш код не будет использовать префикс схемы, полагаясь на схему по умолчанию пользователя приложения - может привести к огромному разрастанию кэша плана и трудной отладке), или много хранимых процедур для управления (представьте себе простой отчет, если вам нужна одна схема на схему, то код меняется, теперь вам нужно изменить один и тот же код несколько раз, по одному для каждой схемы).источник