AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 11101
Accepted
JoeGeeky
JoeGeeky
Asked: 2012-01-22 03:31:41 +0800 CST2012-01-22 03:31:41 +0800 CST 2012-01-22 03:31:41 +0800 CST

Critérios de decisão sobre quando usar um esquema não dbo versus um novo banco de dados

  • 772

Sou principalmente um desenvolvedor de aplicativos, mas tenho que fazer todo o trabalho de banco de dados inicial para meu projeto atual ( aliás ... é MS SQL Server 2008 ). Como primeira decisão, estou tentando descobrir se devo dividir meu estado usando bancos de dados separados ou esquemas separados no mesmo banco de dados. Eu fiz uma pequena leitura no esquema do SQL Server e parece uma maneira natural de separar domínios de objeto ( que eu gosto ), mas não tenho certeza se pode haver custos ocultos para esse padrão.

Quais são as coisas mais práticas que devo considerar ao selecionar entre essas duas abordagens? Se eu evitar o dbo.mytablefavor de myschema.mytableestarei criando outros desafios ( ou problemas ) para minha arquitetura?

Como uma observação lateral... Em algum momento, isso será entregue a um DBA real para manter/suportar, então estou tentando ter certeza de não tornar a vida deles mais difícil.

sql-server-2008 database-design
  • 2 2 respostas
  • 2686 Views

2 respostas

  • Voted
  1. Best Answer
    gbn
    2012-01-22T04:03:20+08:002012-01-22T04:03:20+08:00

    Começarei dizendo para não considerar esquemas como namespaces ou domínios de objetos no sentido OO. Os esquemas são essencialmente contêineres de permissão com algum valor agregado (veja abaixo)

    Além disso, "esquemas separados" ou "bancos de dados separados" são dois conceitos diferentes. Os dados que precisam ser transacionalmente e referencialmente consistentes precisam estar no mesmo banco de dados. Veja um banco de dados ou dez? artigo do blog para mais.

    Nesse banco de dados, você pode ou não usar esquemas para organizar seus objetos.

    Pessoalmente, sou fã de esquemas e sempre os uso, mas para coisas como permissões e agrupamento lógico. Para isso, remeto-vos às questões anteriores onde podem ver que a opinião geral é favorável às mesmas:

    • Projeto de esquema - práticas recomendadas?
    • Qual padrão devo seguir ao nomear tabelas e exibições?
    • Uso excessivo/correto de esquemas?

    Para o caso de bancos de dados separados, consulte a resposta de Aaron , mas tudo isso depende do requisito "transacionalmente e referencialmente consistente".

    • 17
  2. Aaron Bertrand
    2012-01-22T09:19:48+08:002012-01-22T09:19:48+08:00

    Concordo com @gbn. Arquitetei soluções usando esquemas para separação e bancos de dados para separação e acho que usar bancos de dados é muito mais prático. Algumas razões:

    1. Ter seu aplicativo conectado a um banco de dados específico do contexto e, em seguida, executar as mesmas consultas é muito mais fácil do que injetar suas consultas <schema>na frente de todas as referências de objeto. Isso se presta a muito SQL dinâmico, muitos logins de aplicativos diferentes com esquemas padrão (o que significa que seu código não usaria o prefixo do esquema, contando com o esquema padrão do usuário do aplicativo - pode levar a um enorme inchaço do cache do plano e depuração difícil), ou muitos procedimentos armazenados para gerenciar (imagine apenas um relatório simples, se você precisar de um por esquema, o código muda, agora você precisa alterar o mesmo código várias vezes, uma vez para cada esquema).
    2. A separação por banco de dados permite a flexibilidade de mover bancos de dados ocupados para armazenamentos/instâncias mais rápidos ou diferentes sem ter que extrair objetos de um grande banco de dados abrangente. A maioria das pessoas não pensa nisso com tanta antecedência, mas é definitivamente um problema de escala em potencial. Principalmente se você acabar tendo um esquema que "assume o controle" e requer a maior parte dos recursos do servidor, dividi-los pode ser uma tarefa extremamente complicada, mesmo que já estejam separados por esquema.
    3. Bancos de dados separados também podem permitir que você tenha diferentes cronogramas de manutenção e backup para cada divisão. Não tenho certeza do que você quer dizer com "dividir por estado", mas supondo que você queira dizer isolar clientes, você pode ter clientes com requisitos diferentes e tolerância diferente para perda de dados, manutenção de índice, etc.
    4. Você pode acabar tendo clientes que, por lei ou política corporativa, precisam que você mantenha seus dados separados de qualquer outra pessoa. Isso geralmente é aceitável no nível do banco de dados, mas o nível do esquema geralmente será insuficiente. Você pode não ter esses clientes agora, mas pode se tornar um problema real mais tarde se você o fizer.
    • 11

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve