[PostgreSQL] Unique์™€ NULL

Unique ์œ ์ผ์„ฑ ์ œ์•ฝ๊ณผ null์˜ ์˜ˆ์™ธ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํžˆ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋„ ์ œ์•ฝ์ด ์—†๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ 

์—ฌ๊ธฐ์— ๋Œ€ํ•ด์„œ unique ์ธ๋ฑ์Šค๋ฅผ ๋‹ฌ์•„๋ดค๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ
('๊น€๋ฐฅ', null) ์Œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ 2๋ฒˆ ๋“ค์–ด์˜จ๋‹ค๋ฉด ์œ ์ผ์„ฑ ์ œ์•ฝ์— ๊ฑธ๋ฆด ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ null์€ ์œ ์ผ์„ฑ ๊ฒ€์‚ฌ๋Œ€์ƒ์— ์†ํ•˜์ง€ ์•Š์•„์„œ, ๊ฐ™์€ ๊ฐ’์ด ์–ผ๋งˆ๋“ ์ง€ ์ค‘๋ณต์ด ๋  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
์ด๊ฑด postgresql๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋Œ€๋‹ค์ˆ˜์˜ SQL์ด ๊ณต์œ ํ•˜๋Š” ์ฒด๊ณ„๋‹ค.

๋•Œ๋ฌธ์— unique๋ฅผ ๋‹ฌ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ์ปฌ๋Ÿผ๋“ค์— ๋‹ค NOT NULL ์ œ์•ฝ์„ ๋‹ฌ์•„์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.




๊ผผ์ˆ˜

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋…ผ๋ฆฌ์ ์œผ๋กœ null์„ ํฌํ•จ์‹œ์ผœ์„œ ์œ ์ผ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿด ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด null์ธ ์ปฌ๋Ÿผ์— is null์„ ๋‹ฌ์•„์ฃผ๊ณ , where์—๋„ ๋‹ฌ์•„์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์ž˜ ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ €๋ ‡๊ฒŒ ํ•ด๋’€๋‹ค๋ฉด on conflict์ ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋™์ผํ•˜๊ฒŒ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค.



์ฐธ์กฐ
https://www.enterprisedb.com/postgres-tutorials/postgresql-unique-constraint-null-allowing-only-one-null