Composição de entidade em banco de dados

12/11/2016

0

Pessoal, não estou conseguindo material que pelo menos me diga como se chama o que quero fazer!

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

Enoque Carmo

Responder

Post mais votado

13/11/2016

Boa tarde Enoque!

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

Npi Tecnologia
Responder

Mais Posts

12/11/2016

Enoque Carmo

Eu já vi esse curso e complementei com outros, mas nenhum apresenta um caso parecido com o que apresentei. Na verdade eu sei uma forma de fazer, mas quero saber se o meu raciocínio é uma boa solução, profissional! Neste curso citado o orientador fala de auto relacionamento e não apresenta exemplos de uso! Talvez fosse uma boa solução para o meu problema!
Responder

13/11/2016

Raylan Zibel

É... posso ter entendido errado, mas parece que você só precisa criar uma tabela pra fazer a interseção entre processos e serviços.


[processos]
id_processo
nm_processo

[servicos]
id_service
nm_servico

[proc_serv]
id_processo integer
id_servico integer

Responder

13/11/2016

Mariana Carvalho

Enoque, você tambem pode perguntar nos links das video aulas, tirar duvidas.
Responder

13/11/2016

Enoque Carmo

Obrigado, Daniel! Bem completo seu exemplo. Obrigado por responder me ajudou bastante!
Responder

13/11/2016

Enoque Carmo

Obrigado, Raylan! Sua resposta me ajudou a formar opinião! Obrigado pela disposição em ajudar.
Responder

13/11/2016

Enoque Carmo

Obrigado pessoal! Estou satisfeito com as respostas! Obrigado a todos!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar