새벽코딩

[PostgresDB-2] 9-2. Relationship ( 1:1, M:N) 일대일, 다대다 [실습] 본문

Programming/Postgres DB

[PostgresDB-2] 9-2. Relationship ( 1:1, M:N) 일대일, 다대다 [실습]

midnightcoder 2022. 12. 21. 03:19

- 일대일 관계 실습

 

개인 설정(SETTINGS) 테이블

 

setting table을 만들고, 기존에 user table과 아래와 같이 연결

노란색 부분은 PK, 녹색부분 user_id 는 FK로 users id를 나타낸다

 

테이블 생성 및 데이터 등록 쿼리

-- settings 테이블 생성
CREATE TABLE settings(
	id SERIAL PRIMARY KEY, --PK
	private BOOLEAN, -- BOOLEAN: 참(TRUE) / 거짓(FALSE)
	adding_photos VARCHAR(15),
	user_id INTEGER UNIQUE REFERENCES users(id) --FK : 개인설정 유저(N:1)
);

-- settings 레코드 등록
INSERT INTO
  settings(private, adding_photos, user_id)
VALUES
  (FALSE, 'MANUAL', 1), -- 유저#1
  (FALSE, 'AUTO',   2), -- 유저#2
  (TRUE,  'AUTO',   3)  -- 유저#3
;

SELECT
	*
FROM
	settings
;

여기서 FK를 설정할때, UNIQUE는 1:1 관계라는걸 나타낸다 (없으면, one to one 관계가 아님)

 

여기서, user_id 가 3인 데이터를 추가로 입력하려고 시도 할 경우 error가 발생한다.

why?

-- settings 레코드 추가 등록
INSERT INTO
  settings(private, adding_photos, user_id)
VALUES
	(TRUE, 'AUTO', 3) -- 유저#3 추가
;

 

1 대 1연결을 위해서 UNIQUE 를 써줘서, 동일한 user_id가 더 들어갈 수 없다.

 

출처 : 홍팍의 'SQL 데이터 분석, 활용!'