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

(Resolvido) Chaves Estrangeiras (FOREIGN KEY)


steiver

Pergunta

Olá galera, estou precisando de uma ajuda ai de vocês. Preciso entregar meu trabalho de mysql terça feira dia 09/12/08. Meu professor deu umas tabelas para eu montar, e pediu que colocase chaves estrnageiras. Eu faltei em algumas aulas quando ele explicava isso. Vou postar aqui o meu código, e o pdf que ele passou. Eu já montei as tabelas, apenas preciso colocar a chave estrangeira nelas. Ele também pediu para inserir e selecionar alguns dados, ( aqueles comandos insert e select), isso eu sei fazer, apenas queria uma força nas chaves estrangeiras. Estou doente e de mudança, não vou conseguir resolver isso à tempo, a menos que vocês ajudem. Agradeço a todos pela força, e Feliz Natal pra nós, que vivemos nesse mundo da informática.

OBS: Vou colocar as 3 tabelas que montei, apenas duas precisa da chave estrangeiras, por favor olhem o pdf que será mais fácil de entender. :)

Tabela 1:

create table func(
matr varchar(6) not null primary key,
nome varchar(12) not null,
sobrenome varchar(15) not null,
dcod varchar(3),
fone varchar(4),
dinadmin date,
cargo varchar(8),
niveled int,
sexo varchar(1),
datanas date,
salario decimal(9,2),
bonus decimal(9,2),
comis decimal(9,2)
);
Tabela 2:
create table depto(
dcod varchar(3) not null primary key,
dnome varchar(36) not null,
gerente varchar(6),
dsub varchar(3) not null
);
Tabela 3:
create table proj(
pcod varchar(6) not null primary key,
pnome varchar(24) not null,
dcode varchar(3) not null,
matr varchar(6) not null,
equipe decimal(5,2),
dataini date,
datafim date,
psub varchar(6)
);

PDF: http://www.steiver.com.br/tabelas_mysql_trabalho.pdf

Vlw galera abrs... ^_^

Editado por steiver
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Oi,'steiver'!

Não vou fazer o serviço pra você, mas vou orientá-lo e corrigí-lo no que for necessário.

Para montar a chave estrangeira você poderá usar de duas formas.

A primeira é na criação da tabela (dentro do CREATE TABLE). A sintexe é:

CONSTRAINT <nome-da_chave_estrangeira> FOREIGN KEY (<nome_do_atributo_1>) REFERENCES <nome_da_tabela_referenciada> (<nome_do_atributo_2>)
. A segunda é através de de alteração na estrutura da tabela (dentro do comando ALTER TABLE). A sintaxe é:
ALTER TABLE <nome_da_tabela>
ADD CONSTRAINT <nome-da_chave_estrangeira> FOREIGN KEY (<nome_do_atributo_1>) REFERENCES <nome_da_tabela_referenciada> (<nome_do_atributo_2>)

.

Onde:

<nome_do_atributo_1>: é o nome do atributo que está na tabela que está criando a chave;

<nome_do_atributo_2>: é o nome do atributo que é chave primária na tabela referenciada.

Para maiores informações, leia o manual do MySQL versão 4.1 (tradução em português) Seções 6.5.3. Sintaxe CREATE TABLE e 6.5.4. Sintaxe ALTER TABLE.

Link para o comentário
Compartilhar em outros sites

  • 0

já consegui fazer o trabalho. ele tinha pedido para criar 3 tabelas, e inserir alguns dados e depois dar um select para mostrar alguns campos.

vou postar aqui todo trabalho, assim se alguém tiver algum problema parecido, vai poder tirar a duvida.

ESSE tópico FECHA AQUI!

create table DEPTO
     ( DCOD varchar(3) not null,
       DNOME varchar(36) not null,
       GERENTE varchar(6),
       DSUB varchar(3) not null,
       primary key (DCOD)
);

create table FUNC
     (MATR       varchar(6) not null,
      NOME       varchar(12) not null,
      SOBRENOME  varchar(15) not null,
      DCOD       varchar(3),
      FONE       varchar(4),
      DINADMIN   date,
      CARGO      varchar(8),
      NIVELED    integer,
      SEXO       varchar(1),
      DATANAS    date,
      SALARIO    decimal(9,2),
      BONUS      decimal(9,2),
      COMIS      decimal(9,2),
      primary key (MATR),
      foreign key (DCOD) references DEPTO (DCOD)
);

create table PROJ
     ( PCOD varchar(6) not null,
       PNOME varchar(24) not null,
       DCOD varchar(3) not null,
       MATR varchar(6) not null,
       EQUIPE decimal(5,2),
       DATAINI date,
       DATAFIM date,
       PSUB varchar(6),
       primary key (PCOD),
       foreign key (DCOD) references FUNC (DCOD),
       foreign key (MATR) references FUNC (MATR)
);

select * from DEPTO;
select * from FUNC;
select * from PROJ;

insert into DEPTO values ('A00','DIV. SERVIÇOS DE COMPUTADOR',000010,'A00');
insert into DEPTO values ('B01','PLANEJAMENTO',               000020,'A00');
insert into DEPTO values ('C01','CENTRO DE INFORMAÇÕES',      000030,'A00');
insert into DEPTO values ('D01','CENTRO DE DESENVOLVIMENTO',  NULL,'A00');
insert into DEPTO values ('E01','SERVIÇOS DE SUPORTE',        000050,'A00');
insert into DEPTO values ('D11','SISTEMAS MANUFATURA',        000060,'D01');
insert into DEPTO values ('D21','SISTEMA ADMINISTRAÇÃO',      000070,'D01');
insert into DEPTO values ('E11','OPERAÇÃO',                   000090,'E01');
insert into DEPTO values ('E21','SUPORTE SOFTWARE',000100,'E01');

insert into FUNC values (000010,'CHRISTINE', 'HAAS',     'A00',1020,'1965-1-1',   'GERENTE', 19,'F','1933-8-14', 52750, 1055,5275);
insert into FUNC values (000020,'MICHAEL',   'THOMPSOM', 'B01',3094,'1973-10-10', 'GERENTE', 18,'M','1948-2-2',  41250, 825, 4125);
insert into FUNC values (000030,'SALLY',     'KWAN',     'C01',3300,'1975-4-5',   'GERENTE', 15,'F','1941-5-11', 38250, 765, 3825);
insert into FUNC values (000050,'JOHM',      'GEYER',    'E01',2122,'1949-8-17',  'GERENTE', 16,'M','1925-9-15', 40175, 803, 4017);
insert into FUNC values (000060,'IRVING',    'STERN',    'D11',6423,'1973-9-14',  'GERENTE', 14,'M','1945-7-7',  32250, 645, 3225);
insert into FUNC values (000070,'EVA',       'PULASKI',  'D21',7831,'1980-9-30',  'GERENTE', 14,'F','1953-5-26', 36170, 723, 3617);
insert into FUNC values (000090,'EILLEN',    'HENDERSON','E11',1212,'1973-6-1',   'GERENTE', 17,'F','1946-1-14', 40300, 806, 4030);
insert into FUNC values (000100,'THEODORE',  'SPENSER',  'E21',3497,'1989-4-12',  'GERENTE', 15,'M','1961-11-25',39000, 780, 3900);
insert into FUNC values (000110,'VINCENZO',  'LUCCHESI', 'A00',8645,'1958-5-16',  'REPVENDA',18,'M','2029-11-5', 46500, 930, 4650);
insert into FUNC values (000130,'DOLORES',   'QUINTANA', 'C01',8623,'1973-10-10', 'REPVENDA',12,'F','1946-2-25', 23300, 466, 2330);
insert into FUNC values (000140,'HEATHER',   'NICHOLLS', 'C01',2299,'1975-4-5',   'ANALISTA',14,'M','1947-11-18',35040, 700, 3504);
insert into FUNC values (000150,'BRUCE',     'ADAMSON',  'D11',4510,'1949-8-17',  'ANALISTA',15,'M','1922-4-1',  37780, 775, 3878);
insert into FUNC values (000160,'ELIZABETH', 'PIANKA',   'D11',3782,'1943-4-2',   'ATENDTE', 12,'F','1915-11-15',22384, 447, 2238);
insert into FUNC values (000170,'MASATOSHI', 'YOSHIMURA','D11',2890,'1990-4-3',   'ATENDTE', 12,'M','1962-11-16',29403, 588, 2940);
insert into FUNC values (000180,'MARYLIN',   'SCOUTTEN', 'D11',1682,'1976-3-4',   'PRJTISTA',11,'F','1948-10-17',19330, 386, 1933);
insert into FUNC values (000190,'JAMES',     'WALKER',   'D11',2986,'1979-6-4',   'ANALISTA',15,'M','1951-10-17',38990, 779, 3899);
insert into FUNC values (000200,'DAVID',     'BROWN',    'D11',4601,'1950-12-3',  'PRJTISTA',17,'M','1923-7-18', 40505, 810, 4050);
insert into FUNC values (000210,'WILLIAM',   'JONES',    'D11',0942,'1979-4-11',  'ATENDTE', 11,'M','1953-2-23', 18270, 365, 1827);
insert into FUNC values (000220,'JENIFER',   'LUTZ',     'D11',672, '1976-12-10', 'PRJTISTA',11,'F','1949-7-25', 19405, 388, 1940);
insert into FUNC values (000230,'JAMES',     'JEFFERSON','D21',2094,'1987-10-11', 'PRJTISTA',11,'M','1960-6-24', 19333, 386, 1933);
insert into FUNC values (000240,'SALVATORE', 'MARINO',   'D21',3780,'1990-1-3',   'ATENDTE', 12,'M','1962-8-18', 20930, 418, 2093);
insert into FUNC values (000250,'DANIEL',    'SMITH',    'D21',0961,'1969-10-30', 'REPCAMPO',11,'M','1939-11-12',19180, 383, 1918);
insert into FUNC values (000260,'SYBIL',     'JOHNSON',  'D21',8953,'1975-9-11',  'REPCAMPO',10,'M','1936-10-5', 17250, 345, 1725);
insert into FUNC values (000270,'MARIA',     'PEREZ',    'D21',9001,'1976-8-9',   'ATENDTE',  9,'F','1949-3-24', 13403, 268, 1340);
insert into FUNC values (000280,'ETHER',     'SCHNEIDER','E11',8997,'1976-3-14',  'PRJTISTA',13,'F','1948-10-27',30400, 608, 3040);
insert into FUNC values (000290,'JOHN',      'PARKER',   'E11',4543,'1980-5-30',  'ATENDTE', 10,'M','1946-7-9',  15340, 306, 1534);
insert into FUNC values (000300,'PHILIP',    'SMITH',    'E11',3232,'1972-6-19',  'ATENDTE', 10,'M','1936-10-27',17750, 355, 1775);
insert into FUNC values (000310,'MAUDE',     'SETRIGHT', 'E11',8932,'1964-9-12',  'REPCAMPO',10,'F','1931-4-21', 15900, 318, 1995);
insert into FUNC values (000320,'RAMLAL',    'MEHTA',    'E21',9990,'1965-7-7',   'PRJTISTA',11,'M','1932-8-11', 19950, 399, 1995);
insert into FUNC values (000330,'WING',      'LEE',      'E21',2103,'1975-1-18',  'REPCAMPO', 9,'M','1947-9-2',  10304, 206, 1030);
insert into FUNC values (000340,'JASON',     'GOUNOT',   'E21',5698,'1987-4-18',  'REPCAMPO',17,'M','1959-12-1', 40330, 806, 4033);

insert into PROJ values (000001,'Projeto1', 'A00',000010,2,'2000-10-10','2001-12-30',null);
insert into PROJ values (000002,'Projeto2', 'A00',000010,3,'2000-10-11','2001-12-13',null);
insert into PROJ values (000003,'Projeto3', 'A00',000010,4,'2000-10-12','2002-1-1',  null);
insert into PROJ values (000004,'Projeto4', 'B01',000020,3,'2000-10-13','2002-1-2',  null);
insert into PROJ values (000005,'Projeto5', 'B01',000020,2,'2000-10-14','2002-1-3',  null);
insert into PROJ values (000006,'Projeto6', 'C01',000030,2,'2000-10-15','2002-01-04',null);
insert into PROJ values (000007,'Projeto7', 'D21',000070,2,'2000-10-16','2002-1-5',  null);
insert into PROJ values (000008,'Projeto8', 'E01',000090,3,'2000-10-17','2002-1-6',  null);
insert into PROJ values (000009,'Projeto9', 'D11',000060,6,'2000-10-18','2002-1-7',  null);
insert into PROJ values (000010,'Projeto10','D11',000060,5,'2000-10-19','2002-1-8',  000009);
insert into PROJ values (000011,'Projeto11','D21',000070,7,'2000-10-20','2002-1-9',  null);
insert into PROJ values (000012,'Projeto12','E11',000090,4,'2000-10-20','2002-1-10', null);
insert into PROJ values (000013,'Projeto13','E21',000100,3,'2000-10-22','2002-1-11', null);
insert into PROJ values (000014,'Projeto14','A00',000010,2,'2000-10-23','2002-1-12', 000001);
insert into PROJ values (000015,'Projeto15','A00',000010,7,'2000-10-24','2002-1-13', null);

Select
   SOBRENOME, 
   NOME, 
   DCOD,
   DATANAS, 
   DINADMIN, 
   SALARIO
from FUNC where (SALARIO > 30000);

Select * from DEPTO where GERENTE is null;

Select
   SOBRENOME, 
   NOME, 
   DCOD,
   DATANAS, 
   DINADMIN, 
   SALARIO
from FUNC where (SALARIO < 20000)
order by SOBRENOME, NOME;

Select * from DEPTO where DSUB = 'E00';

Select DCOD, DNOME from DEPTO where DNOME Like '%Serviço%';

Select
   MATR, 
   SOBRENOME, 
   NOME, 
   DCOD,
   FONE
from FUNC where DCOD >= 'B00' and DCOD <= 'D00';

Select SOBRENOME,
       DCOD,
       (SALARIO + COMIS)
from FUNC where DCOD = 'AOO' and DCOD ='B00'
order by DCOD, SALARIO desc;

Select SOBRENOME, SALARIO, DCOD from FUNC where (SALARIO/12) > 3000 order by SOBRENOME;

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...