Ir para o conteúdo
kaaps

[Dúvida] Chave Estrangeira/Referências

Mensagens Recomendadas

kaaps

Muito boa tarde,

Ando com algumas dúvidas como ligo as minhas tabelas da minha BD, eu penso estar a fazer direito mas provavelmente não estou pois não daria erro,

Será que alguém me poderia rever este código a ver o que eu fiz mal ?

Desde já muito Obrigado.

CREATE TABLE Clientes
(
ID_Cliente int PRIMARY KEY,
Nome VARCHAR2(50) not null,
Morada VARCHAR2(100) not null,
NIF int not null,
BI int not null,
Telemovel int not null,
Data_Registo date not null,
FOREIGN KEY(ID_Cliente) REFERENCES Cartao(ID_Cliente)
);
CREATE TABLE Cartao
(
ID_Cartao int Primary key,
Data_Emissao Date not null,
ID_Cliente int not null,
Pontos int not null,
FOREIGN KEY(ID_Cartao) REFERENCES Encomenda(ID_Cartao)
);
CREATE TABLE Encomendas
(
ID_Encomenda int Primary key,
ID_Cartao int not null,
Dama_Emissao date not null,
Data_Entrega date not null,
Hora_Entrega date not null,
ID_Produto int not null
);

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jsWizard

simples..

"FOREIGN KEY(ID_Cliente) REFERENCES Cartao(ID_Cliente)"

quando este código é executado a tabela cartao ainda não existe :D

Best practice:

primeiro cria as tabelas todas (CREATE TABLE), depois cria as PKs e UKs (ALTER TABLE .. ADD CONSTRAINT..) e só depois as FKs (ALTER TABLE .. ADD CONSTRAINT..)..

assim nunca tens estes problemas.

inté!

Editado por jsWizard

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rumbafum

Parece-me é que de facto as chaves estão todas trocadas...

A tabela cliente não tem nenhuma foreignkey, a tabela cartão tem de ter para a tabela cliente, e tabela encomendas para a tabela cartão:

CREATE TABLE Clientes
(
 ID_Cliente INT PRIMARY KEY,
 Nome VARCHAR2(50) NOT NULL,
 Morada VARCHAR2(100) NOT NULL,
 NIF INT NOT NULL,
 BI INT NOT NULL,
 Telemovel INT NOT NULL,
 Data_Registo DATE NOT NULL
);
CREATE TABLE Cartao
(
 ID_Cartao INT PRIMARY KEY,
 Data_Emissao DATE NOT NULL,
 ID_Cliente INT FOREIGN KEY REFERENCES Clientes(ID_Cliente),
 Pontos INT NOT NULL
);
CREATE TABLE Encomendas
(
 ID_Encomenda INT PRIMARY KEY,
 ID_Cartao INT FOREIGN KEY REFRENCES Cartao(ID_Cartao),
 Dama_Emissao DATE NOT NULL,
 Data_Entrega DATE NOT NULL,
 Hora_Entrega DATE NOT NULL,
 ID_Produto INT NOT NULL
);

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
navido

Uma outra solucao seria a criacao das tabelas a serem referenciadas antes e

depois criar as tabelas que referenciam as outras, assim evitas ter que usar o script

ALTER TABLE visto que numa situacao em que tens muitas tabelas poderias perder o controlo

das tabelas por alterar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.