Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Relacionamento em MYSQL

Ola pessoal,

Estou tentando montar um relacionamento para simular algumas atividades do curso.

Porém, acredito que o relacionamento não esteja correto. Alguém tem alguma sugestão?

CREATE TABLE PEDIDO (
    NUMPEDIDO VARCHAR(20) PRIMARY_KEY,
    DATAPEDIDO DATE,
    VALORPEDIDO DOUBLE,
    CODCLIENTE VARCHAR(20)
)

CREATE TABLE CLIENTE (
    CODCLIENTE VARCHAR(20) PRIMARY_KEY,
    NOMECLIENTE VARCHAR(170),
    CPFCLIENTE(11)
)

//intermediária
CREATE TABLE ITEMPEDIDO (
    NUMPEDIDO VARCHAR(20) FOREIGN_KEY,
    CODPRODUTO DOUBLE FOREIGN_KEY,
    QUANTIDADE INT,
    VALORITEM DOUBLE
)

CREATE TABLE PRODUTO (
    CODPRODUTO INT PRIMARY_KEY,
    NOMEPRODUTO VARCHAR(200),
    PRECOPRODUTO DOUBLE
)

Valeu!

4 respostas

Bom dia John!

O script que você postou contém relacionamentos, mas eles são frágeis, pois não há chaves estrangeiras.

Por exemplo, você pode inserir o código de cliente (CODCLIENTE) inexistente. É óbvio que você pode fazer validações no código fonte do sistema, mas ter a integridade no banco de dados é fundamental.

Vi que você não utilizou ids como chaves primárias, é uma má prática fazer isso.

Além disso há outras coisas que podem melhorar:

1) Não é necessário ter a coluna para valor do pedido, pois esse dado pode (e deve) ser calculado em função do valor dos produtos.

2) A tabela "item_pedido" deveria se chamar "pedido_produto". Não é uma boa prática dar dois nomes para a mesma entidade.

solução
create database john;

use john;

create table cliente (
    id int auto_increment primary key,
    cpf varchar(11),
    nome varchar(255)
);

create table produto (
    id int auto_increment primary key,
    descricao varchar(255),
    preco double
);

create table pedido (
    id int auto_increment primary key,
    data_hora datetime,
    cliente_id int
);

create table pedido_produto (
    pedido_id int,
    produto_id int,
    preco double
);

alter table pedido add constraint fk_cliente_id foreign key (cliente_id) references cliente (id);

alter table pedido_produto add constraint fk_pedido_id foreign key (pedido_id) references pedido (id);
alter table pedido_produto add constraint fk_produto_id foreign key (produto_id) references produto (id);

Poxa, cara! Top a resposta!

Muito obrigado!

abraço

Não há de quê! Precisando, estamos às ordens! Abraço!