Existe uma desvantagem em usar o Access como um banco de dados?

8

Eu herdei um aplicativo que armazena dados em várias tabelas no Microsoft Access; o banco de dados do Access é usado apenas para armazenamento, todo o processamento de dados é tratado pelo aplicativo (VB.net).

Esta é uma boa prática? Preciso criar um aplicativo semelhante do zero e não tenho certeza do que é uma prática 'normal'.

Eu tentei pesquisar a questão em vários formatos e verifiquei vários resultados (incluindo muitos neste fórum), mas todas as perguntas parecem estar relacionadas a onde você está programando no Access, em vez de simplesmente usá-lo para armazenamento de dados.

Acho que poderia ser mais específico e dizer que o SQL Server Express ou similar seria uma opção melhor e, em caso afirmativo, por que?

Se você está lendo este post devido a uma pergunta semelhante, consulte este link fornecido por @DanielB abaixo - /programming/694921/ms-access-mdb-concurrency

OSKM
fonte
2
Compartilhar sua pesquisa ajuda a todos. Conte-nos o que você tentou e por que ele não atendeu às suas necessidades. Isso demonstra que você dedicou um tempo para tentar ajudar a si mesmo, evita reiterar respostas óbvias e, acima de tudo, ajuda a obter uma resposta mais específica e relevante. Veja também How to Ask
gnat
1
@gnat Confio nos detalhes adicionados acima para evitar mais votos negativos, para ficar claro se alguém puder me vincular a uma resposta que realmente responda à pergunta, ficarei encantada, pois passei várias horas tentando localizá-la antes de recorrer à pergunta. . (eu sei que deveria ter dito isso originalmente acima, mas esqueço que nem todos os que fazem perguntas neste fórum tomam a necessidade de pesquisa antes de pedirem como garantidos, alguns parecem pensar que é um arquivo de ajuda!?!)
OSKM
MS Access vs. SQL Server Express: veja aqui stackoverflow.com/questions/5704654/… Mas você também pode levar em consideração a edição compacta do SQL Server, que é muito mais semelhante ao Access do que ao SS Express.
Doc Brown

Respostas:

8

Os bancos de dados MSAccess normalmente não são usados ​​por alguns motivos. No passado, eles eram esquisitos e não aceitavam várias conexões ao mesmo tempo. Quando o banco de dados MSAccess está sendo usado, um arquivo de bloqueio é criado (ldb). Quando esse arquivo de bloqueio está presente, ninguém mais pode acessar o banco de dados. Descobri que quando havia um aplicativo de uso único, o desempenho do MSAccess seria severamente prejudicado após cerca de 50 mil linhas. Provavelmente é melhor agora, mas certamente não foi ajustado para usos maiores.

O mais típico é usar um sistema de banco de dados mais robusto, como postgres, mysql ou MSSQL. Para bancos de dados de conexão única, usei o Derby (com Java).

No que diz respeito ao VB, você não encontrará soluções profissionais usando o VB como software cliente para um banco de dados. Bem, talvez haja algumas soluções sendo vendidas, mas pessoalmente, eu as evitaria.

Normalmente, seu processamento será feito em uma linguagem como C #, C ++, Java, Perl, Python ou outras linguagens populares. As bibliotecas serão usadas para conectar-se ao banco de dados separado do idioma. Algumas soluções usarão o SQL para consultar e receber dados e outras usarão uma biblioteca de persistência para criar objetos a partir dos dados (isso está se tornando mais comum).

No que diz respeito às melhores práticas, sempre achei melhor ser consistente. Se você tem uma loja com quatro pessoas que entendem o MSAccess e o VisualBasic, faz muito sentido continuar fazendo dessa maneira. Se houver um objetivo na empresa de se afastar devido a falhas no passado, você poderá continuar usando o VB e alternar para outro banco de dados. Examinar tabelas de vinculação no MSAccess - usei um aplicativo VB em um banco de dados MSSQL vinculando as tabelas MSSQL a um banco de dados MSAccess. O VB não sabia a diferença entre uma tabela ingênua do MSAccess e uma tabela vinculada localizada em outro servidor. A solução VB ainda era esquisita, mas funcionava muito melhor com conjuntos de dados maiores.

Espero que isto ajude!

Kieveli
fonte
Muito obrigado pela resposta, meu único problema é "Quando o banco de dados do MSAccess está sendo usado, um arquivo de bloqueio é criado (ldb). Quando esse arquivo de bloqueio está presente, ninguém mais pode acessar o banco de dados" no aplicativo herdado tem 4 usuários simultâneos (aplicativo no banco de dados da máquina local na unidade compartilhada) e não há problemas com o bloqueio. Um comentário útil sobre a linha no's e agora pesquisarei suas outras sugestões.
OSKM
2
@OSKM Eu acredito que o arquivo ldb é usado quando uma gravação está acontecendo (para esclarecer - é usado o tempo todo, mas normalmente "bloqueia os usuários" quando uma gravação está acontecendo). Esta pergunta sobre SO sobre a concorrência do MS Access (MDB) entra em muito mais detalhes. Em geral, o modelo "compartilhamento de arquivos pela rede" pode funcionar, mas apresenta muitos problemas conforme o número de usuários na escala.
Daniel B
5
-1, você deve realmente excluir os fatos errados sobre o MS Access da sua resposta, como "suporta apenas um usuário por vez" ou "fica mais lento após mais de 50 mil linhas"; essas coisas estão completamente erradas. E sugerir um banco de dados do servidor cliente completo como alternativa, com sobrecarga administrativa total, não é uma boa sugestão do IMHO. O acesso é uma boa ferramenta se você sabe para que serve e para o que não é.
Doc Brown
6
Eu prefiro C #, mas o VB é bom se alguém se sentir confortável com ele. Ele fornece acesso exatamente às mesmas bibliotecas que o C # e oferece mais ou menos os mesmos conceitos de programação que o C #, mesmo que os conceitos de gramática e linguagem sejam muito diferentes. A Microsoft disse que os novos recursos de idiomas serão introduzidos em paralelo nos dois idiomas no futuro.
Olivier Jacot-Descombes
2
-1 para o comentário no VB. O VB.NET é tão funcional quanto o C #, embora a sintaxe seja mais irritante. Eu costumava trabalhar para uma empresa de desenvolvimento que usava exclusivamente o VB.NET com um back-end MSSQL.
Bobson
4

Eu tive alguma experiência com esse problema no passado em uma grande corporação.

À medida que a base de usuários cresce, surgem problemas de segurança e desempenho, porque os arquivos do Access onde os dados residiam precisavam ser armazenados em uma pasta compartilhada da rede e todos os usuários tinham que ter acesso W / R a eles.

Isso não é teórico, é uma experiência do mundo real; os bancos de dados do Access não se adaptam bem a dezenas de usuários simultâneos, muito menos a algumas centenas de pessoas espalhadas geograficamente.

Com sistemas de banco de dados gratuitos e bons como o PostgreSQL disponíveis, há poucas razões para usar o Access, exceto o seguinte: falta de conhecimento técnico.

Tulains Córdova
fonte
2

Pessoalmente, se você é capaz de se afastar do acesso, tive clientes que realmente sofreram porque simplesmente não podiam ou não "mordiam a bala".

Como Kieveli mencionou, os bancos de dados do Access são horríveis quando se trata de armazenar grandes quantidades de dados, lembre-se de que os aplicativos sempre devem ser projetados com o benefício para o usuário final. Imagine que você tem um escritório cheio de pessoas que têm um sistema terrivelmente lento perdendo horas do seu tempo toda semana?

Falando da experiência pessoal, mover um banco de dados de acesso para o SQL Server não é tão doloroso, desde que você planeje corretamente, a questão é: você possui as habilidades técnicas internas para mudar para algo como vb.net etc.

Mrk Fldig
fonte
O acesso a -> SQL é realmente bastante simples, com alguns tutoriais
TruthOf42
1

Os bancos de dados de acesso não escalam bem, mas são fáceis de manipular e distribuir. Se você estiver usando um Mapeador Relacional de Objetos (O / R-mapper) suportando diferentes tipos de banco de dados como uma interface para seu banco de dados, seu aplicativo dependerá muito menos de um tipo específico de banco de dados. Isso permite que você inicie com o Access e mude para outro banco de dados posteriormente.

Eu fiz isso uma vez e iniciei um projeto com o Access e um front-end em C #, porque os bancos de dados podem ser configurados e desenvolvidos muito facilmente com o Access. Mais tarde, mudei para um banco de dados Oracle porque meu cliente possui um banco de dados Oracle. Apenas algumas alterações foram necessárias no meu aplicativo.

Olivier Jacot-Descombes
fonte
0

Jet-SQL está terrivelmente documentado. Só isso é uma razão para eu ficar longe do Access.

/programming/11265817/where-can-i-find-a-complete-reference-for-microsoft-access-sql

O T-SQL (SQL Server), por outro lado, é muito mais flexível e você pode encontrar toneladas de documentação, blogs e especialistas que podem ajudá-lo.

É claro que o Access é um banco de dados da área de trabalho, enquanto o SQL Server é um banco de dados cliente-servidor completo.

Existem alguns outros bancos de dados de desktop por aí (eu tenho usado o Advantage Database Server, mas esse também é um produto de nicho).

Jens Mühlenhoff
fonte