Good morning, how do I validate values using relational and logical relationships, where the employee can only enter values below?
1: Disponível 2: Emprestado
Good morning, how do I validate values using relational and logical relationships, where the employee can only enter values below?
1: Disponível 2: Emprestado
You can use a foreign key for a domain table containing all valid and / or acceptable values.
Imagine a hypothetical scenario where you want to control borrowing books. In this scenario, a Livro
can only be Disponível
or Emprestado
.
The model would look something like:
TranslatingtoPg/SQL
:
--POSSIVEISSTATUSDEUMLIVROCREATETABLEtb_status(idBIGINTPRIMARYKEY,descricaoTEXT);--LIVROSCREATETABLEtb_livro(idBIGINTPRIMARYKEY,id_statusBIGINT,tituloTEXT,autorTEXT,FOREIGNKEY(id_status)REFERENCEStb_status(id));
ListingthepossibleStatus
ofaLivro
:
INSERTINTOtb_status(id,descricao)VALUES(1,'Disponível');INSERTINTOtb_status(id,descricao)VALUES(2,'Emprestado');
RegisteringLivros
withStatus
ofDisponível
:
INSERTINTOtb_livro(id,id_status,titulo,autor)VALUES(100,1,'MemóriasPóstumasdeBrásCubas','MachadodeAssis');INSERTINTOtb_livro(id,id_status,titulo,autor)VALUES(200,1,'Macunaíma','MáriodeAndrade');
RegisteringLivros
withStatus
ofEmprestado
:
INSERTINTOtb_livro(id,id_status,titulo,autor)VALUES(300,2,'VidasSecas','GracilianoRamos');INSERTINTOtb_livro(id,id_status,titulo,autor)VALUES(400,2,'FogoMorto','JoséLinsdoRego');INSERTINTOtb_livro(id,id_status,titulo,autor)VALUES(500,2,'GrandeSertão:Veredas','GuimarãesRosa');
Returningbooks:
--DEVOLUCAODOLIVRO:"GRANDE SERTAO VEREDAS"
UPDATE tb_livro SET id_status = 1 WHERE id = 500;
-- DEVOLUCAO DO LIVRO: "VIDAS SECAS"
UPDATE tb_livro SET id_status = 1 WHERE id = 300;
Livros
loan:
-- EMPRESTIMO DO LIVRO: "MACUNAIMA"
UPDATE tb_livro SET id_status = 2 WHERE id = 200;
-- EMPRESTIMO DO LIVRO: "MEMORIAS POSTUMAS"
UPDATE tb_livro SET id_status = 2 WHERE id = 100;
Attempting to change Status
from Livro
to something invalid would cause foreign key violation, not allowing Status
invalid Livro
:
UPDATE tb_livro SET id_status = 3 WHERE id = 100;
Output:
ERROR: insert or update on table "tb_livro" violates foreign key constraint "tb_livro_id_status_fkey" Detail: Key (id_status)=(3) is not present in table "tb_status".
SQLFiddle: link
You can add a constraint to check the field values, like this:
ALTER TABLE nome-da-tabela
ADD CONSTRAINT check-valores
CHECK (nome-do-campo= 1 OR nome-do-campo = 2);
Or when creating a table:
CREATE TABLE nome-da-tabela(
nome-do-campo integer CHECK (nome-do-campo= 1 OR nome-do-campo = 2)
);