Relacionamento 0...1 na prática

08/01/2016

1

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?
Responder

Posts

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
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira