• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ccmcg84

Criação de Foreign key

9 mensagens neste tópico

Será que alguem me poderia ajudar no seguinte:

Eu tenho uma base de dados e gostaria de saber ao fazer o código como é que eu meto as foreign key, quando os dados se repetem de umas tabelas para as outras?

Meto o foreihn key no inicio ou a seguir por exemplo:

id_aluno varchar2(8) que é primary key em outra tabela?????????????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se percebi bem a pergunta mas a sintaxe SQL para criar chaves estrangeiras é:

CONSTRAINT [nome a dar à chave] FOREIGN KEY ([campo nesta tabela]) REFERENCES [nome da tabela de onde vem a chave]([chave primaria])

Tentando usar o teu exemplo seria algo como

CONSTRAINT FK_IDAluno FOREIGN KEY (id_aluno) REFERENCES [tabela onde id_aluno é chave primaria(id_aluno)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SQL não é um SGBD é uma linguagem de pesquisa ;)

Mas resolveste o problema ou ainda tens dúvidas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É a sintaxe SQL, apesar de em certos motores de bases de dados essa sintaxe poder ser ignorada ou modificada.

Uma chave estrangeira é uma regra, ou constraint, que se aplica a um campo. Quem diz chave estrangeira diz chave primária, verificação de intervalos de valores, etc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então e se puser só na chave estrangeira:

FOREIGN KEY (id_aluno) REFERENCES aluno,

etc

está mal?????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dependendo do motor com que estás a trabalhar sim.

A sintaxe SQL é uma coisa, o que os motores de bases de dados interpretam é outra. Alguns são mais restritivos e não aceitam grandes variações, outros aceitam abreviaturas.

Não te vou dizer que essa forma está completamente errada, mas o resultado final pode não ser o que pretendes. Por exemplo, nessa construção estás a deixar ao motor a decisão de que chave primária obter para fazer a relação, pode não resultar como pretendias.

Deixo aqui um exemplo de algo que estou a fazer agora, pode ajudar a perceber a sintaxe:

CREATE TABLE TipoTeste(
    id INTEGER NOT NULL AUTO_INCREMENT,
    nome VARCHAR(10),
    descricao VARCHAR(250),
   CONSTRAINT PK_tipoTeste PRIMARY KEY (id)
)ENGINE=InnoDB;

CREATE TABLE Teste(
id INTEGER NOT NULL AUTO_INCREMENT,
nome VARCHAR(100) NOT NULL, 
        tipo INTEGER NOT NULL,
realizado TINYINT(1),
idProjecto INTEGER NOT NULL,
CONSTRAINT PK_teste PRIMARY KEY (id),
CONSTRAINT FK_idProjecto_teste FOREIGN KEY (idProjecto) REFERENCES Projecto(id),
CONSTRAINT FK_tipoTeste_teste FOREIGN KEY (tipo) REFERENCES TipoTeste(id),
CONSTRAINT CK_realizado_tipoTeste CHECK(realizado IN (0, 1))
)ENGINE=InnoDB;

Creio que falta colocar uma ou outra tabela mas chega como exemplo,  e a parte do ENGINE=InnoDB é específica do Mysql não é SQL standard.

0

Partilhar esta mensagem


Link 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