0

외부 키 제약 조건을 사용하는 다른 두 테이블과 연결된 테이블에 동적으로 채워지는 데이터가 필요한 단계에 있습니다. 아래는 PostgreSQL에서 만든 스키마/테이블입니다.postgresql을 사용하여 세 번째 테이블을 다른 두 테이블과 연결하여 동적으로 채워진 데이터

표 # 1 :

application 
-------------------------- 
id | name | size | rate 

표 # 1 "응용 프로그램"도 VARCHAR, '크기'와 '속도'로 기본 키와 '이름'이다 "시리얼"로 'ID를'이 정수

표 2 : 마찬가지로

Create 
------------------------- 
createId | name | score 

. createId는이 테이블의 직렬 및 기본 키이며 'name'은 varchar로, 'score'는 정수로 사용됩니다.

지금, 나는 내가 가지고하는 다음과 같은 필드 -

표 # 위의 표에서 3

app_create 
--------------------- 
app_create_id | id | createId | 

으로 위의 두 가지의 매핑 테이블로 생각되는 세 번째 테이블을 생성하고 app_create_id를 위의 테이블 application (Id) 및 create (createId)에 대한 참조와 함께 시퀀스 및 기본 키와 다른 두 필드를 외래 키로 다시 작성했습니다.

다음으로 테이블 # 1과 테이블 # 2에 값을 삽입 할 때 다른 테이블에 삽입 한 데이터와 관련하여 3 번째 테이블 # 3에 자동으로 값을 채워야한다고 나와 있습니다. 하지만 대신 테이블 # 3 (app_create) 매핑 테이블에 값이없는 빈 테이블 의미가 나타납니다.

나는 테이블을 생성 예 - 응용 프로그램 테이블과 같이, 아래 그림과 같이 출력 뭔가를 찾고 있어요 다음 한 데이터 이제

application 
-------------------------- 
id | name | size | rate  
1 | xyz | 2096 | 12           
2 | mno | 1280 | 34 


Create 
------------------------- 
createId | name | score               
1  | a.b.c | 50  
2  | m.cpm |20  
을 populated- (표 #에서 삽입 한 & 2 것은 후) , 위의 두 테이블에 데이터를 삽입 한 후 세 번째 테이블에서 어떤 일이 발생하는지 확신 할 수 없습니다. 기본 키와 외래 키 관계가 있으므로 위의 두 테이블을 채우 자마자 같은 방법으로 채워질 것이라고 생각했습니다.

표 # 3

app_create 
---------------------------------- 
app_create_id | id | createId |       

나는 그것이 다 대다 관계를 함께 할 수있는 뭔가가 생각하지만, 내가 만드는 방법을 모르겠습니다 하나 같은를 진행하는 방법을 어떤 올바른 방법과 마찬가지로 출력합니다. 매핑 테이블 # 3에있는 데이터를 동적으로 처리하려면 어떻게해야합니까?

+1

데이터를 명시 적으로 세 번째 테이블에 삽입해야만 아무 일도 일어나지 않습니다. 참조 무결성은 데이터를 삽입하는 것이 아니라 자식 테이블에 부모 행을 삽입 할 때 부모 행이 존재하는지 확인하는 것입니다. – peterm

+0

@peterm : 답변 해 주셔서 감사합니다. 세 번째 테이블에 데이터를 삽입하기 위해 매핑을 어떻게 수행 할 수 있는지 제안 해주십시오. – AKIWEB

+0

기본적으로 dba.SE에 게시 한 것과 같은 질문입니다 : http://dba.stackexchange.com/q/45437/7788. 제발 그런 사이트를 가로 질러 게시하지 마라 * expecially * 그들 사이의 링크없이, 그것은 모두의 시간을 낭비한다. –

답변

0

이것은 다 대다 관계와 관련이 있습니다. 아무도 그 관계가 무엇인지 모르기 때문에 누구나 테이블 3을 채울 수없는 이유입니다. 따라서, 당신은 당신 자신으로 그것을 채워야합니다. 응용 프로그램은 어떻게 생성과 관련이 있습니까? (무엇이 생성됩니까?)

자신에게/보스/동료에게 물어야 할 질문은 다음과 같습니다. 어떤 응용 프로그램을 만들어야 만합니까?

0

외래 키가 사용되는 방식이 아닙니다. 그들은 열 목록에 대한 값의 하위가 다른 열 목록에 대한 값의 하위로 나타나야한다는 것을 DBMS에 알립니다.이들은 참조 된 테이블 갱신에 계단식 연결되는 테이블 갱신에 대한 영향과 연관 될 수 있습니다.

일반적으로 모든 기본 테이블과 같은 외부 키 참조가있는 기본 테이블은 테이블에 행을 넣거나 테이블에서 제외시키기위한 규칙/조건부/기준에 따라 사용자가 업데이트 할 것으로 예상됩니다.

설명하는 내용은 보기에 가깝습니다. 즉, 값이 기본 또는 다른 뷰를 포함하는 표현식의 현재 값인 가상 테이블입니다. 당신은 당신이 원하는 표현을 말해야합니다. (외래 키를 기반으로하지 않습니다.) 그러나 그 후에 DBMS는 적절한 값을 계산합니다. 여기 여기

당신이 app_create (app_create_id을 무시하는)이 다른 두 조인 것을 예상 할 수있다 : (.하지만 당신은 출력의 모양 또는 예를 들어 출력을 제공해야하는지 설명하지 않음)

create view app_create as 
select id, createId 
from application JOIN create 

여기에는 app_create_id이 포함되지 않습니다. 그러나 합류 덕분에 (id, createId)은 고유합니다. (선언 할 수있는 일부 SQL DBMS에서는) app_create_id이 필요하지 않습니다.

그러나 pp_create_id은 문제가됩니다. 그 가치는 어떻게 결정되어야합니까? 그것은 id의 함수이고 create와 아마도 다른 것입니다. 동일한 값이 서로 다른 시간에 다른 행을 식별 할 수 있습니까? 서로 다른 두 개의 (id, createId) 쌍이 서로 다른 시간에 동일한 app_create_id을 사용할 수 있습니까?