Olá O tutorial de hoje é sobre create table, ou seja, criação de tabela. Iremos com o conhecimento recém adquirido criar uma tabela de telefone. Entretanto, iremos trabalhar com conceitos relacionados a cardinalidade, isto é, de relacionamento entre tabelas. De acordo com a cardinalidade existem três tipos de relacionamentos entre entidades em uma tabela de banco de dados, a saber do tipo um para muitos (1:N), um para um (1:1) e muitos para muitos (N:N).

O relacionamento do tipo (1:N) é definido quando uma ocorrência de uma entidade pode se relacionar com várias ocorrências de outra entidade. Por exemplo, uma pessoa pode estar relacionada a vários números de telefone, mas um número de telefone só pode estar relacionado a apenas uma pessoa.

Ao passo que o relacionamento de (1:1) refere-se a uma ocorrência de uma entidade que está relacionada no máximo a uma ocorrência de uma outra entidade. E por fim o relacionamento de (N:N) acontece quando vários registros de uma tabela se relacionam com vários registros de outra tabela.

No exemplo de hoje iremos trabalhar especificamente com o conceito de um para muitos. Desse modo o ID da tabela “userposjava” terá que ser único. E para torná-lo único teremos que implementar uma regra de restrição. E se não o fizermos, ou seja, se não tornamos o ID um valor único, não será possível nem mesmo criar a tabela de telefones. Porque ao tentarmos criar um relacionamento entre as tabelas sem ter um campo que seja único, ou seja, que seja restrito, que não se repita, um erro será exibido.

CRIANDO UMA CHAVE ÚNICA

Clique sobre a tabela e depois sobre o Query Tool para abrir o Query Editor. O que iremos fazer é alterar a tabela “userposjava” adicionando uma chave UNIQUE na coluna ID.

alter table userposjava add unique (id);

Observe que depois de atualizar o banco de dados após a alteração será criado em constraints uma “userposjava_id_key”.

Ao selecionar a tabela no campo SQL teremos agora uma “CONSTRAINT userposjava_id_key UNIQUE (id)”.

CREATE TABLE NA PRÁTICA

Iremos criar uma tabela de telefones que terá as seguintes colunas, um “id” do tipo bigint, o “número de telefone” que será character, e o “tipo”, também um character. E teremos ainda uma tabela “usuariopessoa” que será uma chave estrangeira. A chave estrangeira (foreign key), diz respeito ao relacionamento entre tabelas. Entenda, ela será um campo da tabela “telefoneuser” que fará referência a um campo que é chave primária na tabela “userposjava”.

A saber, toda tabela possui uma chave primária, e, somente uma. É o identificador único da tabela. Ou seja, é representado por um campo da tabela, cujo valor não se repetirá. Acredito que agora esteja bem claro a importância de definirmos um campo UNIQUE na tabela “userposjava”.

Assim, como toda tabela possui uma chave primária (primary key), o campo telefone_id será a chave primária da tabela “telefoneuser”.

Agora precisamos de fato transformar o campo “usuariopessoa” em uma foreign key, e dessa forma apontá-la para a tabela “userposjava”.

CRIANDO FOREIGN KEY

Iremos então alterar a tabela “telefoneuser” que acabamos de criar adicionando uma foreign key que fará uma referência a coluna id da tabela “userposjava”.

alter table telefoneuser add foreign key (usuariopessoa) references userposjava (id)

AUTOMATIZANDO A SEQUÊNCIA ID

Agora implementaremos uma instrução para criar uma sequência, ou seja, para gerar automaticamente os valores do ID.

Os valores serão incrementados de um em um e igualmente este é também o valor mínimo. O valor máximo é o determinado por default no PostgreSQL 9223372036854775807. O id será startado a partir do 1.

CREATE SEQUENCE user_telefone_seq
increment 1
start 1
minvalue 1
maxvalue 9223372036854775807
caache 1

alter sequence user_telefone_seq
owner to postgres;

O próximo passo será fazer a tabela usar esta sequência que acabamos de criar. Para fazermos isso iremos dar uma instrução que informará que iremos proceder com uma alteração na tabela “telefoneuser”, onde na coluna do id, iremos determinar como padrão a sequência criada “telefone_user”. Veja abaixo na prática, como ficará essa linha de código.

ALTER TABLE telefoneuser ALTER COLUMN id SET DEFAULT nextval ('user_telefone_seq'::regclass)

EM POUCAS PALAVRAS

No tutorial de hoje, aprendemos o comando sql create table e também o importantíssimo conceito de cardinalidades e os tipos de relacionamentos existentes. E aprendemos ainda mais que conceitos sobre chaves primária e estrangeiras. Espero que tenham gostado, eu fico por aqui, nos vemos no próximo tutorial.