Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Declaração de Foreign Key no Sql Server


Fábio R. L. de Oliveira

Pergunta

criei a tabela aluno, como são duas chaves primárias eu usei o constraint. Até aí tudo ok.

create table aluno

(

cpf int not null,

matricula int identity,

constraint pk_id primary key (cpf, matricula),

nome varchar(60) not null

)

Agora eu tenho a tabela professor e quero fazer uma foreign key com as chaves primárias do aluno, mas eu já tentei de tudo, não consigo de jeito nenhum. Aí salvei a query e deixei assim:

create table professor

(

cod int primary key identity,

nome varchar(100) not null,

disciplina varchar(100) not null,

constraint pk_id foreign key references aluno (pk_id)

)

Alguém poderia identificar o meu erro? E como ficaria? Obrigado e bons estudos!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Fábio,

Isto é pra faculdade? porque se for, não costumo ajudar não... rs.... mas vamos lá.

1 - Por que uma chave composta de cpf e matricula? As chaves primárias são dados que não significam nada. Quer dizer que os dados nela contidas servem apenas para um propósito: identificar uma tupla. Apenas isto. Por isso que perguntei por que da PK ser estes campos. Muitas pessoas colocam CPF, Matricula, RG, etc, como PK. Vi que a Matricula é INT. Vamos supor que a escola resolva alterar a matrícula: agora será uma letra inicial e uma sequência de números. você terá que reestruturar sua modelagem para realizar esta adaptação. Colocar estas informações como PK não é uma boa prática de modelagem.

2 - Mas caso realmente queira, o problema está associado a quantidade de colunas criadas. você tem uma chave composta na tabela Aluno. você terá que referenciar cada campo (como FK) na tabela filha. Ficaria assim (gosto de criar as tabelas e depois as cosntraints):

create table aluno(
cpf int not null,
matricula int identity,
constraint pk_id primary key (cpf, matricula),
nome varchar(60) not null)


create table professor(
cod int primary key identity,
nome varchar(100) not null,
disciplina varchar(100) not null,
cpf INT,
matricula INT)

ALTER TABLE professor WITH CHECK ADD CONSTRAINT [FK_Aluno] FOREIGN KEY(cpf, matricula)
REFERENCES aluno (cpf, matricula)

Link para o comentário
Compartilhar em outros sites

  • 0

Vou precisar de você de novo! rs é que na facul ensinaram MySQL, estou agora migrando pro SQL Server..

Estou refazendo exercícios no SQL Server, e tem um assim:

A tabela Cidade tem 3 chaves primárias, CodCidade, CodCidadeOrigem e CodCidadeDestino

até aí ok eu declarei assim:

CREATE TABLE Cidade

(

CodCidade int not null,

CodCidadeOrigem int not null,

CodCidadeDestino int not null,

Nome varchar(60),

constraint pk_Cidade_CodCidades primary key(CodCidade,CodCidadeOrigem,CodCidadeDestino)

)

Aí estão declaradas as 3 chaves primárias da tabela Cidade, mas aí na tabela Voo tem duas Foreign Keys, que são: CodCidadeDestino e CodCidadeOrigem. Eu declarei assim:

CREATE TABLE Voo

(

NumVoo int not null,

Data datetime not null,

PrecoPassagem money not null,

CodCidadeOrigem int,

constraint fk_Voo_CodCidadeOrigem foreign key(CodCidadeOrigem) references Cidade(CodCidadeOrigem),

CodCidadeDestino int,

constraint fk_Voo_CodCidadeDestino foreign key(CodCidadeDestino) references Cidade(CodCidadeDestino)

)

Mas aí dá erro pois eu declarei 3 chaves primárias na tabela Cidade, sendo que só preciso de usar duas na tabela Voo.

Com base na minha tabela Cidade como você declararia essas duas foreign keys na table Voo?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...