Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Criando a Database do Mini Mundo de Podologia

Nos cursos anteriores, eu mantive o mesmo projeto que se consiste em modelar um mini mundo de podologia, com isso eu decidi traze-lo para o SGBD e cria-lo como uma base de dados, partindo dos conhecimentos obtidos neste curso. Abaixo estão os códigos feitos em SQL.

CREATE SCHEMA LOJA_DE_PODOLOGIA;
USE LOJA_DE_PODOLOGIA;

CREATE TABLE LOJA (
    ID_LOJA INT NOT NULL,
    ID_ENDERECO INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    TELEFONE VARCHAR(11) NOT NULL,
    CNPJ VARCHAR(14) NOT NULL,
    PRIMARY KEY (ID_LOJA)
);

ALTER TABLE LOJA ADD CONSTRAINT RL_LOJA_ENDERECO
FOREIGN KEY (ID_ENDERECO)  
REFERENCES ENDERECO (ID_ENDERECO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE SERVICO (
    ID_SERVICO INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    PRECO DECIMAL(3, 2) NOT NULL,
    ID_LOJA INT NOT NULL,
    PRIMARY KEY (ID_SERVICO)
);

ALTER TABLE SERVICO ADD CONSTRAINT RL_SERVICO_LOJA
FOREIGN KEY (ID_LOJA)  
REFERENCES LOJA (ID_LOJA)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE CUTELARIA_SERVICO (
    ID_CUTELARIA INT NOT NULL,
    ID_SERVICO INT NOT NULL,
    DATA_SERVICO DATE NOT NULL,
    HORARIO_SERVICO TIMESTAMP NOT NULL,
    PRIMARY KEY (ID_CUTELARIA, ID_SERVICO)
);

ALTER TABLE CUTELARIA_SERVICO ADD CONSTRAINT RL_CUTELARIA_SERVICO
FOREIGN KEY (ID_SERVICO)  
REFERENCES SERVICO (ID_SERVICO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE CUTELARIA (
    ID_CUTELARIA INT NOT NULL,
    ID_ENDERECO INT NOT NULL,
    ID_CONTATO INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    CNPJ VARCHAR(14) NOT NULL,
    PRIMARY KEY (ID_CUTELARIA)
);

ALTER TABLE CUTELARIA ADD CONSTRAINT RL_CUTELARIA_ENDERECO
FOREIGN KEY (ID_ENDERECO)  
REFERENCES ENDERECO (ID_ENDERECO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE CUTELARIA ADD CONSTRAINT RL_CUTELARIA_CONTATO
FOREIGN KEY (ID_CONTATO)  
REFERENCES CONTATO (ID_CONTATO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE CUTELARIA_SERVICO ADD CONSTRAINT RL_CUTELARIA
FOREIGN KEY (ID_CUTELARIA)  
REFERENCES CUTELARIA (ID_CUTELARIA)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE PRODUTO (
    ID_PRODUTO INT NOT NULL,
    ID_LOJA INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    PRECO DECIMAL(5, 2) NOT NULL,
    PRIMARY KEY (ID_PRODUTO)
);

ALTER TABLE PRODUTO ADD CONSTRAINT RL_PRODUTO_LOJA
FOREIGN KEY (ID_LOJA)  
REFERENCES LOJA (ID_LOJA)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE REVENDEDORA_PRODUTO (
    ID_REVENDEDORA INT NOT NULL,
    ID_PRODUTO INT NOT NULL,
    DATA_COMPRA DATE NOT NULL,
    PRIMARY KEY (ID_REVENDEDORA, ID_PRODUTO)
);

CREATE TABLE REVENDEDORA (
    ID_REVENDEDORA INT NOT NULL,
    ID_ENDERECO INT NOT NULL,
    ID_CONTATO INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    CNPJ VARCHAR(50) NOT NULL,
    PRIMARY KEY (ID_REVENDEDORA)
);

ALTER TABLE REVENDEDORA ADD CONSTRAINT RL_REVENDEDORA_ENDERECO
FOREIGN KEY (ID_ENDERECO)  
REFERENCES ENDERECO (ID_ENDERECO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE REVENDEDORA ADD CONSTRAINT RL_REVENDEDORA_CONTATO
FOREIGN KEY (ID_REVENDEDORA)  
REFERENCES CONTATO (ID_CONTATO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE REVENDEDORA_PRODUTO ADD CONSTRAINT RL_REVENDEDORA_PRODUTO
FOREIGN KEY (ID_PRODUTO)  
REFERENCES PRODUTO (ID_PRODUTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE REVENDEDORA_PRODUTO ADD CONSTRAINT RL_REVENDEDORA
FOREIGN KEY (ID_REVENDEDORA)  
REFERENCES REVENDEDORA (ID_REVENDEDORA)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

A outra parte estará nas respostas desse tópico.

Alguma sugestão para melhora?

2 respostas

A outra parte da Query SQL:

CREATE TABLE AGENDA (
    ID_LOJA INT NOT NULL,
    ID_CLIENTE INT NOT NULL,
    ID_TRATAMENTO INT NOT NULL,
    ID_PODOLOGA INT NOT NULL,
    DATA_AGENDADA DATE NOT NULL,
    HORARIO_AGENDADO DATE NOT NULL,
    PRIMARY KEY (ID_LOJA, ID_CLIENTE, ID_TRATAMENTO, ID_PODOLOGA)
);

ALTER TABLE AGENDA ADD CONSTRAINT RL_AGENDA_LOJA
FOREIGN KEY (ID_LOJA)
REFERENCES LOJA (ID_LOJA)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE PODOLOGA (
    ID_PODOLOGA INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    PRIMARY KEY (ID_PODOLOGA)
);

ALTER TABLE AGENDA ADD CONSTRAINT RL_AGENDA_PODOLOGA
FOREIGN KEY (ID_PODOLOGA)
REFERENCES PODOLOGA (ID_PODOLOGA)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE TRATAMENTO (
    ID_TRATAMENTO INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    PREÇO DECIMAL(3, 2) NOT NULL,
    DURACAO INT NOT NULL,
    PRIMARY KEY (ID_TRATAMENTO)
);

ALTER TABLE AGENDA ADD CONSTRAINT RL_AGENDA_TRATAMENTO
FOREIGN KEY (ID_TRATAMENTO)
REFERENCES TRATAMENTO (ID_TRATAMENTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE CLIENTE (
    ID_CLIENTE INT NOT NULL,
    ID_CONTATO INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    PRIMARY KEY (ID_CLIENTE)
);

ALTER TABLE CLIENTE ADD CONSTRAINT RL_CLIENTE_CONTATO
FOREIGN KEY (ID_CLIENTE)  
REFERENCES CONTATO (ID_CONTATO)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE AGENDA ADD CONSTRAINT RL_AGENDA_CLIENTE
FOREIGN KEY (ID_CLIENTE)
REFERENCES CLIENTE (ID_CLIENTE)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

CREATE TABLE ENDERECO (
    ID_ENDERECO INT NOT NULL,
    CEP VARCHAR(8) NOT NULL,
    CIDADE VARCHAR(50) NOT NULL,
    ESTADO VARCHAR(50) NOT NULL,
    BAIRRO VARCHAR(50) NOT NULL,
    RUA VARCHAR(50) NOT NULL,
    NUMERO VARCHAR(50) NOT NULL,
    PRIMARY KEY (ID_ENDERECO)
);

CREATE TABLE CONTATO (
    ID_CONTATO INT NOT NULL,
    TELEFONE_1 VARCHAR(11) NOT NULL,
    TELEFONE_2 VARCHAR(11),
    CELULAR VARCHAR(11) NOT NULL,
    EMAIL VARCHAR(50) NOT NULL,
    WHATSAPP VARCHAR(11) NOT NULL,
    PRIMARY KEY (ID_CONTATO)
);
solução!

Olá Lucas, tudo bem com você?

Você conseguiu assimilar muito bem a sintaxe do SQL, isso ficou bem evidente no script que você compartilhou. Apenas um ponto de atenção, é ter cuidado com a ordem de criação e a adição das referências, pois, caso crie a tabela após adicionar a referência um erro pode ser gerado. Sendo assim, uma dica é você executar todo o procedimento de criação das tabelas e depois, todo o procedimento da inserção das referências. Isso garantirá um fluxo de trabalho mais eficiente e precavido de erros de referência.

Espero ter ajudado.

Abraços e bons estudos!