Olá Pessoal,
Alguém saberia me responder, porque numa tabela um campo deva ser chave primária e chave estrangeira ao mesmo tempo???
Att,
Chave Primária e Chave Estrangeira
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Em teoria quando temo um relacionamento 1 -> 1 isto é viavel, e chega até ser normal ocorrer.
imagine uma estruta usuario/sessao
cada usuário só pode ter uma sessão. Desta forma se cria um registro em uma tabela sessao com uma FK que aponte usuario. Mas para evitar ter que memorizar duas informações, PK e FK, e sabendo que só posso ter 1 registro sessão por usuário, a PK de usuário torna-se a nossa PK de sessão.
imagine uma estruta usuario/sessao
cada usuário só pode ter uma sessão. Desta forma se cria um registro em uma tabela sessao com uma FK que aponte usuario. Mas para evitar ter que memorizar duas informações, PK e FK, e sabendo que só posso ter 1 registro sessão por usuário, a PK de usuário torna-se a nossa PK de sessão.
- wbarrence
- Rank: Programador Sênior
- Mensagens: 55
- Registrado em: Qui, 06 Out 2011 10:30 am
- Localização: SP
--
WABS
WABS
Ola gfkauer,
Eu estou eu entendi o significado (relacionamento 1 -> 1), mas até agora não entendi o objetivo, por exemplo, eu tenho duas tabelas TIPO_RELATORIO e SOLICITACAO, na tabela TIPO_RELATORIO eu tenho a PK id_tp_relatorio_pk, e na tabela SOLICITACAO eu tenho a PK id_solicitacao, e nela eu tenho uma FK que também é PK id_tp_relatorio_fk e agora eu quero relacionar uma tabela SOLICITACAO_HIST com a PK id_solicitacao e não consigo.
Att,
Eu estou eu entendi o significado (relacionamento 1 -> 1), mas até agora não entendi o objetivo, por exemplo, eu tenho duas tabelas TIPO_RELATORIO e SOLICITACAO, na tabela TIPO_RELATORIO eu tenho a PK id_tp_relatorio_pk, e na tabela SOLICITACAO eu tenho a PK id_solicitacao, e nela eu tenho uma FK que também é PK id_tp_relatorio_fk e agora eu quero relacionar uma tabela SOLICITACAO_HIST com a PK id_solicitacao e não consigo.
Att,
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
posta as estruturas completas das 3 tabelas para darmos uma olhada.
- wbarrence
- Rank: Programador Sênior
- Mensagens: 55
- Registrado em: Qui, 06 Out 2011 10:30 am
- Localização: SP
--
WABS
WABS
Aqui:
CREATE TABLE TIPO_RELATORIO
(
ID_TIPO_RELATORIO_PK NUMBER(8,0) NOT NULL ,
NM_TIPO_RELATORIO VARCHAR2(70 BYTE) NOT NULL ,
ID_ENTIDADE_FK NUMBER(8,0) NOT NULL ,
CD_TIPO_RELATORIO VARCHAR2(10 BYTE) NOT NULL ,
DS_EXTENSAO_ARQUIVO VARCHAR2(4 BYTE) NOT NULL ,
NM_SCAI_APLICACAO VARCHAR2(50 BYTE),
NM_SCAI_PERMISSAO VARCHAR2(100 BYTE),
NR_ORDEM NUMBER,
NR_ORDEM_PROCESSAMENTO NUMBER(3,0),
DOWNLOAD_DISPONIVEL VARCHAR2(3 BYTE) NOT NULL ,
CONSTRAINT PK_DYNRPT_TIPO_RELATORIO PRIMARY KEY (ID_TIPO_RELATORIO_PK) ,
CONSTRAINT FK_TIPO_RELATORIO_ENTIDADE FOREIGN KEY (ID_ENTIDADE_FK) REFERENCES ENTIDADE (ID_ENTIDADE_PK)
)
CREATE TABLE TB_SOLICITACAO
(
ID_SOLICITACAO_PK NUMBER(8,0) NOT NULL ,
ID_TIPO_RELATORIO_FK NUMBER(8,0) NOT NULL ,
ID_ESTABELECIMENTO_SAUDE_FK NUMBER(8,0) NOT NULL ,
DH_SOLICITACAO DATE NOT NULL ,
DH_PROCESSAMENTO DATE,
ST_SOLICITACAO CHAR(1 BYTE) NOT NULL,
DS_URL_SOLICITACAO VARCHAR2(100 BYTE),
DH_INICIO_PROCESSAMENTO DATE,
TP_PROCESSAMENTO CHAR(1 BYTE),
CONSTRAINT CK_SOLIC_ST_SOLICITACAO CHECK (ST_SOLICITACAO IN ('S', 'P', 'X', 'E', 'L','V','I')) ,
CONSTRAINT CK_SOLIC_TP_PROCESSAMENTO CHECK (TP_PROCESSAMENTO IN ('O', 'F')) ,
CONSTRAINT PK_SOLICITACAO PRIMARY KEY (ID_SOLICITACAO_PK, ID_TIPO_RELATORIO_FK),
CONSTRAINT FK_SOLIC_TIPO_RELATORIO FOREIGN KEY (ID_TIPO_RELATORIO_FK) REFERENCES TIPO_RELATORIO (ID_TIPO_RELATORIO_PK),
CONSTRAINT FK_SOLIC_ESTAB_SAUDE FOREIGN KEY (ID_ESTAB_SAUDE_FK) REFERENCES ESTAB_SAUDE (ID_ESTAB_SAUDE_PK),
CONSTRAINT FK_SOLICITACAO_ST_SOLIC FOREIGN KEY (ST_SOLICITACAO) REFERENCES ESTADO_SOLIC (ID_ST_SOLICITACAO_PK)
);
CREATE TABLE SOLICITACAO_HIST
(
ID_SOLIC_HISTORICO_PK NUMBER(8,0),
ID_SOLICITACAO_FK NUMBER(8,0),
ID_TIPO_RELATORIO_FK NUMBER(8,0),
NM_FORMATO_RELATORIO VARCHAR2(25 BYTE),
ID_ESTAB_SAUDE_FK NUMBER(8,0),
DH_SOLICITACAO DATE,
DH_PROCESSAMENTO DATE,
ST_SOLICITACAO CHAR(1 BYTE),
DH_INICIO_PROCESSAMENTO DATE,
TP_PROCESSAMENTO CHAR(1 BYTE),
DH_INCLUSAO DATE,
TP_ALTERACAO CHAR(1 BYTE),
CONSTRAINT PK_ID_SOLIC_HISTORICO PRIMARY KEY (ID_SOLIC_HISTORICO_PK)
);
- wbarrence
- Rank: Programador Sênior
- Mensagens: 55
- Registrado em: Qui, 06 Out 2011 10:30 am
- Localização: SP
--
WABS
WABS
O meu problema é relacionar o campo ID_SOLICITACAO_FK da tabela SOLICITACAO_HIST, com o campo ID_SOLICITACAO_PK da tabela TB_SOLICITACAO, mas não estou conseguindo porque esse campo é chave primária composta que foi criado desta maneira
e agora estou tentando entender o porquê?
CONSTRAINT PK_SOLICITACAO PRIMARY KEY (ID_SOLICITACAO_PK, ID_TIPO_RELATORIO_FK)
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
tente assim
Select *
From SOLICITACAO_HIST h
, TB_SOLICITACAO s
Where s.ID_SOLICITACAO_PK = h.ID_SOLICITACAO_FK
And s.ID_TIPO_RELATORIO_FK = h.ID_TIPO_RELATORIO_FK
- wbarrence
- Rank: Programador Sênior
- Mensagens: 55
- Registrado em: Qui, 06 Out 2011 10:30 am
- Localização: SP
--
WABS
WABS
Eu quero fazer um relacionamento de uma tabela com a outra, eu quero transformar ID_SOLICITACAO_FK da tabela SOLICITACAO_HIST numa chave estrangeira, relacionada com o campo ID_SOLICITACAO_PK da tabela TB_SOLICITACAO desta maneira:
Mas não estou conseguindo porque está dando o erro abaixo:
ALTER TABLE SOLICITACAO_HIST ADD CONSTRAINT FK_SOLIC_HIST_SOLIC FOREIGN KEY (ID_SOLICITACAO_FK) REFERENCES TB_SOLICITACAO (ID_SOLICITACAO_PK);
Erro de SQL: ORA-02270: no matching unique or primary key for this column-list
02270. 00000 - "no matching unique or primary key for this column-list"
*Cause: A REFERENCES clause in a CREATE/ALTER TABLE statement gives a column-list for which there is no matching unique or primary key constraint in the referenced table.
*Action: Find the correct column names using the ALL_CONS_COLUMNS catalog view
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
O único motivo de ser composta é se existir um mesmo ID_SOLICITAÇÃO para Tipos de Relatório diferente.
Se só existir um único ID_SOLICITAÇÃO em toda tabela para todo ID e a regra de negocio implantada confirme ser essa, então é desnecessária e prejudicial esta composição.
Mas do jeito que está sua FK também precisa ser composta.
Se só existir um único ID_SOLICITAÇÃO em toda tabela para todo ID e a regra de negocio implantada confirme ser essa, então é desnecessária e prejudicial esta composição.
Mas do jeito que está sua FK também precisa ser composta.
ALTER TABLE SOLICITACAO_HIST ADD CONSTRAINT FK_SOLIC_HIST_SOLIC FOREIGN KEY (ID_SOLICITACAO_FK,ID_TIPO_RELATORIO_PK) REFERENCES TB_SOLICITACAO (ID_SOLICITACAO_PK,ID_TIPO_RELATORIO_PK);
- wbarrence
- Rank: Programador Sênior
- Mensagens: 55
- Registrado em: Qui, 06 Out 2011 10:30 am
- Localização: SP
--
WABS
WABS
Então conforme foi implementado, a idéia é garantir que uma SOLICITACAO só terá um TIPO_RELATORIO?
Conforme você me sugeriu não pode ser implementado porque a tabela TB_SOLICITACAO não tem ID_TIPO_RELATORIO_PK e sim o ID_TIPO_RELATORIO_FK, mas mesmo assim não funciona, ocorre o erro abaixo:
Conforme você me sugeriu não pode ser implementado porque a tabela TB_SOLICITACAO não tem ID_TIPO_RELATORIO_PK e sim o ID_TIPO_RELATORIO_FK, mas mesmo assim não funciona, ocorre o erro abaixo:
Erro de SQL: ORA-02298: cannot validate (FK_SOLIC_HIST_SOLIC) - parent keys not found
02298. 00000 - "cannot validate (%s.%s) - parent keys not found"
*Cause: an alter table validating constraint failed because the table has child records.
*Action: Obvious
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes