Banco de dados I Análise e Desenvolvimento de Sistemas ADRIELLY LOPES BRUNO HENRIQUE ESDRAS DE LIMA SILVA WESLEY ALVES Gestão de empresa de marketing Cajazeiras - PB 2023 ADRIELLY LOPES BRUNO HENRIQUE ESDRAS DE LIMA SILVA WESLEY Gestão de empresa de marketing Projeto desenvolvido para a disciplina de Banco de dados I, durante o período letivo 2023.2 do curso de Análise e Desenvolvimento de Sistemas do Instituto Federal da Paraíba. Professor Dr. Fábio Gomes de Andrade Cajazeiras - PB 2023 Sumário Gestão de empresa de marketing......................................................................................... 2 Sumário....................................................................................................................................3 1. Domínio de aplicação......................................................................................................... 4 1.1 Apresentação do domínio............................................................................................. 4 1.2 Requisitos..................................................................................................................... 4 2. Projeto conceitual...............................................................................................................6 2.1 Diagrama Entidade-Relacionamento............................................................................ 6 2.1 Dicionário conceitual de dados..................................................................................... 6 Entidade Cliente............................................................................................................6 Atributos.................................................................................................................. 6 Entidade Serviço........................................................................................................... 7 Atributos.................................................................................................................. 7 Entidade Revisão.......................................................................................................... 7 Atributos.................................................................................................................. 7 Entidade Formação.......................................................................................................7 Atributos.................................................................................................................. 7 Entidade Conteúdo....................................................................................................... 8 Atributos.................................................................................................................. 8 Entidade Pagamento:....................................................................................................8 Atributos.................................................................................................................. 8 Entidade Débito.............................................................................................................8 Atributos.................................................................................................................. 8 Entidade Pix.................................................................................................................. 8 Atributos.................................................................................................................. 8 Entidade Funcionário.................................................................................................... 8 Atributos.................................................................................................................. 8 Entidade Redator.......................................................................................................... 9 Atributos.................................................................................................................. 9 Entidade Educador........................................................................................................9 Atributos.................................................................................................................. 9 Entidade Revisor...........................................................................................................9 Atributos.................................................................................................................. 9 Relacionamentos........................................................................................................ 10 2.3 Consultas esperadas.................................................................................................. 10 3. Projeto Lógico................................................................................................................... 11 3.1 Mapeamento Entidade-Relacionamento..................................................................... 11 3.2 Dicionário lógico de dados.......................................................................................... 12 3.2.1 Cliente................................................................................................................ 12 3.2.2 Serviço............................................................................................................... 13 3.2.3 Revisão.............................................................................................................. 14 3.2.4 Formação........................................................................................................... 15 3.2.5 Conteúdo............................................................................................................16 3.2.6 Débito.................................................................................................................16 3.2.7 Pix...................................................................................................................... 17 3.2.8 Redator.............................................................................................................. 19 3.2.9 Educator.............................................................................................................20 3.2.10 Revisor............................................................................................................. 21 4. Projeto físico..................................................................................................................... 22 4.1 Scripts de criação das relações.................................................................................. 22 4.1.0 Script Completo..................................................................................................22 4.1.1 Extensão UUID.................................................................................................. 26 4.1.2 Cliente................................................................................................................ 26 4.1.3 Serviço............................................................................................................... 26 4.1.4 Revisor............................................................................................................... 26 4.1.5 Revisão.............................................................................................................. 27 4.1.6 Educador............................................................................................................27 4.1.7 Redator.............................................................................................................. 28 4.1.8 Pix...................................................................................................................... 28 4.1.9 Débito.................................................................................................................28 4.1.10 Conteúdo..........................................................................................................29 4.1.11 Formação......................................................................................................... 29 4.2 Scripts de povoamento............................................................................................... 30 4.2.0 Povoamento Completo.......................................................................................30 4.2.1 Povoamento Cliente...........................................................................................34 4.2.2 Povoamento Serviço.......................................................................................... 34 4.2.3 Povoamento Revisor..........................................................................................35 4.2.4 Povoamento Educador.......................................................................................35 4.2.3 Povoamento Redator......................................................................................... 35 4.2.6 Povoamento Pix................................................................................................. 36 4.2.7 Povoamento Débito............................................................................................36 4.2.8 Povoamento Conteúdo...................................................................................... 37 4.2.9 Povoamento Revisão......................................................................................... 37 4.2.10 Povoamento Formação....................................................................................38 4.3 Scripts para as consultas esperadas.......................................................................... 38 4.3.1 Resgatar um redator, revisor ou educador.........................................................38 4.3.1.1 Redator......................................................................................................38 4.3.1.2 Revisor...................................................................................................... 38 4.3.1.3 Educador................................................................................................... 38 4.3.2 Resgatar um cliente específico.......................................................................... 39 4.3.3 Resgatar as informações a respeito de um serviço específico..........................39 4.3.4 Resgatar todos os serviços executados dentro de um intervalo de tempo específico.................................................................................................................... 39 4.3.5 Resgatar todos os serviços prestados por um funcionário específico de acordo com a sua função........................................................................................................39 4.3.5.1 Redator......................................................................................................39 4.3.5.2 Revisor...................................................................................................... 39 4.3.5.3 Educador................................................................................................... 40 4.3.6 Resgatar todos os serviços contratados por um cliente específico................... 40 4.3.7 Resgatar a quantidade de serviços prestados por um determinado funcionário de acordo com sua função..........................................................................................40 4.3.8 Resgatar a média de preço, menor preço e maior preço para serviços com classificação máxima.................................................................................................. 40 4.3.9 Resgatar todos os funcionários que não estejam associados a nenhum serviço de acordo com sua função..........................................................................................40 4.3.9.1 Redator......................................................................................................40 4.3.9.2 Revisor...................................................................................................... 41 4.3.9.3 Educador................................................................................................... 41 4.3.10 Resgatar todos os clientes especiais...............................................................41 4.4 Scripts das consultas requeridas................................................................................ 41 4.4.1 Recupera os serviços contratados pelo cliente UbiTech....................................41 4.4.2 Recupera os conteúdos com o número de palavras produzidos por João Silva... 41 4.4.3 Recupera todos os serviços que não são conteúdos........................................ 42 4.4.4 Recupera todos os serviços que receberam classificação................................ 42 4.4.5 Recupera todos os conteúdos que tenham uma persona envolvida com tecnologia....................................................................................................................42 4.4.6 Recupera todos os conteúdos que tenha como início de descrição de persona a palavra Mãe................................................................................................................ 42 4.4.7 Coleta os serviços e os ordena por classificação.............................................. 42 4.4.8 Coleta os conteúdos e os ordena pelo número de palavras..............................42 4.4.9 Recupera os redatores que não produziram nenhuma conteúdo......................42 4.4.10 Valores únicos, efetuados com cartão de débito............................................. 43 4.4.11 Recupera os redatores que produziram algum conteúdo................................ 43 4.4.12 Recupera os clientes que efetuaram um pagamento...................................... 43 4.4.13 Recupera todos os serviços que são conteúdos............................................. 44 4.4.14 Recupera o nome e o cpf de todos os funcionários.........................................44 4.4.15 Recupera a quantidade de serviços.................................................................44 4.4.16 Recupera a média, o maior e menor valor de pagamento de todos os serviços. 44 4.4.17 Recupera todos os tipos de empreendimento................................................. 45 4.4.18 Recupera a quantidade de clientes com o tipo de empreendimento digital.....45 4.5 Scripts das visões....................................................................................................... 45 4.5.1 Cria uma visão incluindo o cliente e o funcionário responsável pelo serviço.... 45 4.5.2 Cria uma visão com uma relação entre redator, servico e cliente.................... 46 4.5.3 Cria uma visão com uma relação entre revisor, servico e cliente..................... 46 4.5.4 Cria uma visão com uma relação entre educador, servico e cliente.................46 4.6 Scripts das funções/procedimentos armazenados..................................................... 46 4.6.1 Cria uma função que retorna os serviços relacionados a um funcionário específico.................................................................................................................... 46 4.6.2 Cria uma função que retorna o total de serviços.............................................. 47 4.6.3 Cria uma função que calcula a quantidade total de dinheiro gasto por um cliente..........................................................................................................................47 4.7 Scripts dos gatilhos..................................................................................................... 48 4.7.1 Cria um gatilho onde atualiza um redator quando um novo conteúdo é criado48 4.7.2 Cria um gatilho que impede que um novo revisor seja criado caso cobre menos de 10 por palavra........................................................................................................ 48 4.7.3 Cria um gatilho que atualiza automaticamente o preço do serviço caso o número de palavras de um conteúdo seja auterado...................................................49 4.8 Scripts dos índices...................................................................................................... 49 1. Domínio de aplicação 1.1 Apresentação do domínio A Makitex será uma empresa de marketing digital que oferecerá serviços online de escrita e revisão de conteúdos como posts de blog, newsletter e etc. Para oferecer um serviço de qualidade, e organizar bem todas as informações, a empresa terá um banco de dados que armazenará diversos dados sobre os conteúdos, clientes, funcionários e etc. Também serão ofertados cursos de capacitação profissional, para que os clientes possam oferecer seus produtos e serviços com maior qualidade. 1.2 Requisitos ● Será preciso guardar as informações dos clientes que desejam contratar qualquer serviço da empresa. Os dados a serem guardados são: nome, CPF/CNPJ, ramo de atuação, tipo de empreendimento e ano de fundação/início de atuação e se ele é um cliente especial. Clientes especiais têm prioridade no atendimento e tem seus conteúdos realizados por redatores mais qualificados. ● É preciso também guardar o nome, CPF, telefone, email, data de nascimento, data de contratação e a função de todos os funcionários. Para os redatores é preciso guardar as áreas de interesse, o número de conteúdos escritos, preço por palavra e se o redator é considerado especial. Para os revisores, também é importante saber qual o seu preço unitário e qual tipo de unidade o revisor trabalha, se é por hora ou por palavra. Com o objetivo de oferecer um serviço de qualidade, os educadores precisam ter formação acadêmica, e por isso, no caso de educadores, será preciso guardar também a instituição de ensino, o título da graduação, e o ano de conclusão. ● Também é necessário guardar as informações sobre os registros dos serviços prestados como o id, a data de realização, se já foi concluído, o cliente que contratou o serviço e a classificação (1 a 5 estrelas) no caso de serviços concluídos, bem como o preço do serviço. ● Os seguintes dados (relacionados aos serviços de conteúdo) precisarão ser armazenados: quantidade de palavras, descrição da persona, o redator responsável e o status. ● Para os serviços de revisão, é preciso guardar a categoria, revisor responsável, descrição da revisão, e se ela foi concluída ou está em andamento. ● No caso das formações, é preciso guardar o tempo de duração, título, educador, e a descrição. ● A empresa aceitará pagamentos com cartão de débito e pix. Para os pagamentos feitos em cartão, é preciso guardar o número do cartão, o nome do titular e a bandeira. Para pagamentos em pix é necessário guardar a chave pix utilizada para o pagamento. Em ambos os casos é preciso guardar o valor do pagamento, data de realização, e qual cliente efetuou o pagamento. 2. Projeto conceitual 2.1 Diagrama Entidade-Relacionamento 2.1 Dicionário conceitual de dados Entidade Cliente Criada para armazenar informações de um cliente. Atributos ● cpf/cnpj: Armazena o cpf, se o cliente for pessoa física, ou o cnpj se o cliente for uma pessoa jurídica; ● nome: Armazena o nome do cliente; ● ramoAtuacao: Armazena qual o ramo de atividade do cliente. ex: financeiro, marketing digital, imobiliário; ● tipoEmpreendimento: Armazena o tipo de empreendedorismo principal que o cliente se encaixa, se é individual, cooperativo, social, digital e etc; ● anoInicio: Armazena o ano inicial de atuação; ● especial: Armazena a informação se o cliente é um cliente especial ou não. Entidade Serviço Generalização das entidades Conteúdo, Revisão e Formação. Criada para armazenar todos os atributos comuns a todos os tipos diferentes de serviço. Atributos ● Id: id gerado para identificar unicamente um serviço; ● dataRealização: Armazena a data que o serviço foi finalizado; ● status: Armazena o status atual do serviço (aguardando profissional, em progresso, sob revisão, aguardando aprovação, concluído); ● classificacao: Armazena a nota dada pelo cliente para o serviço (entre 1 e 5 estrelas); Entidade Revisão Especialização da entidade Serviço. Criada para armazenar atributos únicos ao tipo de serviço de revisão. Atributos ● categoria: Armazena a categoria que a revisão se enquadra. (geral, tradução, ortográfica, alinhamento); ● descrição: Armazena detalhes específicos passados pelo cliente para o serviço de revisão. Entidade Formação Especialização da entidade Serviço. Criada para armazenar atributos únicos ao tipo de serviço de formação. Atributos ● titulo: Armazena o título do curso; ● duracao: Armazena a duração, em horas, da formação em questão; ● descrição: Armazena a descrição da formação contendo mais detalhes sobre o curso em questão; Entidade Conteúdo Especialização da entidade Serviço. Criada para armazenar atributos específicos dos serviços de produção de conteúdo; Atributos ● numeroPalavras: Armazena a quantidade de palavras que o conteúdo deve possuir; ● persona: Armazena os dados e descrição da persona destinada àquele conteúdo; Entidade Pagamento: Generalização das entidades Débito e Pix. Criada para armazenar atributos comuns a ambos os tipos de pagamento distintos; Atributos ● id: Armazena um código único que identifica um pagamento específico; ● titular: Armazena o titular da conta/cartão de quem efetuou o pagamento; Entidade Débito Especialização da entidade pagamento. Armazena dados específicos de pagamentos realizados com cartão de débito; Atributos ● numeroCartao: Armazena o número do cartão utilizado no pagamento; ● bandeira: Armazena a bandeira do cartão utilizado; Entidade Pix Especialização da entidade pagamento. Armazena dados específicos de pagamentos realizados com Pix; Atributos ● chaveUtilizada: Armazena a chave que o cliente utilizou para efetuar o pagamento; Entidade Funcionário Generalização das entidades Revisor, Redator e Educador. Criada para armazenar dados comuns às três entidades mencionadas. Atributos ● cpf: Armazena o cpf do funcionário; ● ● ● ● ● nome: Armazena o nome do funcionário; dataNascimento: Armazena da data de nascimento do funcionário; dataContratacao: Armazena a data de contratação do fun cionário; telefone: Armazena os telefones principais do funcionário; email: Guarda o email do funcionário. Entidade Redator Especialização da entidade Funcionário. Criada para guardar os dados específicos de cada redator. Atributos ● areas: Atributos multivalorado que armazena as áreas que o redator está apto para escrever; ● precoPalavra: Armazena o preco unitário por palavra de cada redator; ● especial: Armazena a informação de que o redator é ou não um profissional apto para atender demandas de clientes especiais; Entidade Educador Especialização da entidade Funcionário. Criada para guardar os dados específicos de cada educador. Atributos ● graduacao: Armazena o título acadêmico mais alto que o educador possui; ● instituicao: Armazena a instituição de ensino que o educador conseguiu seu título mais alto; ● anoConclusao: Armazena o ano de conclusão do curso da graduação, doutorado e etc; Entidade Revisor Especialização da entidade Funcionário. Criada para guardar os dados específicos de cada revisor. Atributos ● precoUnitario: Armazena o preço unitário de cada revisor; ● unidade: Armazena a unidade de medida relativa ao preço de cada revisor. (hora ou palavra). Relacionamentos ● paga: Relaciona Pagamento à Serviço, por conta de um mesmo pagamento poder pagar um conjunto de serviços, possui dois atributos: valor e data do pagamento. Cada serviço só pode ser pago por um único pagamento, mas o mesmo pagamento pode cobrir vários serviços; ● feito: Relaciona Pagamento à Cliente. Cada pagamento só pode ser feito por um único cliente, e cada cliente pode efetuar um ou mais pagamentos; ● contrata: Relaciona Cliente à Serviço. Cada cliente só pode contratar um serviço por vez, e cada serviço só pode ser contratado por um único cliente; ● produz: Relaciona Redator à Conteúdo. Cada redator pode escrever zero ou mais conteúdos, mas cada conteúdo só pode ser feito por um único redator; ● ministra: Relaciona Educator à Formação. Cada educador pode ministrar zero ou mais formações, contudo, cada formação terá um único educador associado; ● revisa: Relaciona Revisor à Revisão. Cada revisor pode efetuar zero ou mais revisões, mas uma revisão só pode ser feita por um único revisor. 2.3 Consultas esperadas A seguir está definida uma lista com 10 consultas que o banco de dados deve ser capaz de resolver: 1. 2. 3. 4. Resgatar um redator, revisor ou educador específico; Resgatar um cliente específico; Resgatar as informações a respeito de um serviço específico; Resgatar todos os serviços executados dentro de um intervalo de tempo específico; 5. Resgatar todos os serviços prestados por um funcionário específico de acordo com sua função; 6. Resgatar todos os serviços contratados por um cliente específico; 7. Resgatar a quantidade de serviços prestados por um determinado funcionário; 8. Resgatar a média de preço, menor preço e maior preço para serviços com classificação máxima; 9. Resgatar todos os funcionários que não estejam associados a nenhum serviço de acordo com sua função; 10. Resgatar todos os clientes especiais; 3. Projeto Lógico 3.1 Mapeamento Entidade-Relacionamento O mapeamento abaixo encontra-se já refinado Cliente( cpfCnpj, nome, ramoAtuacao, tipoEmpreendimento, anoInicio, especial ) Servico( id, preco, dataRealizacao, status, classificacao, cpfCnpjCliente) Revisao( idServico, categoria, descricao, cpfRevisor) Formacao( idServico, titulo, duracao, descricao, cpfEducador) Conteudo( idServico, numeroPalavras, persona, cpfRedator ) Debito( id, numeroCartao, bandeira, numeroCartao, Titular, cpfCnpjCliente, idServico, valor, data ) Pix( id, chaveUtilizada, cpfCnpjCliente, idServico, valor, data ) Redator( cpf, email, nome, dataNascimento, dataContratacao, precoPalavra, conteudosEscritos, especial, telefone1, telefone2, area1, area2 ) Educador( cpf, email, nome, dataNascimento, dataContratacao, graduacao, instituicao, anoConclusao, telefone1, telefone2 ) Revisor( cpf, email, nome, dataNascimento, dataContratacao, precoUnitario, unidade, telefone1, telefone2 ) 3.2 Dicionário lógico de dados 3.2.1 Cliente Cliente: armazena as informações de um cliente Atributo Descrição Tipo Domínio Restrição *chave primária cpfCnpj armazena o cpf ou o cnpj do cliente varchar(14) apenas caracteres numéricos nome armazena o nome do cliente varchar(100) varchar(100) *não nulo ramoAtuacao armazena o ramo de atividade do cliente varchar(100) varchar(100) *não nulo tipoEmpreendi mento armazena qual a forma de empreendedoris mo varchar(100) varchar(100) anoInicio armazena o ano de início do empreendiment o character(4) character(4) especial armazena a informação se o cliente é considerado especial boolean boolean *semântica, deve possuir no mínimo 11 caracteres *não nulo 3.2.2 Serviço Servico: guarda as informações dos serviços feitos Atributo Descrição Tipo Domínio Restrição Id identificador único da revisão uuid character(36) *chave primária preco preco da revisão realizada Real valores não negativos dataRealizacao data da realização da revisão date data status representa o status atual da revisão varchar(10) varchar(10) classificação representa a classificação dada pelo cliente Int valores entre 0 e5 cpfCnpjCliente guarda o cpf/cnpj do cliente que solicitou a revisão *não nulo varchar(14) varchar(14) *semântico, não negativo *não nulo *semântico, entre 1 e 5 *chave estrangeira referenciando cpfCnpj na tabela Cliente *não nulo 3.2.3 Revisão Revisao: guarda as informações das revisões feitas Atributo Descrição Tipo Domínio Restrição *chavePrimária IdServico identificador único da revisão UUID character(36) *chave estrangeira referenciando id na tabela Serviço categoria caracteriza a revisão realizada varchar(50) varchar(50) *não nulo descrição representa uma breve descrição da revisão realizada varchar(300) varchar(300) *não nulo *não nulo cpfRevisor guarda o cpf do revisor que realizou o serviço character(11) apenas caracteres numéricos *chave estrangeira referenciando cpf na tabela Revisor 3.2.4 Formação Formacao: guarda as informações das formações realizadas Atributo Descrição Tipo Domínio Restrição *chavePrimária IdServico identificador único da formação *chave estrangeira referenciando id na tabela Serviço uuid character(36) titulo titulo da formação disponiblizada varchar(100) varchar(100) *não nulo descrição representa uma breve descrição da revisão realizada varchar(300) varchar(300) *não nulo duração duração em minutos da formação realizada int apenas valores positivos * não nulo *semântica, maior que 0 *não nulo cpfEducador guarda o cpf do educador que realizou a formação character(11) apenas caracteres numéricos *chave estrangeira referenciando cpf na tabela Educador 3.2.5 Conteúdo Conteudo: guarda as informações dos conteúdos ffeitos Atributo Descrição Tipo Domínio Restrição *chavePrimária idSerivco identificador único da formação numeroPalavra s persona cpfRedator uuid character(36) guarda o número de palavras do conteúdo Int apenas valores positivos descrição da persona varchar(300) varchar(300) guarda o cpf do redator que realizou o serviço *chave estrangeira referenciando id na tabela Serviço *não nulo character(11) apenas caracteres numéricos *semântica, maior que 0 *chave estrangeira referenciando cpf na tabela Redator *não nulo 3.2.6 Débito Debito: guarda as informações dos pagamentos feitos com cartão de débito Atributo Descrição Tipo Domínio Restrição Id identificador único do pagamento uuid character(36) *chave primária *não nulo numeroCartao número do cartão utilizado para o pagamento varchar(20) apenas caracteres numéricos bandeira identifica a qual bandeira o cartão pertence Int Int *não nulo Titular nome do titular do cartão varchar(100) varchar(100) *não nulo cpfCnpjCliente cpf/cnpj do cliente beneficiado pelo pagamento varchar(14) apenas caracteres numéricos *semântica, apenas caracteres numéricos *chave estrangeira referenciando cpfCnpj na tabela cliente *não nulo idServico id do serviço que foi pago uuid character(36) *chave estrangeira referenciando id na tabela Servico *não nulo *não nulo valor valor que foi pago Real apenas valores positivos data data do pagamento Date Date *semântica, maior que zero *não nulo 3.2.7 Pix Pix: guarda as informações dos pagamentos feitos com pix Atributo Descrição Tipo Domínio Restrição Id identificador único do pagamento uuid character(36) *chave primária chave utilizada chave utilizada para o pagamento varchar(100) varchar(100) *não nulo cpfCnpjCliente cpf/cnpj do cliente beneficiado pelo pagamento varchar(14) apenas caracteres numéricos *chave estrangeira referenciando cpfCnpj na tabela cliente *não nulo idServico id do serviço que foi pago uuid character(36) *chave estrangeira referenciando id na tabela Servico *não nulo *não nulo valor valor que foi pago Real apenas valores positivos data data do pagamento Date Date *semântica, maior que zero *não nulo 3.2.8 Redator Redator: guarda as informações dos redatores Atributo Descrição Tipo Domínio Restrição *chave primária cpf cpf do redator character(11) apenas caracteres numérios email email do redator varchar(100) varchar(100) *semântica, apenas números *atributo chave *não nulo nome nome do redator varchar(100) varchar(100) dataNascimento data de nascimento do redator date apenas maiores de 18 anos dataContrataca o data de contratação do redator date date conteudosEscrit os número de conteúdos escritos pelo redator Int apenas valores não negativos *não nulo *semântica, apenas maiores de 18 anos *não nulo *não nulo *semântica, não negativo *não nulo precoPalvra preço cobrado por palavra real valores positivos especial identifica redatores especiais boolean boolean telefone1 telefone principal do redator varchar(15) apenas caracteres numéricos telefone2 telefone reserva do redator varchar(15) apenas caracteres numéricos area1 área principal de atuação do varchar(100) varchar(100) *semântica, valores positivos *não nulo *não nulo *semântica, apenas números *semântica, apenas números *não nulo redator area2 área secundária de atuação do redator varchar(100) varchar(100) 3.2.9 Educator Educador: guarda as informações dos educadores Atributo Descrição Tipo Domínio Restrição *chave primária cpf cpf do educador character(11) apenas caracteres numérios email email do educador varchar(100) varchar(100) nome nome do educador varchar(100) varchar(100) dataNascimento data de nascimento do educador date apenas maiores de 18 anos dataContrataca o data de contratação do educador date date *não nulo graduacao curso de graduação do educador varchar(100) varchar(100) *não nulo instituicao instituição de formação do educador varchar(100) varchar(100) *não nulo anoConclusao ano de conclusão do curso do educador character(4) character(4) *não nulo *semântica, apenas números *atributo chave *não nulo *não nulo *semântica, apenas maiores de 18 anos *não nulo telefone1 telefone principal do educador telefone2 telefone reserva do educador varchar(15) apenas caracteres numéricos varchar(15) apenas caracteres numéricos *semântica, apenas números *semântica, apenas números 3.2.10 Revisor Revisor: guarda as informações dos revisores Atributo Descrição Tipo Domínio Restrição cpf cpf do educador character(11) apenas caracteres numérios *chave primária email email do educador varchar(100) varchar(100) nome nome do educador varchar(100) varchar(100) dataNascimento data de nascimento do educador date apenas maiores de 18 anos dataContrataca o data de contratação do educador date date *não nulo precoUnitario preco por unidade Real apenas valores positivos *não nulo unidade unidade utilizada para cobrança varchar(50) varchar(50) *não nulo *atributo chave *não nulo *não nulo *semântica, apenas maiores de 18 anos *não nulo telefone1 telefone principal do educador telefone2 telefone reserva do educador varchar(15) apenas caracteres numéricos varchar(15) apenas caracteres numéricos *semântica, apenas números *semântica, apenas números 4. Projeto físico 4.1 Scripts de criação das relações 4.1.0 Script Completo -- criando extensao para uuid CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- CLIENTE create table cliente( cpfCnpj varchar(14) check (cpfCnpj not like '%[^0-9]%') check (length(cpfCnpj) >= 11), nome varchar(100) not null, ramoAtuacao varchar(100) not null, tipoEmpreendimento varchar(100), anoInicio character(4), especial boolean not null, constraint user_pkey primary key (cpfCnpj) ); -- SERVIÇO create table servico( id uuid default uuid_generate_v4(), preco real not null check (preco >= 0), dataRealizacao date, status varchar(10) not null, classificacao int check (classificacao >=0) check (classificacao <= 5), cpfCnpjCliente varchar(14) not null, constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references cliente(cpfCnpj), constraint servico_id_pkey primary key (id) ); -- REVISOR create table revisor( cpf varchar(11), email varchar(100) not null unique, nome varchar(100) not null, dataNascimento date not null check (age(current_date, dataNascimento) >= interval '18 years'), dataContratacao date not null, precoUnitario Real not null, unidade varchar(50) not null, telefone1 varchar(15) not null check (telefone1 not like '%[^0-9]%'), telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'), constraint revisor_cpf_pkey primary key (cpf) ); -- REVISAO create table revisao( idServico uuid, categoria varchar(50) not null, descricao varchar(300) not null, cpfRevisor varchar(11) not null, constraint id_revisao_pkey primary key (idServico), constraint fk_id_servico foreign key(idServico) references servico(id), constraint fk_cpf_revisor foreign key(cpfRevisor) references revisor(cpf) ); -- EDUCADOR create table educador ( cpf character(11) check (cpf not like '%[^0-9]%'), email varchar(100) not null unique, nome varchar(100) not null, dataNascimento date check (age(current_date, dataNascimento) >= interval '18 years'), dataContratacao date not null, graduacao varchar(100) not null, instituicao varchar(100) not null, anoConclusao character(4) not null, telefone1 varchar(15) not null check (telefone1 not like '%[^0-9]%'), telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'), constraint id_educador_pkey primary key (cpf) ); -- REDATOR create table redator ( cpf character(11) check (cpf not like '%[^0-9]%'), email varchar(100) not null unique, nome varchar(100) not null, dataNascimento date check (age(current_date, dataNascimento) >= interval '18 years'), dataContratacao date not null, conteudosEscritos int not null check (conteudosEscritos >= 0), precoPalavra real not null check(precoPalavra > 0), especial boolean not null, area1 varchar(100) not null, area2 varchar(100) default null, telefone1 varchar(15) not null check (telefone1 not like '%[^0-9]%'), telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'), constraint cpf_redator_pkey primary key (cpf) ); -- PIX create table pix ( id uuid default uuid_generate_v4(), chaveUtilizada varchar(100) not null, cpfCnpjCliente varchar(14) not null, idServico uuid not null, valor real not null check (valor > 0), dataPagamento date not null, constraint fk_idServico_pix foreign key(idServico) references servico(id), constraint id_pix_pkey primary key (id), constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references cliente(cpfCnpj) ); -- DEBITO create table debito ( id uuid default uuid_generate_v4(), numeroCartao varchar(20) not null check (numeroCartao not like '%[^0-9]%'), bandeira int not null, cpfCnpjCliente varchar(14) not null, idServico uuid not null, titular varchar(100) not null, valor real not null check (valor > 0), dataPagamento date not null, constraint fk_idServico_debito foreign key (idServico) references servico(id), constraint id_debito_pkey primary key (id), constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references cliente(cpfCnpj) ); -- CONTEUDO create table conteudo ( idServico uuid not null, numeroPalavras int not null check (numeroPalavras > 0), persona varchar(300), cpfRedator character(11) not null, constraint id_conteudo_pkey primary key (idServico), constraint fk_idServico_conteudo foreign key (idServico) references servico (id), constraint fk_cpf_redator foreign key(cpfRedator) references redator(cpf) ); -- FORMACAO create table formacao ( idServico uuid not null, titulo varchar(100) not null, descricao varchar(300) not null, duracao int not null check (duracao > 0), cpfEducador character(11) not null, constraint id_formacao_pkey primary key (idServico), constraint fk_idServico_formacao foreign key (idServico) references servico(id), constraint fk_cpf_educador foreign key(cpfEducador) references educador(cpf) ); 4.1.1 Extensão UUID -- criando extensao para uuid CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; 4.1.2 Cliente -- CLIENTE create table cliente( cpfCnpj varchar(14) check (cpfCnpj not like '%[^0-9]%') check (length(cpfCnpj) >= 11), nome varchar(100) not null, ramoAtuacao varchar(100) not null, tipoEmpreendimento varchar(100), anoInicio character(4), especial boolean not null, constraint user_pkey primary key (cpfCnpj) ); 4.1.3 Serviço -- SERVIÇO create table servico( id uuid default uuid_generate_v4(), preco real not null check (preco >= 0), dataRealizacao date, status varchar(10) not null, classificacao int check (classificacao >=0) check (classificacao <= 5), cpfCnpjCliente varchar(14) not null, constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references cliente(cpfCnpj), constraint servico_id_pkey primary key (id) ); 4.1.4 Revisor -- REVISOR create table revisor( cpf varchar(11), email varchar(100) not null unique, nome varchar(100) not null, dataNascimento date not null check (age(current_date, dataNascimento) >= interval '18 years'), dataContratacao date not null, precoUnitario Real not null, unidade varchar(50) not null, telefone1 varchar(15) not null check (telefone1 not like '%[^0-9]%'), telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'), constraint revisor_cpf_pkey primary key (cpf) ); 4.1.5 Revisão -- REVISAO create table revisao( idServico uuid, categoria varchar(50) not null, descricao varchar(300) not null, cpfRevisor varchar(11) not null, constraint id_revisao_pkey primary key (idServico), constraint fk_id_servico foreign key(idServico) references servico(id), constraint fk_cpf_revisor foreign key(cpfRevisor) references revisor(cpf) ); 4.1.6 Educador -- EDUCADOR create table educador ( cpf character(11) check (cpf not like '%[^0-9]%'), email varchar(100) not null unique, nome varchar(100) not null, dataNascimento date check (age(current_date, dataNascimento) >= interval '18 years'), dataContratacao date not null, graduacao varchar(100) not null, instituicao varchar(100) not null, anoConclusao character(4) not null, telefone1 varchar(15) not null check (telefone1 not like '%[^0-9]%'), telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'), constraint id_educador_pkey primary key (cpf) ); 4.1.7 Redator -- REDATOR create table redator ( cpf character(11) check (cpf not like '%[^0-9]%'), email varchar(100) not null unique, nome varchar(100) not null, dataNascimento date check (age(current_date, dataNascimento) >= interval '18 years'), dataContratacao date not null, conteudosEscritos int not null check (conteudosEscritos >= 0), precoPalavra real not null check(precoPalavra > 0), especial boolean not null, area1 varchar(100) not null, area2 varchar(100) default null, telefone1 varchar(15) not null check (telefone1 not like '%[^0-9]%'), telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'), constraint cpf_redator_pkey primary key (cpf) ); 4.1.8 Pix -- PIX create table pix ( id uuid default uuid_generate_v4(), chaveUtilizada varchar(100) not null, cpfCnpjCliente varchar(14) not null, idServico uuid not null, valor real not null check (valor > 0), dataPagamento date not null, constraint fk_idServico_pix foreign key(idServico) references servico(id), constraint id_pix_pkey primary key (id), constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references cliente(cpfCnpj) ); 4.1.9 Débito -- DEBITO create table debito ( id uuid default uuid_generate_v4(), numeroCartao varchar(20) not null check (numeroCartao not like '%[^0-9]%'), bandeira int not null, cpfCnpjCliente varchar(14) not null, idServico uuid not null, titular varchar(100) not null, valor real not null check (valor > 0), dataPagamento date not null, constraint fk_idServico_debito foreign key (idServico) references servico(id), constraint id_debito_pkey primary key (id), constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references cliente(cpfCnpj) ); 4.1.10 Conteúdo -- CONTEUDO create table conteudo ( idServico uuid not null, numeroPalavras int not null check (numeroPalavras > 0), persona varchar(300), cpfRedator character(11) not null, constraint id_conteudo_pkey primary key (idServico), constraint fk_idServico_conteudo foreign key (idServico) references servico (id), constraint fk_cpf_redator foreign key(cpfRedator) references redator(cpf) ); 4.1.11 Formação -- FORMACAO create table formacao ( idServico uuid not null, titulo varchar(100) not null, descricao varchar(300) not null, duracao int not null check (duracao > 0), cpfEducador character(11) not null, constraint id_formacao_pkey primary key (idServico), constraint fk_idServico_formacao foreign key (idServico) references servico(id), constraint fk_cpf_educador foreign key(cpfEducador) references educador(cpf) ); 4.2 Scripts de povoamento 4.2.0 Povoamento Completo --- Povoamento Cliente INSERT INTO Cliente(cpfCnpj, nome, ramoAtuacao, tipoEmpreendimento, anoInicio, especial) VALUES ('81997734052', 'Jorge Jesus', 'marketing digital','digital', '2020', true), ('54658743094', 'Rogério Almeida', 'educação à distância','digital', '2018', true), ('93486588000116', 'UbiTech', 'tecnologia automotiva','corporativo', '2002', false), ('85162521000106', 'Transtour', 'transporte interestadual','corporativo', '1995', false), ('33749790000161', 'TechNd', 'ti informativa','digital', '2010', true); -- Povoamento Serviço INSERT INTO Servico(id, preco, dataRealizacao, status, classificacao, cpfCnpjCliente) VALUES ('4827dc22-6e0e-4d1e-b4d6-9602f2c492f1',120, '2023-11-10', 'concluído', 4, '81997734052'), ('af04c594-8d90-4304-a407-09230b5251d8', 21, '2023-10-01', 'concluído', 3, '93486588000116'), ('0f25c0b8-dcbf-4d6d-aa9f-f190121340e4',140, '2023-11-05', 'andamento', 0, '93486588000116'), ('3c409f64-0d5c-4300-9a3f-4384cdf8087e', 25.6, '2020-12-20', 'concluído', 4, '85162521000106'), ('2502c49b-3c19-4ee5-910e-569383c93a4b', 15, '2020-12-24', 'concluído', 5, '85162521000106'), ('f47ac10b-58cc-4372-a567-0e02b2c3d479', 16, '2021-05-10', 'concluído', 4, '81997734052'), ('6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 30, '2021-10-01', 'concluído', 3, '54658743094'), ('c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1',110, '2019-03-17', 'andamento', 0, '85162521000106'), ('8b41b5b6-1a43-4972-b92a-2e23081c97ea',130, '2021-08-13', 'concluído', 4, '85162521000106'), ('24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 140, '2021-04-19', 'concluído', 5, '33749790000161'), ('db2b5ff0-6a41-4eb3-883f-3fbb68b0fd7c',300, '2023-05-12', 'concluído', 4, '33749790000161'), ('9f7e3a2d-5087-4d13-847d-f03465d6e147', 240, '2023-03-09', 'concluído', 3, '93486588000116'), ('a7889a64-4e46-46e8-8ec0-52a2d5691dfe',225, '2022-07-07', 'concluido', 0, '54658743094'), ('b5ac7dc9-19c7-4ba0-9f38-6dbcc13b45db',332, '2021-04-14', 'concluído', 4, '85162521000106'), ('e94d758f-5941-45f3-87c3-8480c77f1e05',310, '2021-08-23', 'concluído', 5, '81997734052'); -- Povoamento Revisor INSERT INTO Revisor(cpf,email,nome, dataNascimento, dataContratacao, precoUnitario, unidade, telefone1, telefone2) VALUES ('73876313015', 'julio@email.com','Júlio da Silva', '2001-11-16', '2020-10-05', 18, 'hora', '88992345678', '85964324758'), ('67966634035', 'amanda@email.lcom','Amanda da Silva', '1990-06-11', '2020-10-05', 15, 'hora', '83965987856', '86955689748'), ('10110017056', 'roberta@email.com','Roberta Alves', '1989-02-01', '2017-11-03', 15, 'palavra', '85991929365',null), ('56246288030', 'dani@email.com','Daniela Campos', '2000-07-22', '2018-07-08', 15, 'hora', '84999568874', null), ('85107563090', 'jose@email.com','José Carvalho', '1995-06-06', '2020-02-20', 15, 'palavra', '88993236354',null); -- Povoamento Educador INSERT INTO educador(cpf, email, nome,dataNascimento, dataContratacao, graduacao, instituicao, anoConclusao, telefone1, telefone2) VALUES ('41180541081', 'jorge@email.com', 'Jorge Henrique', '1992-12-24', '2020-05-12', 'Publicidade', 'FECAP', '2019', '86957845125',null), ('65081889091', 'bruna@email.com', 'Bruna Mendes', '1991-11-08', '2020-02-08', 'Publicidade', 'ESPM', '2019', '85969874589',null), ('46644579019', 'pnobre@email.com', 'Paulo Nobre', '1990-07-12', '2019-07-20', 'Publicidade', 'USP', '2019', '83994656768',null), ('92337404048', 'kadan@email.com', 'Kauã Dantas', '2000-09-19', '2018-11-10','Engenharia Civil', 'IFPB', '2019', '85999663589',null), ('18661834007', 'isans@email.com', 'Isa Nunes', '1889-07-23', '2017-04-15','Análise e Desenvolvimento de Sistemas', 'IFPB', '2019', '82996655478', '83997949585'); -- Povoamento Redator insert into Redator(cpf, email, nome, dataNascimento, dataContratacao, conteudosEscritos, precoPalavra, especial, area1, area2, telefone1, telefone2) values ('99767411038', 'joao@email.com', 'Joao Silva','1985-09-11', '2018-10-05', 1, 0.03,true, 'saúde', 'marketing digital', '84999523212', null), ('65022657074', 'wesley@email.com', 'Wesley Alves','1991-04-18', '2020-07-12', 1, 0.03,false, 'educação', 'tecnologia da informação', '87954216598', null), ('98061973057', 'roberta@email.com', 'Roberta Barbosa','2000-04-08', '2017-06-12', 1, 0.035,true, 'tecnologia da informação', 'marketing digital', '83996547888', null), ('05787003012', 'luana@email.com', 'Luana Cardoso','1997-06-16','2021-11-14', 2, 0.032, false,'educação', 'saúde', '83978569852', null), ('43366511087', 'aline@email.com', 'Aline Gregório','1983-10-22','2016-12-07', 0, 0.03,true,'carpintaria', 'construção civil', '83941245478', null); -- Povoamento Pix insert into pix(chaveUtilizada, cpfCnpjCliente, idServico, valor, dataPagamento) values ('38428716005', '81997734052', '4827dc22-6e0e-4d1e-b4d6-9602f2c492f1', 120, '2023-11-11'), ('88999999999', '81997734052', 'af04c594-8d90-4304-a407-09230b5251d8', 80, '2023-10-02'), ('38428716005', '81997734052', '0f25c0b8-dcbf-4d6d-aa9f-f190121340e4', 140, '2023-11-06'), ('88999999999', '81997734052', '3c409f64-0d5c-4300-9a3f-4384cdf8087e', 100, '2020-12-21'), ('38428716005', '81997734052', '2502c49b-3c19-4ee5-910e-569383c93a4b', 60, '2020-12-25'); -- Povoamento Débito insert into Debito(numeroCartao, bandeira, cpfCnpjCliente, idServico, valor, dataPagamento, titular) values ('5285804732114624', '5', '81997734052', 'f47ac10b-58cc-4372-a567-0e02b2c3d479', 100, '2021-05-11', 'Jorge Jesus'), ('5205145933582970', '5', '54658743094', '6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 80, '2021-10-02', 'Rogério Almeida'), ('4532335468782700', '4', '85162521000106', 'c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1', 110, '2019-03-18', 'Transtour'), ('6062827689363800', '6', '85162521000106', '8b41b5b6-1a43-4972-b92a-2e23081c97ea', 130, '2021-08-14', 'Transtour'), ('5013067460567103', '5', '33749790000161', '24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 140, '2021-04-20', 'TechNd'); -- Povoamento Conteúdo insert into conteudo(idServico, numeroPalavras, persona, cpfRedator) values ('2502c49b-3c19-4ee5-910e-569383c93a4b', 500,'Profissional urbano, 30 anos, entusiasta de tecnologia, busca eficiência e inovação no trabalho, apaixonado por viagens e estilo de vida saudável.', '99767411038'), ('6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 1000,'Estudante universitário, 22 anos, amante de arte e cultura, busca inspiração criativa, interessado em networking e eventos sociais.', '65022657074'), ('af04c594-8d90-4304-a407-09230b5251d8', 600,'Mãe dedicada, 35 anos, procura soluções práticas, interessada em produtos familiares sustentáveis, comprometida com o bem-estar dos filhos.', '98061973057'), ('3c409f64-0d5c-4300-9a3f-4384cdf8087e', 800,'Empreendedor(a) ambicioso(a), 40 anos, orientado(a) a resultados, focado(a) em crescimento, apaixonado(a) por liderança e inovação empresarial.', '05787003012'), ('f47ac10b-58cc-4372-a567-0e02b2c3d479', 500,'Aventureiro(a) digital, 28 anos, entusiasta de jogos e tecnologia, busca experiências online únicas, comprometido(a) com comunidades virtuais.', '05787003012'); -- Povoamento Revisão insert into revisao(idServico, categoria, descricao, cpfrevisor) values ('c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1', 'tradução', 'revisão de tradução de conteúdo de PT-BT para EN-US', '73876313015'), ('4827dc22-6e0e-4d1e-b4d6-9602f2c492f1', 'ortografia', 'revisão ortográfica de documento', '67966634035'), ('8b41b5b6-1a43-4972-b92a-2e23081c97ea', 'alinhamento', 'revisão de alinhamento de email', '10110017056'), ('0f25c0b8-dcbf-4d6d-aa9f-f190121340e4', 'alinhamento', 'revisão de alinhamento de conteúdo', '10110017056'), ('24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 'ortografia', 'revisão ortográfica de post', '85107563090'); -- Povoamento Formação insert into formacao(idservico, titulo, descricao, duracao, cpfeducador) values ('a7889a64-4e46-46e8-8ec0-52a2d5691dfe', 'Inbound Marketing', 'Curso introdutório de Inbound Marketing', 720, '41180541081'), ('9f7e3a2d-5087-4d13-847d-f03465d6e147', 'Inbound Marketing', 'Curso introdutório de Inbound Marketing', 600, '65081889091'), ('db2b5ff0-6a41-4eb3-883f-3fbb68b0fd7c', 'Tráfego Orgânico', 'Entendo Tráfego Orgânico', 540, '46644579019'), ('e94d758f-5941-45f3-87c3-8480c77f1e05', 'Tráfego Pago', 'Estratégias de Tráfego Pago', 780, '92337404048'), ('b5ac7dc9-19c7-4ba0-9f38-6dbcc13b45db', 'Persona e Publico-Alvo', 'Diferença entre persona e publico-alvo', 840, '18661834007'); 4.2.1 Povoamento Cliente --- Povoamento Cliente INSERT INTO Cliente(cpfCnpj, nome, ramoAtuacao, tipoEmpreendimento, anoInicio, especial) VALUES ('81997734052', 'Jorge Jesus', 'marketing digital','digital', '2020', true), ('54658743094', 'Rogério Almeida', 'educação à distância','digital', '2018', true), ('93486588000116', 'UbiTech', 'tecnologia automotiva','corporativo', '2002', false), ('85162521000106', 'Transtour', 'transporte interestadual','corporativo', '1995', false), ('33749790000161', 'TechNd', 'ti informativa','digital', '2010', true); 4.2.2 Povoamento Serviço -- Povoamento Serviço INSERT INTO Servico(id, preco, dataRealizacao, status, classificacao, cpfCnpjCliente) VALUES ('4827dc22-6e0e-4d1e-b4d6-9602f2c492f1',120, '2023-11-10', 'concluído', 4, '81997734052'), ('af04c594-8d90-4304-a407-09230b5251d8', 21, '2023-10-01', 'concluído', 3, '93486588000116'), ('0f25c0b8-dcbf-4d6d-aa9f-f190121340e4',140, '2023-11-05', 'andamento', 0, '93486588000116'), ('3c409f64-0d5c-4300-9a3f-4384cdf8087e', 25.6, '2020-12-20', 'concluído', 4, '85162521000106'), ('2502c49b-3c19-4ee5-910e-569383c93a4b', 15, '2020-12-24', 'concluído', 5, '85162521000106'), ('f47ac10b-58cc-4372-a567-0e02b2c3d479', 16, '2021-05-10', 'concluído', 4, '81997734052'), ('6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 30, '2021-10-01', 'concluído', 3, '54658743094'), ('c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1',110, '2019-03-17', 'andamento', 0, '85162521000106'), ('8b41b5b6-1a43-4972-b92a-2e23081c97ea',130, '2021-08-13', 'concluído', 4, '85162521000106'), ('24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 140, '2021-04-19', 'concluído', 5, '33749790000161'), ('db2b5ff0-6a41-4eb3-883f-3fbb68b0fd7c',300, '2023-05-12', 'concluído', 4, '33749790000161'), ('9f7e3a2d-5087-4d13-847d-f03465d6e147', 240, '2023-03-09', 'concluído', 3, '93486588000116'), ('a7889a64-4e46-46e8-8ec0-52a2d5691dfe',225, '2022-07-07', 'concluido', 0, '54658743094'), ('b5ac7dc9-19c7-4ba0-9f38-6dbcc13b45db',332, '2021-04-14', 'concluído', 4, '85162521000106'), ('e94d758f-5941-45f3-87c3-8480c77f1e05',310, '2021-08-23', 'concluído', 5, '81997734052'); 4.2.3 Povoamento Revisor -- Povoamento Revisor INSERT INTO Revisor(cpf,email,nome, dataNascimento, dataContratacao, precoUnitario, unidade, telefone1, telefone2) VALUES ('73876313015', 'julio@email.com','Júlio da Silva', '2001-11-16', '2020-10-05', 18, 'hora', '88992345678', '85964324758'), ('67966634035', 'amanda@email.lcom','Amanda da Silva', '1990-06-11', '2020-10-05', 15, 'hora', '83965987856', '86955689748'), ('10110017056', 'roberta@email.com','Roberta Alves', '1989-02-01', '2017-11-03', 15, 'palavra', '85991929365',null), ('56246288030', 'dani@email.com','Daniela Campos', '2000-07-22', '2018-07-08', 15, 'hora', '84999568874', null), ('85107563090', 'jose@email.com','José Carvalho', '1995-06-06', '2020-02-20', 15, 'palavra', '88993236354',null); 4.2.4 Povoamento Educador -- Povoamento Educador INSERT INTO educador(cpf, email, nome,dataNascimento, dataContratacao, graduacao, instituicao, anoConclusao, telefone1, telefone2) VALUES ('41180541081', 'jorge@email.com', 'Jorge Henrique', '1992-12-24', '2020-05-12', 'Publicidade', 'FECAP', '2019', '86957845125',null), ('65081889091', 'bruna@email.com', 'Bruna Mendes', '1991-11-08', '2020-02-08', 'Publicidade', 'ESPM', '2019', '85969874589',null), ('46644579019', 'pnobre@email.com', 'Paulo Nobre', '1990-07-12', '2019-07-20', 'Publicidade', 'USP', '2019', '83994656768',null), ('92337404048', 'kadan@email.com', 'Kauã Dantas', '2000-09-19', '2018-11-10','Engenharia Civil', 'IFPB', '2019', '85999663589',null), ('18661834007', 'isans@email.com', 'Isa Nunes', '1889-07-23', '2017-04-15','Análise e Desenvolvimento de Sistemas', 'IFPB', '2019', '82996655478', '83997949585'); 4.2.3 Povoamento Redator -- Povoamento Redator insert into Redator(cpf, email, nome, dataNascimento, dataContratacao, conteudosEscritos, precoPalavra, especial, area1, area2, telefone1, telefone2) values ('99767411038', 'joao@email.com', 'Joao Silva','1985-09-11', '2018-10-05', 1, 0.03,true, 'saúde', 'marketing digital', '84999523212', null), ('65022657074', 'wesley@email.com', 'Wesley Alves','1991-04-18', '2020-07-12', 1, 0.03,false, 'educação', 'tecnologia da informação', '87954216598', null), ('98061973057', 'roberta@email.com', 'Roberta Barbosa','2000-04-08', '2017-06-12', 1, 0.035,true, 'tecnologia da informação', 'marketing digital', '83996547888', null), ('05787003012', 'luana@email.com', 'Luana Cardoso','1997-06-16','2021-11-14', 2, 0.032, false,'educação', 'saúde', '83978569852', null), ('43366511087', 'aline@email.com', 'Aline Gregório','1983-10-22','2016-12-07', 0, 0.03,true,'carpintaria', 'construção civil', '83941245478', null); 4.2.6 Povoamento Pix -- Povoamento Pix insert into pix(chaveUtilizada, cpfCnpjCliente, idServico, valor, dataPagamento) values ('38428716005', '81997734052', '4827dc22-6e0e-4d1e-b4d6-9602f2c492f1', 120, '2023-11-11'), ('88999999999', '81997734052', 'af04c594-8d90-4304-a407-09230b5251d8', 80, '2023-10-02'), ('38428716005', '81997734052', '0f25c0b8-dcbf-4d6d-aa9f-f190121340e4', 140, '2023-11-06'), ('88999999999', '81997734052', '3c409f64-0d5c-4300-9a3f-4384cdf8087e', 100, '2020-12-21'), ('38428716005', '81997734052', '2502c49b-3c19-4ee5-910e-569383c93a4b', 60, '2020-12-25'); 4.2.7 Povoamento Débito -- Povoamento Débito insert into Debito(numeroCartao, bandeira, cpfCnpjCliente, idServico, valor, dataPagamento, titular) values ('5285804732114624', '5', '81997734052', 'f47ac10b-58cc-4372-a567-0e02b2c3d479', 100, '2021-05-11', 'Jorge Jesus'), ('5205145933582970', '5', '54658743094', '6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 80, '2021-10-02', 'Rogério Almeida'), ('4532335468782700', '4', '85162521000106', 'c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1', 110, '2019-03-18', 'Transtour'), ('6062827689363800', '6', '85162521000106', '8b41b5b6-1a43-4972-b92a-2e23081c97ea', 130, '2021-08-14', 'Transtour'), ('5013067460567103', '5', '33749790000161', '24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 140, '2021-04-20', 'TechNd'); 4.2.8 Povoamento Conteúdo -- Povoamento Conteúdo insert into conteudo(idServico, numeroPalavras, persona, cpfRedator) values ('2502c49b-3c19-4ee5-910e-569383c93a4b', 500,'Profissional urbano, 30 anos, entusiasta de tecnologia, busca eficiência e inovação no trabalho, apaixonado por viagens e estilo de vida saudável.', '99767411038'), ('6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 1000,'Estudante universitário, 22 anos, amante de arte e cultura, busca inspiração criativa, interessado em networking e eventos sociais.', '65022657074'), ('af04c594-8d90-4304-a407-09230b5251d8', 600,'Mãe dedicada, 35 anos, procura soluções práticas, interessada em produtos familiares sustentáveis, comprometida com o bem-estar dos filhos.', '98061973057'), ('3c409f64-0d5c-4300-9a3f-4384cdf8087e', 800,'Empreendedor(a) ambicioso(a), 40 anos, orientado(a) a resultados, focado(a) em crescimento, apaixonado(a) por liderança e inovação empresarial.', '05787003012'), ('f47ac10b-58cc-4372-a567-0e02b2c3d479', 500,'Aventureiro(a) digital, 28 anos, entusiasta de jogos e tecnologia, busca experiências online únicas, comprometido(a) com comunidades virtuais.', '05787003012'); 4.2.9 Povoamento Revisão -- Povoamento Revisão insert into revisao(idServico, categoria, descricao, cpfrevisor) values ('c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1', 'tradução', 'revisão de tradução de conteúdo de PT-BT para EN-US', '73876313015'), ('4827dc22-6e0e-4d1e-b4d6-9602f2c492f1', 'ortografia', 'revisão ortográfica de documento', '67966634035'), ('8b41b5b6-1a43-4972-b92a-2e23081c97ea', 'alinhamento', 'revisão de alinhamento de email', '10110017056'), ('0f25c0b8-dcbf-4d6d-aa9f-f190121340e4', 'alinhamento', 'revisão de alinhamento de conteúdo', '10110017056'), ('24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 'ortografia', 'revisão ortográfica de post', '85107563090'); 4.2.10 Povoamento Formação -- Povoamento Formação insert into formacao(idservico, titulo, descricao, duracao, cpfeducador) values ('a7889a64-4e46-46e8-8ec0-52a2d5691dfe', 'Inbound Marketing', 'Curso introdutório de Inbound Marketing', 720, '41180541081'), ('9f7e3a2d-5087-4d13-847d-f03465d6e147', 'Inbound Marketing', 'Curso introdutório de Inbound Marketing', 600, '65081889091'), ('db2b5ff0-6a41-4eb3-883f-3fbb68b0fd7c', 'Tráfego Orgânico', 'Entendo Tráfego Orgânico', 540, '46644579019'), ('e94d758f-5941-45f3-87c3-8480c77f1e05', 'Tráfego Pago', 'Estratégias de Tráfego Pago', 780, '92337404048'), ('b5ac7dc9-19c7-4ba0-9f38-6dbcc13b45db', 'Persona e Publico-Alvo', 'Diferença entre persona e publico-alvo', 840, '18661834007'); 4.3 Scripts para as consultas esperadas 4.3.1 Resgatar um redator, revisor ou educador 4.3.1.1 Redator select * from redator where cpf = '99767411038'; 4.3.1.2 Revisor select * from revisor where cpf = '67966634035' ; 4.3.1.3 Educador select * from educador where cpf = '41180541081' ; 4.3.2 Resgatar um cliente específico select * from cliente where cpfCnpj = '93486588000116'; 4.3.3 Resgatar as informações a respeito de um serviço específico. select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, s.cpfCnpjCliente from servico s left join revisao r on s.id = r.idServico left join conteudo c on s.id = c.idservico left join formacao f on s.id = f.idservico where s.id = '4827dc22-6e0e-4d1e-b4d6-9602f2c492f1'; 4.3.4 Resgatar todos os serviços executados dentro de um intervalo de tempo específico select * from servico where (dataRealizacao >= '2010-01-01') and (dataRealizacao <= '2023-10-01') order by dataRealizacao; 4.3.5 Resgatar todos os serviços prestados por um funcionário específico de acordo com a sua função 4.3.5.1 Redator select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, s.cpfCnpjCliente from redator r, conteudo c, servico s where (c.cpfRedator = r.cpf) and (s.id = c.idServico) and r.cpf = '99767411038'; 4.3.5.2 Revisor select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, s.cpfCnpjCliente from revisor rv, revisao r, servico s where (r.cpfRevisor = rv.cpf) and (s.id = r.idServico) and rv.cpf = '67966634035'; 4.3.5.3 Educador select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, s.cpfCnpjCliente from educador e, formacao f, servico s where (f.cpfEducador = e.cpf) and (s.id = f.idServico) and e.cpf = '65081889091'; 4.3.6 Resgatar todos os serviços contratados por um cliente específico select * from servico where (cpfCnpjCliente = '81997734052'); 4.3.7 Resgatar a quantidade de serviços prestados por um determinado funcionário de acordo com sua função select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, s.cpfCnpjCliente from servico s left join revisao r on s.id = r.idServico left join conteudo c on s.id = c.idservico left join formacao f on s.id = f.idservico left join revisor rev on rev.cpf = r.cpfrevisor left join redator red on red.cpf = c.cpfredator left join educador ed on ed.cpf = f.cpfeducador where rev.cpf = '05787003012' or red.cpf = '05787003012' or ed.cpf = '05787003012'; 4.3.8 Resgatar a média de preço, menor preço e maior preço para serviços com classificação máxima select AVG (preco) as media, MIN (preco) as menor, MAX (preco) as maior from servico where (classificacao = 5); 4.3.9 Resgatar todos os funcionários que não estejam associados a nenhum serviço de acordo com sua função 4.3.9.1 Redator select * from redator r where r.cpf not in ( select c.cpfredator from conteudo c ); 4.3.9.2 Revisor select * from revisor r where r.cpf not in ( select rev.cpfrevisor from revisao rev ); 4.3.9.3 Educador select * from educador where cpf not in ( select cpfeducador from formacao ); 4.3.10 Resgatar todos os clientes especiais select * from cliente where especial is true; 4.4 Scripts das consultas requeridas 4.4.1 Recupera os serviços contratados pelo cliente UbiTech select c.nome, s.preco, s.datarealizacao, s.classificacao from cliente c inner join servico s on c.cpfCnpj = s.cpfcnpjcliente where c.nome = 'UbiTech'; 4.4.2 Recupera os conteúdos com o número de palavras produzidos por João Silva select r.cpf, r.email, r.nome, c.numeropalavras from redator r inner join conteudo c on r.cpf = c.cpfredator where r.nome = 'Joao Silva'; 4.4.3 Recupera todos os serviços que não são conteúdos select s.preco, s.datarealizacao, s.classificacao, s.cpfcnpjcliente from servico s left join conteudo c on s.id = c.idservico where c.idservico is null; 4.4.4 Recupera todos os serviços que receberam classificação select * from servico where classificacao is not null; 4.4.5 Recupera todos os conteúdos que tenham uma persona envolvida com tecnologia select * from conteudo where persona like '%tecnologia%'; 4.4.6 Recupera todos os conteúdos que tenha como início de descrição de persona a palavra Mãe select * from conteudo where persona like 'Mãe%'; 4.4.7 Coleta os serviços e os ordena por classificação select * from servico where classificacao is not null order by classificacao; 4.4.8 Coleta os conteúdos e os ordena pelo número de palavras select * from conteudo order by numeropalavras desc; 4.4.9 Recupera os redatores que não produziram nenhuma conteúdo select * from redator r where r.cpf not in ( select c.cpfredator from servico s inner join conteudo c on s.id = c.idservico ); 4.4.10 Valores únicos, efetuados com cartão de débito select * from debito d where d.valor not in ( select p.valor from pix p ); 4.4.11 Recupera os redatores que produziram algum conteúdo select red.nome from redator red where exists ( select * from conteudo c where red.cpf = c.cpfredator ); 4.4.12 Recupera os clientes que efetuaram um pagamento select cl.nome from cliente cl where exists ( select * from pix p full join debito d on p.id = d.id where cl.cpfCnpj = p.cpfCnpjCliente or cl.cpfCnpj = d.cpfCnpjCliente ); 4.4.13 Recupera todos os serviços que são conteúdos select * from servico se where se.id in ( ( select s.id from servico s ) intersect ( select c.idservico from conteudo c )); 4.4.14 Recupera o nome e o cpf de todos os funcionários ( select r.cpf, r.nome from revisor r ) union ( select e.cpf, e.nome from educador e ) union ( select re.cpf, re.nome from redator re ); 4.4.15 Recupera a quantidade de serviços select count(*) from servico s left join left join left join as servicos revisao r on s.id = r.idServico conteudo c on s.id = c.idservico formacao f on s.id = f.idservico; 4.4.16 Recupera a média, o maior e menor valor de pagamento de todos os serviços select avg(s.preco) as média, max(s.preco) as maior, min(s.preco) as menor from servico s left join revisao r on s.id = r.idServico left join conteudo c on s.id = c.idservico left join formacao f on s.id = f.idservico; 4.4.17 Recupera todos os tipos de empreendimento select tipoempreendimento from cliente group by tipoempreendimento; 4.4.18 Recupera a quantidade de clientes com o tipo de empreendimento digital select tipoempreendimento, count(*) as clientes from cliente group by tipoempreendimento having tipoempreendimento='digital'; 4.5 Scripts das visões 4.5.1 Cria uma visão incluindo o cliente e o funcionário responsável pelo serviço create or replace view servico_funcionario_cliente as select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, s.cpfCnpjCliente, case when e.cpf is not null then e.cpf when re.cpf is not null then re.cpf when rv.cpf is not null then rv.cpf end as funcionario from servico s left join revisao r on s.id = r.idServico left join conteudo c on s.id = c.idservico left join formacao f on s.id = f.idservico left join redator re on c.cpfRedator = re.cpf left join educador e on f.cpfEducador = e.cpf left join revisor rv on r.cpfRevisor = rv.cpf; 4.5.2 Cria uma visão com uma relação entre redator, servico e cliente create or replace view servicos_redator as select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, r.cpf as redator, s.cpfCnpjCliente as cliente from redator r, conteudo c, servico s where (c.cpfRedator = r.cpf) and (s.id = c.idServico); 4.5.3 Cria uma visão com uma relação entre revisor, servico e cliente create or replace view servicos_revisor as select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, rv.cpf as revisor, s.cpfCnpjCliente as cliente from revisor rv, revisao r, servico s where (r.cpfRevisor = rv.cpf) and (s.id = r.idServico); 4.5.4 Cria uma visão com uma relação entre educador, servico e cliente create or replace view servicos_educador as select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao, e.cpf as educador, s.cpfCnpjCliente as cliente from educador e, formacao f, servico s where (f.cpfEducador = e.cpf) and (s.id = f.idServico); 4.6 Scripts das funções/procedimentos armazenados 4.6.1 Cria uma função que retorna os serviços relacionados a um funcionário específico CREATE OR REPLACE FUNCTION get_servicos_funcionario( p_cpf varchar ) RETURNS TABLE ( preco real, dataRealizacao date, status varchar, classificacao int, cpfCnpjCliente varchar ) AS $$ BEGIN RETURN QUERY SELECT s.preco, s.dataRealizacao, s.status, s.classificacao, s.cpfCnpjCliente FROM servico s left join revisao r on s.id = r.idServico left join conteudo c on s.id = c.idservico left join formacao f on s.id = f.idservico left join revisor rev left join redator red left join educador ed where rev.cpf = p_cpf or on rev.cpf = r.cpfrevisor on red.cpf = c.cpfredator on ed.cpf = f.cpfeducador red.cpf = p_cpf or ed.cpf = p_cpf; END; $$ LANGUAGE plpgsql; 4.6.2 Cria uma função que retorna o total de serviços create function total_servicos() returns int language plpgsql as $$ declare servicos_count integer; begin select count(*) into servicos_count from servico; return servicos_count; end; $$; 4.6.3 Cria uma função que calcula a quantidade total de dinheiro gasto por um cliente create or replace function valor_gasto_cliente(cliente varchar) returns real as $$ declare total real := 0; resultado Servico%ROWTYPE; begin for resultado in select * from Servico where cpfCnpjCliente = cliente loop total = total + resultado.preco; end loop; return total; end $$ language plpgsql; 4.7 Scripts dos gatilhos 4.7.1 Cria um gatilho onde atualiza um redator quando um novo conteúdo é criado create or replace function atualizaConteudoEscritos() returns trigger as $$ begin update redator set conteudosEscritos = conteudosEscritos+1 where cpf = NEW.cpfredator; return new; end; $$ LANGUAGE plpgsql; create trigger t_atualizaConteudosEscritos after insert on conteudo for each row execute procedure atualizaConteudoEscritos(); 4.7.2 Cria um gatilho que impede que um novo revisor seja criado caso cobre menos de 10 por palavra CREATE OR REPLACE FUNCTION validarPrecoUnitario() RETURNS TRIGGER AS $$ BEGIN IF NEW.unidade = 'palavra' AND NEW.precoUnitario <= 10 THEN RAISE EXCEPTION 'O preço unitário do revisor deve ser igual ou superior a 10.'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER t_verificarPrecoUnitarioRevisor BEFORE INSERT OR UPDATE ON revisor FOR EACH ROW EXECUTE FUNCTION validarPrecoUnitario(); 4.7.3 Cria um gatilho que atualiza automaticamente o preço do serviço caso o número de palavras de um conteúdo seja auterado create or replace function atualizar_servico_conteudo() returns trigger as $$ declare precoPalavra Real; begin select into precoPalavra r.precoPalavra from redator r where r.cpf = New.cpfRedator; update servico set preco = New.numeroPalavras * precoPalavra where id = New.idServico; return New; end $$ language plpgsql; create trigger atualizar_servico_conteudo after update on Conteudo for each row execute procedure atualizar_servico_conteudo(); 4.8 Scripts dos índices create create create create create create create create create create index index index index index index index index index index indiceCliente on Cliente(cpfCnpj); indiceServico on Servico(cpfCnpjCliente); indiceRevisao on Revisao(cpfRevisor); indiceFormacao on Formacao(cpfEducador); indiceConteudo on Conteudo(cpfRedator); indiceDebito on Debito(cpfCnpjCliente); indicePix on Pix(cpfCnpjCliente); indiceRedator on Redator(cpf); indiceEducador on Educador(cpf); indiceRevisor on Revisor(cpf);