[firebase-br] Ajuda projeto

Gladiston Santana gladiston em vidy.com.br
Seg Jan 19 14:28:00 -03 2015


Comentando dentro do seu texto...

Em 19 de janeiro de 2015 12:25, Qatan <wanstadnik em gmail.com> escreveu:

> Olá Gladiston (e outros),
>
> (...)
>
> Porém... não sei se entendi uma coisa...  Por exemplo: Eu tenho a tabela
> mestre com cliente ID 35 e na tabela adicional o telefone daquele cliente.
> Se eu deletar o cliente, tem como automaticamente deletar todos registros
> da
> tabela acional ligadas a ele? Seria isso o efeito CASCADE? (não sei se
> entendi isso bem...)
>
> Sim, é isso mesmo.

> (...)
> Estou procurando amarrar tudo, usando tabelas auxiliares (adicionais) à
> tabela principal (mestre) - com uso de domínios e auto-incremento nas
> primary keys. Sendo que para cada tabela criei um gerador separado (prefiro
> assim do que um gerador universal). No caso não estou procurando qualquer
> tipo de replicação (como seria o caso de adicionar o código da sucursal,
> por
> exemplo).
>
> Acho que nem tem como ter um generator universal, tem que ser 1 por tabela
ou por situação. Em alguns poucos casos, onde a transação permita e a
quantidade de registros é bem limitada e não cresce muito, poderá usar no
lugar de um generator um SELECT MAX(COALESCE(COL,0))+1 FROM TABELA e obterá
o ultimo registro+1


> Algumas dúvidas:
> ==============
> Aparentemente eu tenho que explicitamente declarar um campo (coluna) como
> NOT NULL para cada FK (foreign key) que eu criar na tabela, isso mesmo? Eu
> pergunto pois notei que quando criei a FK de uma tabela e depois fui testar
> (adicionando dados pelo IBExpert) notei que ele permitiu adicionar um
> registro (linha) deixando o campo FK NULL (!!!) achei que isso não deveria
> ser assim pois deixaria o registro órfão (no meu caso...)
>
> Inicialmente não era assim na versão inicial do FB, mas mudaram isso para
um proposito, não lembro qual era ou o porquê, talvez se acessar o manual
do FB explique.

> Outra dúvida é que eu queria saber como posso fazer para verificar (CHECK)
> numa situação especial como por exemplo:
> Tenho 5 campos tipo "boolean"(usando 0 e 1 ) num registro, todos são
> opcionais mas pelo menos UM DELES tem que ter o valor 1 (ou vários, mas
> nunca todos com valor 0)... Esse é o caso da tabela "ENTITY" (campos
> começando por "TYPE_")
>
> Voce terá dificuldade em fazer isso por editores visuais porque quando
quando for colocar o primeiro check para o primeiro campo os outros 4 já
teriam de ter sido criados. Daí com editores visuais só poderá acrescentar
o check depois de todos os campos já criados. Como seria um check igual ao
seu? acho que seria mais ou menos assim:
CREATE TABLE TESTE (    A   INT NOT NULL,     B   INT NOT NULL );
Depois acrescento o(s) cheks já com os campos criados:
ALTER TABLE TESTE ADD CHECK (a+b>0);

Teste #1 0+0=0 então falha porque o resultado não é >0
insert into teste values(0,0)  ;

Teste #2 0+1=1 então funciona por que é >0
insert into teste values(0,1)  ;

O check é para a tabela e pode usar todos os campos da tabela, diferente do
domain que se for fazer, só servirá para o próprio domain e o unico
predicativo que pode referenciar é VALUE que se refere ao valor atual que
tá recebendo e não pode referenciar outros valores da tabela, até porque o
mesmo domain pode estar em várias tabelas.


Muito obrigado pela ajuda.
> Cordialmente,
>
> Qatan
>

Outro e inte+



Mais detalhes sobre a lista de discussão lista