Relacionamento 0...1 na prática
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:
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?
- 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
Curtidas 0
Respostas
Romário Beckman
08/01/2016
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,
GOSTEI 0
Claudio Lopes
08/01/2016
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.
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.
GOSTEI 0
Ricardo
08/01/2016
Antunes, concordo com o Din:
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!
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!
GOSTEI 0