Composição de entidade em banco de dados

Modelagem

12/11/2016

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

Curtidas 0

Melhor post

Npi Tecnologia

Npi Tecnologia

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
GOSTEI 1

Mais Respostas

Raylan Zibel

Raylan Zibel

12/11/2016

GOSTEI 0
Enoque Carmo

Enoque Carmo

12/11/2016

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!
GOSTEI 0
Raylan Zibel

Raylan Zibel

12/11/2016

É... 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

GOSTEI 0
Mariana Carvalho

Mariana Carvalho

12/11/2016

Enoque, você tambem pode perguntar nos links das video aulas, tirar duvidas.
GOSTEI 0
Enoque Carmo

Enoque Carmo

12/11/2016

Obrigado, Daniel! Bem completo seu exemplo. Obrigado por responder me ajudou bastante!
GOSTEI 0
Enoque Carmo

Enoque Carmo

12/11/2016

Obrigado, Raylan! Sua resposta me ajudou a formar opinião! Obrigado pela disposição em ajudar.
GOSTEI 0
Enoque Carmo

Enoque Carmo

12/11/2016

Obrigado pessoal! Estou satisfeito com as respostas! Obrigado a todos!
GOSTEI 0
POSTAR