Designer de modelos de dados
Criação de base de dados utilizando o desenhador de modelos de dados
Concepção da base de dados
Está na altura de conceber a sua própria base de dados. Para o fazer, vá para o separador Database no painel da esquerda.
Modelos de dados
Os dados na base de dados são armazenados sob a forma de tabelas especiais (modelos). E pode reparar que já dispomos de um modelo. Faz parte do módulo de autorização e está incluído em todos os projectos por defeito. Graças a ele, novos utilizadores da aplicação são criados e os já existentes são geridos. Mas não vamos deter-nos agora no seu estudo, vamos criar o nosso próprio modelo.
Imagine que estamos a desenvolver um serviço de mapas. Vamos criar um modelo que contenha informação sobre os países. Para o criar, é necessário clicar com o botão direito do rato numa área vazia da tela e seleccionar Create empty model.
Para criar, só precisamos de especificar o nome do modelo. Trataremos da auto-geração de pontos finais e elementos de interface com o utilizador em outros módulos do curso.
Campos de modelo
Note-se que imediatamente após a criação, o modelo já contém 4 campos. Estes são campos do sistema, cuja presença simplifica grandemente a criação inicial e posterior utilização do modelo.
ID (integer) - Identificador único, chave primária. É criada automaticamente para cada nova entrada na tabela e destina-se a garantir que não haja duplicados. É por identificação que se pode identificar de forma única um registo numa tabela. O seu valor começa em 1 e aumenta automaticamente em 1 para cada nova entrada.
CreatedAt (datetime) - O tempo em que o registo foi criado na tabela.
UpdatedAt (datetime) - A hora em que a entrada foi modificada pela última vez.
DeletedAt (datetime) - A hora a que a entrada foi apagada. É claro, apenas se foi utilizada a remoção suave. Ou seja, tal eliminação, quando o registo é apenas marcado como eliminado e filtrado por pedidos de acesso ao mesmo, mas ao mesmo tempo permanece fisicamente na tabela. Isto é diferente do apagamento em massa, que na realidade apaga os dados por completo.
Para além dos campos do sistema, seria sensato acrescentar campos personalizados ao modelo criado. Suponhamos que queremos ver o nome do país e alguma descrição com informação sobre o mesmo.
A escolha de um tipo de campo não deve ser um problema. String é adequado para o nome, e Text para a descrição informativa.
Além disso, estão disponíveis mais quatro interruptores:
Multiple values (Array) - utilizar arrays em vez de entradas únicas.
Not null - o campo especificado não pode estar vazio, deve conter sempre dados.
Unique - o valor do campo deve ser único, neste modelo não pode haver dois registos cujos valores deste campo sejam os mesmos.
Index - indica que será criado um índice especial para este campo, a fim de acelerar a pesquisa.
Em geral, só é correcto verificar as marcas se for realmente necessário. Por exemplo, poderíamos marcar Not null e Unique para os nomes dos países, assumindo que não pode haver um país sem um nome, ou dois países com o mesmo nome. Contudo, é uma boa ideia controlar isto na fase de criação da lógica da aplicação, e não colocar restrições à própria base de dados.
Da mesma forma, criar uma tabela com informações sobre as cidades. Pense em que campos de dados pode conter, que tipo são esses campos.
Relações entre modelos de dados
Os dados na base de dados não existem por si sós, sob a forma de tabelas dispersas. Estão relacionados uns com os outros de certa forma. A chave para desenvolver um modelo de dados é definir estas relações e construir relações.
Para estabelecer tais relações, é necessário traçar uma linha com o rato desde a fronteira de um modelo até ao outro. No nosso exemplo, sabemos com certeza que cada cidade está localizada em algum país, pelo que podemos criar uma ligação de país para cidade.
Existem 3 tipos diferentes de ligações:
Uma a uma (has one). Cada registo na tabela é mapeado para um registo da tabela associada (o mesmo se aplica ao inverso). Um exemplo simples é uma pessoa e o seu passaporte. Podemos sempre ter a certeza de que esta ligação é única. Um passaporte só pode ter um titular, e cada pessoa só pode ter um passaporte válido.
Um-para-muitos (has many). Cada registo numa tabela pode ter muitos registos noutra tabela. A nossa base de dados é um exemplo semelhante. Um país pode ter muitas cidades diferentes, mas cada cidade pode pertencer apenas a um país. Esta é a ligação que faremos.
Muita a muitíssima. Uma relação na qual vários registos de uma tabela podem corresponder a vários registos de outra tabela. Um exemplo simples é a relação entre professores e estudantes. Cada professor pode ensinar muitos estudantes, tal como cada estudante pode aprender com muitos professores diferentes.