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

maiden

[Resolvido] Dúvida chaves primárias / estrangeiras

6 mensagens neste tópico

Boas,

Tenho duas tabelas principais:

+--------------+  +------------+

| veiculos      |  | extras      |

+--------------+  +-------------|

| @matricula |    | @codExtra |

|  ...            |    | ...            |

+--------------+  +-------------+

E uma tabela que serve para transformar a relação de N para N das anteriores em duas relações de 1 para N:

+--------------------+

| detalhesVeiculos |

+--------------------+

| @matricula        |

| @codExtra          |

| ...                      |

+--------------------+

A minha dúvida é em relação à definição de chaves primárias e estrangeiras: Devo definir ambos os campos como chaves estrangeiras e criar um novo campo para a chave primária ou a matricula como chave primária e o codExtra como chave estrangeira ?

Espero ter-me explicado correctamente.

Obrigado desde já.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não precisas de definir novos campos. Vais referenciar as chaves que já existem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se bem percebi a tua pergunta:

Na tabela detalhesVeiculos, as chaves primárias serão a @matrícula e o @codExtra.

Ficarão mesmo as duas como chaves primárias dessa tabela e não precisas de nenhum novo campo. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ficarão mesmo as duas como chaves primárias dessa tabela e não precisas de nenhum novo campo. :D

Mas preciso de referenciar as chaves das tabelas-mãe como disse o Rui Carlos, a minha dúvida é se basta definir por exemplo algo deste tipo

create table detalhesVeiculos (
    matricula varchar(8) not null,
    extra int not null,
    foreign key(matricula) references veiculos(matricula),
    foreign key(extra) references extras(codExtra)
);

Ou

create table detalhesVeiculos (
    matricula varchar(8) not null,
    extra int not null,
    primary key(matricula) references veiculos(matricula), -- Nao sei se isto e' possivel
    primary key(extra) references extras(codExtra)
);

Peço desculpa pela falta de jeito :wallbash:

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que o segundo caso está incorrecto, mas podes fazer:

CREATE TABLE detalhesVeiculos (
    matricula varchar(8) NOT NULL,
    extra int NOT NULL,
    PRIMARY KEY (matricula,extra),
    FOREIGN KEY(matricula) REFERENCES veiculos(matricula),
    FOREIGN KEY(extra) REFERENCES extras(codExtra)
);

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