Composição de entidade em banco de dados
12/11/2016
0
A situação que tenho é que tenho uma entidade processo e um processo contém vários serviços que tb são entidades. Eu quero guardar no banco, quais serviços compõem um processo e criar todos os serviços inerentes ao processo sempre que ele for criado! Isso seria feito através de procedimentos armazenados? Seria processamento da aplicação? Só quero ter uma ideia do caminho mais indicado!
Enoque Carmo
Post mais votado
13/11/2016
Você pode fazer assim. Cria as tabelas de processo e serviço:
CREATE DATABASE DB; GO USE DB; GO CREATE TABLE PROCESSO( ID INT IDENTITY, DESCRICAO VARCHAR(50) NOT NULL, CONSTRAINT PK_PROCESSO PRIMARY KEY(ID) ); GO CREATE TABLE SERVICO( ID INT IDENTITY, DESCRICAO VARCHAR(50) NOT NULL, CONSTRAINT PK_SERVICO PRIMARY KEY(ID) ); GO
Criar uma terceira tabela para fazer a composição dos processos. Ela vai ter o id do processo e o id do serviço:
CREATE TABLE PROCESSO_SERVICO( ID INT IDENTITY, PROCESSO_ID INT NOT NULL, SERVICO_ID INT NOT NULL, CONSTRAINT PK_PROCESSO_SERVICO PRIMARY KEY(ID), CONSTRAINT FK_PROCESSO_SERVICO_PROCESSO FOREIGN KEY(PROCESSO_ID) REFERENCES PROCESSO(ID), CONSTRAINT FK_PROCESSO_SERVICO_SERVICO FOREIGN KEY(SERVICO_ID) REFERENCES SERVICO(ID) ); GO
Neste exemplo, inserir dois produtos e cinco serviços:
INSERT INTO PROCESSO VALUES('PROCESSO A'); INSERT INTO PROCESSO VALUES('PROCESSO B'); GO INSERT INTO SERVICO VALUES('SERVICO A1'); INSERT INTO SERVICO VALUES('SERVICO A2'); GO INSERT INTO SERVICO VALUES('SERVICO B1'); INSERT INTO SERVICO VALUES('SERVICO B2'); INSERT INTO SERVICO VALUES('SERVICO B1'); GO
Em seguida inseri liguei os serviços 1 e 2 ao processo 1 e os serviços 3, 4 e 5 ao processo 2:
INSERT INTO PROCESSO_SERVICO VALUES(1, 1); INSERT INTO PROCESSO_SERVICO VALUES(1, 2); GO INSERT INTO PROCESSO_SERVICO VALUES(2, 3); INSERT INTO PROCESSO_SERVICO VALUES(2, 4); INSERT INTO PROCESSO_SERVICO VALUES(2, 5); GO
Na parte do banco só precisa disso. Na sua aplicação, quando necessitar criar um no processo, você pode fazer um select como o abaixo, só substituindo a interrogação pelo id do processo, para pegar os serviços com os quais ele é composto:
SELECT SERVICO.ID ,SERVICO.DESCRICAO FROM SERVICO INNER JOIN PROCESSO_SERVICO ON PROCESSO_SERVICO.SERVICO_ID = SERVICO.ID WHERE PROCESSO_SERVICO.PROCESSO_ID = ?;
Espero ter lhe ajudado, se a resposta for útil dê um like!
Daniel Araújo
daniel.cdc.araujo@gmail.com
Npi Tecnologia
Mais Posts
12/11/2016
Raylan Zibel
12/11/2016
Enoque Carmo
13/11/2016
Raylan Zibel
[processos] id_processo nm_processo [servicos] id_service nm_servico [proc_serv] id_processo integer id_servico integer
13/11/2016
Mariana Carvalho
13/11/2016
Enoque Carmo
13/11/2016
Enoque Carmo
13/11/2016
Enoque Carmo
Clique aqui para fazer login e interagir na Comunidade :)