Relacionamento 0...1 na prática

08/01/2016

0

Tendo as seguintes tabelas:

- pedido
- endereço
- mesa
Os pedidos podem ser efetuados na pizzaria, ou seja, para uma mesa. Pode ser uma entrega(endereço) ou pode ser um pedido para viagem, onde ele não pertence a ninguém. No SQL da tabela pedido, no momento tenho o seguinte:
    CREATE TABLE pedido  
    (  
    cod_ped INT NOT NULL,  
    cod_mesa INT,  
    cod_end INT,  
    val_ped DECIMAL(18,2),  
    tipo_ped CHAR(1) NOT NULL,   
    data_ins DATETIME,  
    CONSTRAINT pk_cod_ped  
    PRIMARY KEY(cod_ped),  
    CONSTRAINT fk_cod_mesa  
    FOREIGN KEY (cod_mesa)   
    REFERENCES mesa(cod_mesa),  
    CONSTRAINT fk_cod_end  
    FOREIGN KEY (cod_end)   
    REFERENCES endereco(cod_end),     
    );
   


porém, como explicado, um mesmo pedido pode pertencer tanto a 1 mesa/endereço quanto a nenhum. Criando a chave estrangeira, estaria obrigando este pedido a ter um endereço e uma mesa. Como resolver este problema?
Leonardo Coelho

Leonardo Coelho

Responder

Posts

08/01/2016

Romário Beckman

Olá antunesleo, o problema pode ser resolvido definindo os campos cod_mesa e cod_end como NULL. Uma dica, se você estiver utilizando MySql, baixe o MysqlWorkbench para modelagem.

cod_mesa INT NULL DEFAULT NULL,
cod_end INT NULL DEFAULT NULL,
Responder

08/01/2016

Claudio Lopes

Antunes, eu não colocaria nenhuma chave (PK ou FK) nula, até porque elas garantem que o relacionamento e a regra de negocio seja aplicada.

Talvez a sua solução seja de criar uma mesa e um endereço "coringa" onde todos os pedidos que sejam direcionados para entrega possam ser tabulados dessa forma.

Ou você terá que alterar sua modelagem para que possa contornar essa situação.
Responder

14/01/2016

Ricardo

Antunes, concordo com o Din:

Talvez a sua solução seja de criar uma mesa e um endereço "coringa" onde todos os pedidos que sejam direcionados para entrega possam ser tabulados dessa forma.


Você criando esta "mesa" coringa irá te ajudar na hora de fazer o controle dos pedidos, pois você ter o controle de onde este pedido foi feito. O que acredito que sejam os pedidos feitos no caixa para viagem.

Isso te ajudará bastante na hora de gerar relatórios!
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