Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mowstake Mordekai

Relacionamento entre tabelas.

Recommended Posts

Boa tarde!

 

 

Criei a seguinte tabela:

 

 

 

create table tbl_cliente(
nome_cliente varchar (20),
id_cliente number(10),
idade_cliente number (10) ,
constraint cod_cliente primary key(id_cliente)
);

 

create table tbl_cidade(
nome_cidade varchar (20),
estado_cidade varchar (2),
residencia_cidade varchar (20),
id_cidade number (10) primary key
);

 

create table tbl_veiculo(
marca_veiculo varchar(20),
ano_veiculo varchar(20),
preco_veiculo varchar(20),
id_veiculo number (10) primary key
);

 

create table tbl_fabricante(
codigo_comprador number(10),
codigo_cidade number (10),
codigo_veiculo number (10),
primary key (codigo_comprador,codigo_cidade,codigo_veiculo),
foreign key(codigo_comprador) references tbl_cliente (id_cliente),
foreign key(codigo_cidade) references tbl_cidade (id_cidade),
foreign key(codigo_veiculo) references tbl_veiculo(id_veiculo)
);

 

Minha duvida é quanto ao relacionamento, como faze-lo adequadamente.
Peço que na hora de explicar tenha paciência, sou iniciante e posso ter duvidas básicas.
1 - Minha ideia seria ter o campo id_cliente number(10) em todas as outras tabelas, assim tenho um relacionamento e nao preciso criar uma pk pra cada tabela.
Isso funcionaria?
2 - Preciso de uma PK para cada tabela, ou posso colocar uma FK para as outras tabelas e deixar aquela tbl_cliente como "lider" e somente ela com PK.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

1 - Minha ideia seria ter o campo id_cliente number(10) em todas as outras tabelas, assim tenho um relacionamento e nao preciso criar uma pk pra cada tabela.
Isso funcionaria?

 

Não, só mas tabelas que guardam relacionamento com tbl_cliente, uma cidade não depende de um cliente.

 

 

2 - Preciso de uma PK para cada tabela, ou posso colocar uma FK para as outras tabelas e deixar aquela tbl_cliente como "lider" e somente ela com PK.

 

A PK é algo que identifica a "linha" da tabela de forma única.

Um carro(tbl_veiculo) tem um númeo de chassis único por exemplo.

 

Aconselho a ler algum material sobre :

Diagrama Entidade Relacionamento

Modelo Entidade Relacionamento

Formas Normais

 

Tem bom material na rede sobre isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, só mas tabelas que guardam relacionamento com tbl_cliente, uma cidade não depende de um cliente.

 

Mas a ideia seria o cliente ser da cidade, eu cadastro o cliente e depois cadastroo uma cidade e digo que o cliente faz parte da cidade.

 

 

Seria mais ou menos assim

 

 

Cliente pertence a Cidade

Carro pertence a Fabricante

Carro pertence a Cliente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas a ideia seria o cliente ser da cidade, eu cadastro o cliente e depois cadastroo uma cidade e digo que o cliente faz parte da cidade.

 

Então id_cidade seria atributo de cliente e seria FK em tbl_cidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria esse o relacionamento entre essas duas tabelas?

 

create table tbl_cliente(
nome_cliente varchar (20),
id_cliente number(10),
idade_cliente number (10) ,
id_cidade number(10),
constraint pk_cliente primary key(id_cidade)
);
create table tbl_cidade(
nome_cidade varchar (20),
estado_cidade varchar (2),
residencia_cidade varchar (20),
id_cidade number (10),
cep_cidade number (10),
constraint pk_cidade primary key (cep_cidade),
constraint fk_cidade foreign key (id_cidade) references tbl_cliente (id_cidade)
);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, CEP não é boa chave para cidades pois cidades grandes tem milhares de CEP.

Uma chave boa CEP pode ser o código do IBGE, que é público.

 

No seu exemplo a id_cidade deveria ser a pk e em clientes fk em cidades.

Compartilhar este post


Link para o post
Compartilhar em outros sites
create table tbl_cidade(

nome_cidade varchar (20),

estado_cidade varchar (2),

residencia_cidade varchar (20),

cep_cidade number (10),

id_cidade number (10),

constraint pk_cidade primary key (id_cidade)

);


create table tbl_cliente(

nome_cliente varchar (20),

id_cliente number(10),

idade_cliente number (10),

id_cidade number (10),

constraint pk_cliente primary key(id_cliente),

constraint fk_cliente foreign key (id_cidade) references tbl_cidade (id_cidade)

);


create table tbl_veiculo(

comprador_veiculo number (10),

marca_veiculo varchar(20),

ano_veiculo varchar(20),

numeracao_veiculo number (10),

nome_fabricante varchar(20),

constraint pk_veiculos primary key (numeracao_veiculo),

foreign key(comprador_veiculo) references tbl_cliente (id_cliente)

);



create table tbl_fabricante(

nome_comprador varchar (20),

preco_veiculo number (20),

comprador_id number (10),

nome_fabricante varchar (20),

constraint pk_nfabricante primary key(nome_fabricante),

foreign key(nome_fabricante) references tbl_veiculo (nome_fabricante),

foreign key(nome_comprador) references tbl_cliente (nome_cliente),

foreign key(comprador_id) references tbl_cliente (id_cliente),

foreign key(preco_veiculo) references tbl_veiculo (numeracao_veiculo)

);


-----------------------------------------------------------------------------------


Meu unico problema agora é que na ultima tabela minha ideia seria inserir o nome do fabricante do veiculo nela como primary key, assim ela nao repete na tbl_fabricante.

Mas como seto uma pk varchar para nao repetir na tbl_fabricante e deixar usa mais de um na tbl_veiculo?


A ultima tabela esta com erro *

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Amigo,

Apenas para ajudar, acho melhor você criar a FK para o ID não para a String e pegar em Select o nome

 

foreign key(id_comprador) references tbl_cliente (id_cliente)

 

eu prefiro trabalhar com Id's

 

e se for chave composta ele deixa.

 

 

Essa chave composta é necessária?
foreign key(preco_veiculo) references tbl_veiculo (numeracao_veiculo) por que o preço está na tabela via select você nao recuperaria?

 

Ao meu ver somente duas FK para os Id's entre tabelas resolve por que o resultado de preço, valor coisas assim podem ser carregados via select.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.