Não sou iniciante no uso de bancos de dados SQL e, em particular, do SQL Server. No entanto, eu fui principalmente um cara do SQL 2000 e sempre fui confundido com esquemas em 2005 ou mais. Sim, conheço a definição básica de um esquema, mas para que eles realmente são usados em uma implantação típica do SQL Server?
Eu sempre usei o esquema padrão. Por que eu gostaria de criar esquemas especializados? Por que eu atribuiria algum dos esquemas internos?
EDIT: Para esclarecer, acho que estou procurando os benefícios dos esquemas. Se você só vai usá-lo como um esquema de segurança, parece que as funções de banco de dados já preencheram essa função. E usá-lo como um especificador de espaço para nome parece ter sido algo que você poderia ter feito com propriedade (dbo versus usuário, etc.).
Acho que o que estou falando é: o que Schemas faz que você não poderia fazer com proprietários e papéis? Quais são os seus benefícios específicos?
fonte
Assim como o Namespace dos códigos C #.
fonte
MyDatabase.MySchema
esquema não são mapeadas magicamente para classes de entidade noMyProject.MyDatabase.MySchema
espaço para nome. Também vale a pena notar que quaisquer.
hacks com notação de ponto ( ) nos nomes das tabelas acabarão como sublinhados (_
) nos nomes das classes. Apenas comida para pensamentos infelizes.Eles também podem fornecer um tipo de proteção contra colisão de nomes para dados de plug-ins. Por exemplo, o novo recurso Change Data Capture no SQL Server 2008 coloca as tabelas que ele usa em um esquema cdc separado. Dessa forma, eles não precisam se preocupar com um conflito de nomenclatura entre uma tabela CDC e uma tabela real usada no banco de dados e, por esse motivo, podem deliberadamente ocultar os nomes das tabelas reais.
fonte
Eu sei que é um encadeamento antigo, mas eu mesmo procurei nos esquemas e acho que o seguinte poderia ser outro bom candidato para o uso do esquema:
Em um Datawarehouse, com dados provenientes de fontes diferentes, você pode usar um esquema diferente para cada fonte e, por exemplo, controlar o acesso com base nos esquemas. Também evita possíveis colisões de nomes entre as várias fontes, como outro pôster respondeu acima.
fonte
Se você mantiver seu esquema discreto, poderá dimensionar um aplicativo implantando um determinado esquema em um novo servidor de banco de dados. (Isso pressupõe que você tenha um aplicativo ou sistema grande o suficiente para ter funcionalidades distintas).
Um exemplo, considere um sistema que executa o log. Todas as tabelas e SPs de log estão no esquema [log]. O log é um bom exemplo, porque é raro (se alguma vez) que outras funcionalidades do sistema se sobreponham (ou seja, junte-se a) objetos no esquema de log.
Uma dica para usar esta técnica - tenha uma cadeia de conexão diferente para cada esquema em seu aplicativo / sistema. Em seguida, implante os elementos do esquema em um novo servidor e altere sua cadeia de conexão quando precisar escalar.
fonte
Eu tendem a concordar com Brent sobre este ... veja esta discussão aqui. http://www.brentozar.com/archive/2010/05/05/why-use-schemas/
Em resumo ... os esquemas não são muito úteis, exceto em casos de uso muito específicos. Torna as coisas confusas. Não os utilize se puder ajudá-lo. E tente obedecer à regra K (eep) I (t) S (implemente) S (idiota).
fonte
Não vejo o benefício de criar alias para usuários vinculados ao Schemas. Aqui está o porquê ....
A maioria das pessoas conecta suas contas de usuário a bancos de dados por meio de funções inicialmente. Assim que você atribui um usuário ao sysadmin ou à função de banco de dados db_owner, de qualquer forma, essa conta é alias à conta de usuário "dbo" ou possui uma conta completa permissões em um banco de dados. Quando isso ocorrer, não importa como você se designe a um esquema além do esquema padrão (que tem o mesmo nome da sua conta de usuário), esses direitos dbo serão atribuídos ao objeto que você criar no usuário e no esquema. É meio inútil ..... e apenas um espaço para nome e confunde a propriedade verdadeira sobre esses objetos. Seu design ruim, se você me perguntar .... quem o projetou.
O que eles deveriam ter feito é criar "Grupos", jogar fora esquemas e funções e permitir que você agrupe grupos de grupos em qualquer combinação que desejar, e em cada nível informe ao sistema se as permissões são herdadas, negadas ou substituídas por customizadas. uns. Isso teria sido muito mais intuitivo e permitiu que os DBAs controlassem melhor quem são os verdadeiros proprietários desses objetos. No momento, está implícito na maioria dos casos que o usuário padrão do SQL Server do dbo possui esses direitos ... não o usuário.
fonte
Em uma loja da ORACLE em que trabalhei por muitos anos, os esquemas foram usados para encapsular procedimentos (e pacotes) aplicados a diferentes aplicativos front-end. Um esquema 'API' diferente para cada aplicativo geralmente fazia sentido, pois os casos de uso, usuários e requisitos do sistema eram bem diferentes. Por exemplo, um esquema de 'API' era para um aplicativo de desenvolvimento / configuração apenas para ser usado pelos desenvolvedores. Outro esquema de 'API' era para acessar os dados do cliente por meio de visualizações e procedimentos (pesquisas). Outro código encapsulado de esquema da 'API' usado para sincronizar dados de desenvolvimento / configuração e cliente com um aplicativo que possui seu próprio banco de dados. Alguns desses esquemas de 'API', nos bastidores, ainda compartilham procedimentos e funções comuns entre si (por meio de outros 'COMMON'
Eu direi que não ter um esquema provavelmente não é o fim do mundo, embora possa ser muito útil. Realmente, é a falta de pacotes no SQL Server que realmente cria problemas em minha mente ... mas esse é um tópico diferente.
fonte
Acho que os esquemas são como muitos novos recursos (seja para o SQL Server ou qualquer outra ferramenta de software). Você precisa avaliar cuidadosamente se o benefício de adicioná-lo ao seu kit de desenvolvimento compensa a perda de simplicidade no design e na implementação.
Parece-me que os esquemas são aproximadamente equivalentes aos namespaces opcionais. Se você estiver em uma situação em que os nomes de objetos estão colidindo e a granularidade de permissões não é suficiente, aqui está uma ferramenta. (Eu estaria inclinado a dizer que pode haver problemas de design que devem ser tratados em um nível mais fundamental primeiro.)
O problema pode ser que, se houver, alguns desenvolvedores começarão a usá-lo casualmente para obter benefícios a curto prazo; e uma vez lá dentro, pode se tornar kudzu.
fonte
No SQL Server 2000, os objetos criados foram vinculados a esse usuário específico, como se um usuário, digamos, Sam cria um objeto, digamos, Funcionários, essa tabela seria exibida como: Sam.Employees. E se Sam estiver saindo da empresa ou se mudando para outra área de negócios. Assim que você excluir o usuário Sam, o que aconteceria com a tabela Sam.Employees? Provavelmente, você precisaria alterar a propriedade primeiro de Sam.Employees para dbo.Employess. O esquema fornece uma solução para superar esse problema. Sam pode criar todo o seu objeto dentro de um esquema como Emp_Schema. Agora, se ele criar um objeto Employees no Emp_Schema, o objeto será referido como Emp_Schema.Employees. Mesmo se a conta do usuário Sam precisar ser excluída, o esquema não será afetado.
fonte
development - cada um de nossos desenvolvedores obtém seu próprio esquema como sandbox para jogar.
fonte
Aqui está um bom exemplo de implementação do uso de esquemas com o SQL Server. Tivemos vários aplicativos de acesso por ms. Queríamos convertê-los em um portal de aplicativos ASP.NET. Todo aplicativo ms-access é escrito como um aplicativo para esse portal. Todo aplicativo ms-access possui suas próprias tabelas de banco de dados. Alguns deles estão relacionados, nós os colocamos no esquema dbo comum do SQL Server. O resto recebe seus próprios esquemas. Dessa forma, se quisermos saber quais tabelas pertencem a um aplicativo no portal de aplicativos ASP.NET que podem ser facilmente navegadas, visualizadas e mantidas.
fonte