Base de dados relacional usando mysql – como fazer?

No âmbito de um gestor de projetos que estamos a desenvolver em Outsystems – usando a OutsystemsCloud free service – tivemos necessidade de usar uma base de dados relacional.

Como não queremos onerar a conta com dados (porque tem limite a partir do qual deixa de ser free) e somente usar as capacidades absolutamente fantásticas de integração de serviços da Outsystems numa PWA, estamos a usar o alojamento da PTPAC em linux com PHP e MySQL.
Podíamos usar a integração directa da base de dados com a plataforma Outsystems, mas preferimos usar uma API.
Num cenário empresarial isto poderia significar redução de custos, mas não seria opção para uso em produção porque o serviço de dados da Outsystems é sempre o melhor no mercado, é o fito deles.

Mas para começar MySQL está bom porque a qualquer momento podemos usar outra API, não interessa o que está por detrás, se é MySQL, Oracle, IBM DB2 ou um MS SQL Server, desde que nos forneça os dados enquanto estamos a desenvolver, estamos bem.

O que é uma base de dados relacional?

De forma muito simples é uma base de dados em que as tabelas referenciam valores umas das outras. No nosso caso estamos a desenvolver uma tabela com os projectos onde relacionada com esta temos outras duas tabelas, a de clientes e a de tipo de projecto. Determinados campos da tabela “projectos” estão noutras tabelas.

Porquê uma base de dados relacional?

Há muita literatura a defender e contra, é uma opção a fazer em cada projecto, neste queremos que quando se altera uma morada de um cliente, por exemplo, todos os projectos reflictam essa situação.
Se estivéssemos a fazer um ERP de faturação, não queríamos, porque queríamos por exemplo que a morada de uma entidade ficasse gravada em cada documento apesar de futuras alterações.

Criar tabelas relacionais numa base de dados mysql como se faz?

Em primeiro lugar temos que criar ou alterar as tabelas para InnoDB. Neste caso temos na mesma base de dados outras duas tabelas que não estão a ser usadas para este efeito e estão em MyISAM.

Para criar uma tabela InnoDB, escolhemos esse motor de armazenamento:

Para alterar para InnoDB:

Já está InnoDB, e agora? Como fazer as referências?

Vamos à tabela e clicamos em “visão de relação(ões)”, nesta captura de ecrã seguinte vemos que ID é a chave primária e os campos projectostipo_id e cliente_id serão os campos que estarão ligados ou relacionados com outras tabelas:

Depois de clicar em “visão de relação(ões)” temos:

No campo coluna escolhemos o campo “cliente_id” da nossa tabela “projectos” e relacionamos esse campo com a coluna “ID” da tabela “clientes” na mesma base de dados “ptpac_webmedia”. Note-se se poderia fazer esta relação uma coluna de outra tablela noutra base de dados da mesma instalação de MySQL, o que poderia ser útil noutros contextos, mas não neste.
Fazemos o mesmo com o campo “tipoprojecto”.

Deixamos os campos “ON DELETE” e “ON UPDATE” como “RESTRICT” porque não queremos apagar tipos de projectos ou clientes com projectos activos.

Também não queremos projectos sem cliente ou tipo de projecto, como tal esses campos na tabela não admitem valores nulos NULL, definimos que quaisquer projectos têm sempre um cliente e são de determinado tipo.
Pode mergulhar no manual para saber mais e adaptar ao seu caso https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html#foreign-key-restrictions.

Note-se que a nomenclatura é importante para percebermos e facilmente transmitirmos a outros programadores o que foi feito, mas pode ser a que se quiser.

Agora já podemos testar inserindo um registo directamente no phpMyAdmin e cá temos o campo a ler valores de outra tabela:

E o resultado é este, perfeito, é um ID de outra tabela:

Agora a nossa API já consegue enviar todos os dados de projecto com JOINs:

Agora vamos continuar a desenvolver a base de dados colocando mais campos para mais informação acerca de cada um dos projectos.

Obrigado pela leitura e esperamos que este post tenha sido mais elucidativo porque procurámos não aprofundar muito em conceitos mais pesados porque bem sabemos o frustrante que pode ser procurar informação no site do MySQL, especialmente quando estamos a aprender ou estamos cansados ou as duas coisas… o segredo é não desistir e por vezes deixar o trabalho para depois de uma boa refeição e noite bem dormida.

Use os comentários para colocar alguma questão.
Partilhe e divulgue!

.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *