No Oracle:
- instância do servidor ==banco de dados ==catálogo ==todos os dados gerenciados pelo mesmo mecanismo de execução
- schema ==namespace no banco de dados, idêntico à conta do usuário
- usuário ==proprietário do esquema ==conta nomeada, idêntica ao esquema, que pode se conectar ao banco de dados, que possui o esquema e usa objetos possivelmente em outros esquemas
- para identificar qualquer objeto no servidor em execução, você precisa (nome do esquema + nome do objeto)
No PostgreSQL:
- instância do servidor ==db cluster ==todos os dados gerenciados pelo mesmo mecanismo de execução
- banco de dados ==catálogo ==banco de dados único dentro do cluster de banco de dados, isolado de outros bancos de dados no mesmo cluster de banco de dados
- schema ==namespace no banco de dados
- usuário ==conta nomeada, que pode se conectar ao banco de dados, possuir e usar objetos em cada banco de dados permitido separadamente
- para identificar qualquer objeto no servidor em execução, você precisa (nome do banco de dados + nome do esquema + nome do objeto)
No MySQL:
- instância do servidor ==não identificada com catálogo, apenas um conjunto de bancos de dados
- banco de dados ==esquema ==catálogo ==um namespace dentro do servidor.
- usuário ==conta nomeada, que pode se conectar ao servidor e usar (mas não pode possuir - nenhum conceito de propriedade) objetos em um ou mais bancos de dados
- para identificar qualquer objeto no servidor em execução, você precisa (nome do banco de dados + nome do objeto)
No Microsoft SQL Server:
- instância do servidor ==conjunto de bancos de dados gerenciados
- database ==qualificador de namespace no servidor, raramente chamado de catálogo
- schema ==proprietário ==namespace dentro do banco de dados, vinculado às funções do banco de dados, por padrão apenas
dbo
é usado - usuário ==conta nomeada, que pode se conectar ao servidor e usar (mas não pode possuir - esquema funciona como proprietário) objetos em um ou mais bancos de dados
- para identificar qualquer objeto no servidor em execução, você precisa (nome do banco de dados + proprietário + nome do objeto)
Então acho que a resposta para suas perguntas é:
-
Depende da implementação, se o nome do catálogo é necessário para identificar objetos. O significado de "catálogo", "esquema" e "banco de dados" varia de uma implementação para outra.
-
Sim, um catálogo é uma abstração de armazenamento de dados. Eu acho que também deve ser definido como um namespace isolado independente, mas nem todos os mecanismos SQL fazem isso.
-
Banco de dados e esquema são muito bem definidos por todos os fornecedores. Catálogo às vezes é sinônimo de "banco de dados" (pelo menos no Oracle e Postgres), às vezes sinônimo de "esquema" e às vezes sinônimo de ambos. O termo catálogo também muitas vezes significa coleta de metadados (também conhecido como tabelas de sistema).