Sistema de Gestão de Base de Dados Relacional | SGBDR

O MySQL tal como o Oracle ou o SQL Server, é um Sistema de Gestão de Base de Dados Relacional, i.e., aquilo que aparentemente é unicamente uma base de dados é muito mais do que isso.
Um SGBDR além de ser composto por dados (aquilo que é mais evidente para os utilizadores sem conhecimentos técnicos) engloba uma série de componentes que permitem e facilitam a entrada e manipulação dos dados, ou dito de outro modo, um sistema de gestão de base de dados é um conjunto de software que gere e controla o acesso à informação propriamente dita.

MySQL | Dicionário de dados

Uma instalação de MySQL tem por defeito três bases de dados (de sistema): information_schema, mysql e performance_schema. O repositório mysql contém o dicionário de dados do sistema MySQL. Uma cópia, apenas com a função de leitura, é guardada na base de dados information_schema. O dicionário de dados é totalmente constituído por tabelas.
Nunca, em nenhum caso – nem com nenhuma justificação -, se deve alterar directamente as tabelas do dicionário de dados pois isso leva SEMPRE a consequências muito nefastas quer na disponibilidade e/ou quer no mero funcionamento do sistema de base de dados.

MySQL | Utilizador | Login

A segurança do MySQL avalia os utilizadores consoante as suas coordenadas de origem. A chave de segurança é composta por três parâmetros: nome do utilizador (user name), palavra-chave (password) e computador (host). Na gestão de utilizadores convém ter muita atenção com os valores para host pois frequentemente a entrada de um utilizador é recusada apenas por ter a máquina de origem mal atribuída.

O parâmetro host pode ter três valores:

  • localhost. O utilizador apenas pode ligar-se a partir da mesma máquina onde funciona o servidor de MySQL.
  • IP/domínio. A ligação somente será efectuada a partir de um determinado IP ou de um domínio.
  • %. A ligação pode ser feita a partir de qualquer máquina e/ou domínio. Funciona como um “trunfo”, i.e., representa qualquer computador, quer esteja na rede local ou na Internet.

MySQL | Listener

O listener (“aquele que ouve”) é um serviço lançado quando o daemon(1) do MySQL é iniciado. O listener é um subprocesso dependente do próprio servidor da base de dados, e corre ma porta que estiver especificada no ficheiro de configuração mysql.ini. Por defeito, quer seja em Windows ou Linux, por exemplo, está assignado à porta 3306.
Num sistema Windows pode verificar-se se o processo está a correr acedendo ao gestor GUI de serviços, ou utilizando a janela de comandos com a seguinte instrução:

netstat -a | findstr /C:LISTENING | findstr /C:3306

1 Programa de computador que corre em backgound, i.e., sem controlo directo pelo utilizador.

MySQL | Motores de base de dados

São os motores (engines) de base de dados que orientam os processos que asseguram a integridade dos dados, o modo como a estrutura física dos dados se organiza e, ainda, os mecanismos que asseguram a associação entre as estruturas lógicas e físicas do sistema.
No MySQL 5.6 existem os seguintes tipos principais de motores:
  • InnoDB. Motor que implementa o mecanismo ACID.
  • MyISAM. Anteriormente à versão 5.6 era o motor por defeito do MySQL; motor não-transaccional.
  • Memory. Um motor que funciona unicamente na memória (física ou virtual).
  • Archive. Destina-se ao arquivamento de dados raramente utilizados.
Para ver todos os motores disponíveis pode digitar-se, numa janela de Command Line do MySQL, a seguinte instrução: “SHOW ENGINES;”.

MySQL | Motor InnoDB

O motor InnoDB mantém um conjunto de logs em tudo semelhante ao que faz o Oracle. Esses logs (ou registos) destinam-se a assegurar a integridade das transacções ao mesmo tempo qye optimizam o custo transaccional. Este tipo de motor faz com o MySQL seja uma base de dados tipicamente transaccional. O InnoDB implementa as transacções ACID, o lock a nível da linha, além de assegurar a integridade referencial.

MySQL 5.6 | Arquitectura | Parte I

O superutilizador/DBA principal em MySQL denomina-se root (em Oracle é o utilizador SYS). Em MySQL uma base de dados é gerida de uma forma lógica e é o SGBDR que trata do armazenamento físico. O trabalho em SQL é controlado pela componente “MySQL Monitor” (em Oracle quem trata disso é o PL/SQL). A partir da versão 5.6 o MySQL já inclui a capacidade de processar XML.
Em MySQL é possível trabalhar com vários motores de base de dados, mas o único que assegura as propriedades transaccionais ACID é o InnoDB. Para além desse aspecto o motor InnoDB é o único que garante a regra de integridade referencial, e do protocolo X/Open XA para o processamento distribuído de transacções. O InnoDB é o motor por defeito em MySQL.

Duas relações com a mesma chave primária?

Por vezes surgem propostas de modelos de dados em que co-existem duas, por vezes mais, relações com a mesma chave primária (CP). Ora, isso teoricamente é um erro dado que duas relações com uma CP idêntica são uma única relação.
Regra:
Os objectos que tenham uma relação de 1:1 entre si devem manter-se juntos: um aluno tem um número de aluno (não tem dois); um automóvel tem uma matrícula (não tem duas), e por ai fora.
Exemplo:
 
Figura 1: Excerto de modelo de dados
No caso da Figura 1 ninguém poderá afirmar que o desenho esteja correcto. Porquê subdividir algumas características dos alunos por relacções diferentes quando na verdade os atributos têm uma relação de 1:1 com cada aluno.
  • Por acaso um aluno têm dois nomes? Não, não tem.
  • Será que um aluno têm dois números de bilhete de identidade? Também parece que não…
Então isso significa que entre a relação Aluno e os atributos nome e número de bilhete de identidade há uma associação de 1:1, i.e., um aluno tem um só nome e um único número de bilhete de identidade. Pelo que esses atributos têm que pertencer à mesma relação, têm que estar todos no mesmo conjunto.
A intersecção do conjunto (a relação) Aluno com o conjunto Aluno Identificação não é o conjunto vazio pelo que não são disjuntos, pelo contrário são uma e a mesma coisa. A intersecção dos dois conjuntos é a soma de todos os atributos sem que isso implique qualquer perca de integridade dos factos. Aliás, a integridade e o valor da informação aumentam quando os atributos 1:1 ficam todos no mesmo conjunto.
Conclusão: duas relações com uma CP idêntica são uma única relação.

Associação 1:1 entre objectos

A associação, ou relação, entre peças de informação é fundamental para no desenho do modelo de dados relacional. Tudo o que tenha o grau 1:1 deve manter-se na mesma relação.
A não observação desta regra leva a que no mesmo modelo de dados possam existir várias relações com a mesma chave primária. O que em si mesmo é uma impossibilidade lógica, pois duas relações com a mesma chave primária são uma e a mesma coisa.

Media library – Itens

Por vezes surgem em modelos de dados construções particulares que são confusas pois fogem aos estereótipos. No caso do modelo proposta por Williams (2011) há uma secção sobre a tipificação de atributos de suportes de informação como se pode ver na Figura 1.

Figura 1: Tipificação de atributos.

Como se trata de um centro de documentação onde são possíveis tipos muito distintos de elementos como, por exemplo, livros, revistas, DVD, VHS, CD, então é quase impossível ter uma tabela na base de dados onde existam em simultâneo TODOS as colunas necessárias à caracterização de casa item. Uma tabela construída dessa forma além de ter numerosas colunas teria sempre muitas que não seriam preenchidas por não se encaixarem no item a registar.

Assim, Williams (2011) propõe uma construção invulgar que começa pela definição do tipo de dados (Ref_Data_Types), que se liga a Data_Items onde se definem TODAS as características que interessem aos diferentes tipos de media. Esta última por sua vez converge em Library_Data_Items onde se atribuem as caraterísticas a cada um dos Library_Items.

A tabela Data_Item_Values proposta não faz qualquer sentido pois há uma relação de 1:1 entre a característica e o respectivo valor. Ou seja a coluna “Data_Item_Value” deve transitar para a tabela Library_data_Items, e a tabela Data_Item_Values deve ser descartada.