Houve muita discussão sobre esta questão: Quais tecnologias de banco de dados os grandes mecanismos de pesquisa usam?
Tanta discussão que me deixou confuso. Então... o que é um banco de dados, afinal? São apenas bancos de dados relacionais "bancos de dados"? Os bancos de dados orientados a objetos são "bancos de dados"? Algum sistema que me permite armazenar e recuperar informações (como um mapa, lista, etc) é um banco de dados?
Ou um banco de dados precisa armazenar/recuperar informações e também ter alguns recursos de administração como Usuários e Privilégios? O dBase III era mais um banco de dados, já que não era realmente relacional?
Vou citar Dictionary.com , pois considero isso o significado de banco de dados:
Sob esta definição, você pode considerar um banco de dados desde um RDBMS completo (SQL Server, Oracle, etc.) até um arquivo plano básico. Se armazenar dados, tecnicamente pode ser considerado um banco de dados.
Agora, como a maioria das coisas em nosso mundo moderno, existe o significado aceito de um nome. E no caso do banco de dados , isso vai variar de pessoa para pessoa. Muitas pessoas pensam em um banco de dados apenas como uma entidade gerenciada por um sistema de dados.
Vale a pena notar o comentário de @FrustratedWithFormsDesigner:
Concordo com essa afirmação e não acho necessariamente que um banco de dados precise residir em um "computador" ou em qualquer dispositivo eletrônico. Uma ficha-catálogo é um exemplo perfeito de banco de dados não informatizado.
Esta é uma ótima pergunta e um conjunto de ótimas respostas. Acho que uma coisa que está faltando na discussão é uma resposta que se aprofunde na distinção entre um banco de dados e um sistema de gerenciamento de banco de dados (DBMS). Eu gosto da definição de banco de dados que o Shark forneceu no dictionary.com. Acho que isso realmente mostra a necessidade da distinção entre o banco de dados e o SGBD. O banco de dados é uma "coleção abrangente de dados relacionados organizados para acesso conveniente". A segunda parte dessa definição, que diz "geralmente em um computador", é onde reside a distinção. Se estiver armazenado em um computador, pode ou não estar armazenado em um DBMS. Ele pode ser armazenado em um sistema de arquivos do sistema operacional. Pode ser armazenado em um sistema de arquivos proprietário. Portanto, concordo com FrustratedWithFormsDesigner que um catálogo de cartões é um "banco de dados" (bem, talvez - é abrangente e relacionado? Mais sobre isso depois). Acontece que está armazenado em um arquivo. No mundo de hoje, as "coleções mais abrangentes de dados relacionados organizados para acesso convenientesão armazenados em um computador, então discordo do Shark de que é uma pena que o Dictionary.com tenha adicionado essa parte. Eu acho que está absolutamente correto - como uma definição de "banco de dados".
Então, como definimos DBMS? Voltei ao Dictionary.com e encontrei isto :
"Um conjunto de programas que geralmente gerencia grandes conjuntos estruturados de dados persistentes, oferecendo recursos de consulta ad hoc para muitos usuários. Eles são amplamente usados em aplicativos de negócios."
A definição continua e é bastante longa. Ele descreve recursos comuns fornecidos por um DBMS, como segurança, integridade de dados, gerenciamento de transações, controle de simultaneidade e, o mais importante, independência de dados. Um DBMS fornece uma visão externa dos dados abstraídos de como eles são armazenados fisicamente.
Usando essa definição, acho que fica claro que um SGBD deve fornecer um modelo de dados , que é como os dados são organizados para apresentação ao usuário. Os três modelos comuns são hierárquico (IMS), rede (IDMS) e relacional (DB2, Oracle, SQL-Server, etc). Existe também o modelo OO (OODBMS). Somente o modelo relacional hoje tem ampla aplicabilidade. Os outros modelos ainda estão em uso, mas apenas em situações de nicho. O SGBD também deve fornecer as demais funcionalidades mencionadas. Eu me referiria a eles coletivamente como recursos ou capacidades de gerenciamento de dados.
Portanto, os produtos de software que fornecem recursos de gerenciamento de dados são SGBD, enquanto os produtos que não os fornecem não são SGBD . Os produtos NoSQL não são DBMS. Isso não quer dizer que eles não sejam úteis, e nãodizer que não armazenam "bancos de dados". Gosto de pensar que o DBMS, como diz a definição, resolve uma classe de problemas relacionados a aplicativos de negócios como contabilidade, folha de pagamento, cobrança, gerenciamento de relacionamento com o cliente, vendas etc. Os produtos NoSQL, embora não sejam DBMS, são excelentes para resolver um classe de problemas que não estão relacionados aos aplicativos de negócios tradicionais, mas que agora existem devido à enorme quantidade de armazenamento e largura de banda que a tecnologia de computação é capaz hoje. São aplicativos como busca na internet, como leilão online, como twitter e como facebook. O DBMS não é uma boa opção para resolver esses problemas, pois o DBMS contém recursos de gerenciamento de dados que, embora sejam uma necessidade absoluta para um aplicativo de negócios, são inúteis para resolver o armazenamento e a recuperação de Craig' s list ads ou feeds do Twitter (bem, geralmente - essa é outra discussão para outra hora :-)). Esses problemas exigem escalabilidade massiva e resposta extremamente rápida, e o DBMS, com seu excesso de recursos, não é uma boa opção.
Um profissional de dados precisa entender todas essas ferramentas para armazenar dados e que classe de problemas elas são adequadas para resolver para escolher a ferramenta certa para o trabalho, assim como um empreiteiro geral precisa saber qual de suas ferramentas de construção é A ferramenta certa para o trabalho. Nenhuma ferramenta é boa ou ruim por si só. É bom se for adequado para resolver um problema importante.
Concluirei observando duas outras distinções importantes na definição de banco de dados e DBMS que podem ter sido negligenciadas na discussão até agora. A definição de banco de dados inclui " coleção abrangente de dados relacionados ". A definição de DBMS inclui "gerenciar grandesSeria melhor usar o MS Access ou algum outro DBMS relacional. Portanto, talvez um catálogo de fichas não seja um banco de dados, pois, embora abrangente (tem um registro de todos os livros da biblioteca), não está relacionado, pois contém apenas informações sobre livros, não informações relacionadas completas sobre autores, editores, etc.
Em segundo lugar, um DBMS é excelente em armazenar dados "estruturados". É totalmente baseado em um esquema definido de elementos de dados discretos com tipos estruturados. Um produto NoSQL, digamos, um armazenamento de valor de chave que é desprovido de um esquema, se destaca no armazenamento de dados não estruturados. Esse produto NoSQL, portanto, não atende à definição de um DBMS. Mas se o problema que você está tentando resolver é o armazenamento de dados não estruturados (algo que nem tentamos fazer quando os DBMS' foram desenvolvidos pela primeira vez) e você não precisa de recursos de gerenciamento de dados independentes do aplicativo no qual gravará processar esses dados não estruturados, o produto NoSQL é uma ferramenta perfeita.
Espero que esta resposta agregue valor às outras ótimas respostas postadas aqui. Aguardo comentários e pontos de discussão que qualquer outra pessoa possa ter que nos ajudarão a ampliar nossa compreensão de bancos de dados e classes de tecnologia que resolvem problemas relacionados a dados.
Para mim, um banco de dados é algo que existe para armazenar e recuperar dados. Chamamos o Access de banco de dados, mesmo que seja apenas um belo front-end para uma coleção de arquivos. O Outlook (pelo menos no Mac) chama seu armazenamento de mensagens de banco de dados. Algumas pessoas até chamam o Excel de banco de dados (mas isso meio que me faz bufar - então há uma linha em algum lugar).
Acho que a definição evoluiu com o tempo, e comparando o dictionary.com com o wiki e com os artigos de vários profissionais de banco de dados ao longo dos últimos 30 anos, produzirá uma variedade de definições. E a definição continuará a evoluir também.
Se você está falando sobre algum tipo de fonte de dados que você ou seus aplicativos usam para armazenar ou recuperar dados, sejam eles relacionais ou não, não tenho problema em chamá-lo de banco de dados. Se for um arquivo de texto, você pode levantar algumas sobrancelhas, mas não tenho certeza se entendo a necessidade de identificar a definição de uma forma tão finita que as pessoas fiquem bravas com isso.
Algumas pessoas ficam bastante arrogantes, aparentemente, se você chega a sugerir que BigTable (ou NoSQL ou hadoop) é um "banco de dados" e afirma que chamá-lo como tal dará - especialmente para novatos - grande promessa de desempenho infinito, imortalidade e Unicórnios. Considerando que normalmente você apenas quer dizer que é um lugar onde os dados são armazenados e recuperados, sem quaisquer garantias sobre o que a implementação real faz, seja relacional ou não, ou se você mesmo poderia produzir tal coisa quando entediado em uma tarde de domingo.
Admito que me encolho quando as pessoas falam sobre um banco de dados relacional e chamam as linhas de "registros" ou as colunas de "campos". Mas embora isso me irrite um pouco, não fico com raiva ou saio do meu caminho para corrigi-los - qual é o objetivo? Eu entendi o que eles queriam dizer, mesmo que não fossem 100% precisos.
Pode ser muito geral, apenas uma coleção de dados e estruturas. O sistema para gerenciar um banco de dados pode ser tão simples quanto um sistema de arquivos ou tão complexo quanto um sistema federado como o DNS.
Geralmente, no uso moderno, quando se diz banco de dados, significa-se o armazenamento de dados e as estruturas e um sistema de gerenciamento de banco de dados que o acompanha e, como muito trabalho teórico foi feito sobre os fundamentos dos bancos de dados relacionais, esses ainda são os mais populares. muitas vezes, quando alguém diz banco de dados, geralmente está sugerindo um banco de dados relacional.
Com o surgimento dos bancos de dados NoSQL/não relacionais, o termo banco de dados voltou a ser mais geral e potencialmente mais ambíguo, uma vez que não se pode assumir um modelo compartilhado para entender os dados.
Antes da fundação da teoria relacional, a modelagem de dados em outros sistemas variava de sistema para sistema e não tinha princípios orientadores compartilhados como o modelo relacional - outros tipos de bancos de dados, como bancos de dados hierárquicos e bancos de dados de rede, eram usados.
Trabalhei para Ashton-Tate durante o desenvolvimento do dBASE Direct/36 e dBASE IV, usando meu conhecimento do dBASE III Plus para codificar um pequeno programa para auxiliar no teste do dBASE Direct/36 (interface para um IBM System/36 Mini Computer). Tínhamos que fazer instruções binárias de carga e chamada para as tabelas SQL do System/36, o que exigia digitar repetidamente as mesmas instruções 'load' e 'call' enquanto alterava os nomes das tabelas e dos campos após o envio para obter os dados de cada registro ou grupo de vários registros dependendo do escopo da consulta. dBASE III Plus, uma linguagem de programação de banco de dados, me permitiu criar 'dbldot.prg' que mudou o prompt de ponto único para um ponto duplo como eu projetei para ser um indicador de que o sistema estava no modo de recuperação SQL, bem como o texto abaixo da linha de comando que dizia: "
Naquela época, o dBASE era uma linguagem de programação de banco de dados, ou mais precisamente, uma linguagem de programa que permitia a manipulação de registros de dados. Um registro era um grupo de campos contendo dados para um item individual, como LAST_NAME, FIRST_NAME, ADDRESS, CITY, ST, ZIP, PLUS_FOUR, SSN etc. Essas estruturas foram posteriormente representadas em tabelas e organizadas em linhas e colunas, uma linha sendo um registro individual e uma coluna sendo os dados em uma série de registros para cada nome de campo. Dessa forma, um usuário pode classificar facilmente por nome de campo para classificar e agrupar registros por campos comuns específicos, como CIDADE, ST, CEP, etc.
A linguagem dBASE permitia ao usuário ou programador manipular dados, realizar classificações, exibir tabelas, registros e realizar cálculos (Y2K estava distante, mas as datas tinham que ser convertidas em AAAAMMDD para classificar os dados MM-DD-AAAA que foram inseridos, o que poderia ser feito com DtoC e CtoD (Date to Character, Character to Date)). Sem a linguagem dBASE, os arquivos de dados seriam simplesmente uma série de registros (linhas) com campos comuns (colunas).
Banco de dados relacional - esse era o termo usado para referenciar mais de um banco de dados (tabela) com outro que continha informações diferentes, mas continha um ou mais campos comuns. Por exemplo, um banco de dados intitulado "Endereços" contém "LNAME", "FNAME", "ADDRESS", "CITY", "ST", "ZIP", "SSN". Outro banco de dados intitulado "CHECKING" contém "ACCOUNT_NO", "ROUTING_NO", "CUSTLAST", "CUSTFIRST", "DOB", "SSNO", "CUST_NO". Embora os nomes dos campos sejam diferentes, vários deles contêm as mesmas informações que podem ser vinculadas entre si para vincular os dados de um banco de dados aos do outro para, digamos, enviar extratos para os clientes do banco, usando os campos de nome e sobrenome e números SS para relacionar os dados, puxando o endereço do cliente de um banco de dados e as informações da conta a serem colocadas no extrato do outro. Em seguida, em uma escala maior, uma função de mala direta pode ocorrer para executar essas ações em cada cliente individual no banco de dados ADDRESS, obtendo as informações relacionadas à conta de cada cliente, personalizando o extrato, imprimindo e endereçando cada um antes de passar para o próximo. registro, ou cliente, no banco de dados.
Então, algo como MS ACCESS poderia ser mais um DBMS, mas em um nível básico dBASE era uma linguagem para criar interfaces de usuário front-end e conduzir toda a manipulação de dados entre bancos de dados para criar uma relação entre eles e retornar os dados resultantes para nós, meros humanos, usarmos.
Muita coisa mudou desde então, mas a base continua a mesma. Os dados ainda estão contidos em registros contendo uma série de campos de vários tipos de dados e devem ser cruzados e mesclados com os de outros bancos de dados por meio de um ou mais pontos de dados comuns, permitindo-nos usar cartões de crédito, abrir contas na web usando nossos IDs do Google, Facebook, Twitter, rastreie nossos históricos de compras e assim por diante. Nossas vidas são apenas uma série de muitos bancos de dados relacionais sobrepostos, que percorremos todos os dias sem pensar em todos os bits e bytes que estão interagindo para nos trazer os prazeres e a evolução contínua da facilidade em nossas vidas hoje.
Pelo menos é assim que sempre entendi esses muitos anos de testes de software e hardware que começaram com o dBASE II em 1984.
O artigo seminal de Codd foi intitulado Um modelo relacional de dados para grandes bancos de dados compartilhados . O que ele chamou de "banco de dados", chamaríamos de banco de dados.
Eu gosto de suas imagens, no entanto. Implica um local onde os dados podem ser colocados, sabendo que serão mantidos em segurança, devidamente contabilizados e devolvidos apenas a quem mostrar que tem autoridade para acessá-los. Se nossa agência for roubada, temos a garantia de que o banco terá backup adequado para garantir que nossos preciosos recursos não sejam perdidos irrevogavelmente.
Dos Fundamentos do Projeto de Banco de Dados 7ª Ed. (página 5),
Eles ainda dizem que o uso comum é mais restrito,
Em nenhuma definição, um banco de dados é explicitamente "relacional" em qualquer sentido, embora frequentemente seja assumido porque o setor está saturado com DBAs de um tipo específico e, sem dúvida, o software de DBMS mais avançado é totalmente relacional. Do dicionário de banco de dados relacional
Esse último ponto é um tanto importante e também gosto da distinção entre o DBMS/RDBMS e o próprio banco de dados.
Um sistema de banco de dados útil deve, no mínimo,
Do ponto de vista de um desenvolvedor de software, se pensarmos em um sistema de banco de dados como uma ferramenta composta de um banco de dados junto com um sistema de gerenciamento de banco de dados (DBMS), então um banco de dados é apenas uma coleção arbitrária de arquivos "inutilizáveis" contendo a forma de representação do sistema de banco de dados. seus dados.
Para obter mais informações, consulte Onde o MySQL armazena arquivos de banco de dados
Essa representação geralmente é proprietária (Oracle e outros) e, como tal, não faz sentido se você estiver usando apenas um banco de dados.
De uma perspectiva mais literal, um banco de dados pode ser pensado como uma ferramenta que armazena e permite trabalhar com um conjunto de dados. É um software que você usaria para fazer coisas como encontrar o significado de um conjunto de dados, criar previsões/modelos usando dados e tal.
Uma das principais razões pelas quais as pessoas usam a abordagem de banco de dados em vez de escrever um monte de estruturas de dados lendo/gravando em arquivos é que o uso de um banco de dados deve garantir a manipulação explícita de dados porque os bancos de dados " persistem " nos dados. A única maneira de CRUD (trabalhar com) dados é por meio de comandos explícitos passados para o Gerenciador de Banco de Dados, e não outros eventos. Ele mantém seus dados seguros.
Outra característica importante dos Sistemas de Banco de Dados é que ele fornece um Modelo Lógico de Dados que permite acessar seus dados com eficiência. Internamente dentro de um Sistema de Banco de Dados, o banco de dados não deve ser acessado diretamente pelo usuário ou aplicativos. O DBMS deve armazenar seus dados de forma otimizada de forma simplificada e quebrada, juntamente com seus próprios metadados no banco de dados. O DBMS combina esses metadados com a representação simplificada e otimizada de seus dados em resposta a seus comandos. Se o sistema de banco de dados (DBMS + DB) foi bem projetado, trabalhar com seus dados por meio de um sistema de banco de dados deve ser mais eficiente do que outras abordagens. Tudo o que você precisa fazer é emitir um comando CRUD!!
Um sistema de banco de dados, então, é apenas um sistema, geralmente implementado em um software de computador, que armazena e consulta seus dados de maneira quase ideal.