OneToOne ๋งคํ์์ Unique constraint์ Soft delete
์๋
ํ์ธ์, ๊ฐ์ฌ๋! ๋ฆ์ ์๊ฐ์๋ ๋ต๋ณ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํน์ @OneToOne์ ์ฌ์ฉํ๋ฉด ์๋๋ค๋ ๊ฒ์ด Member - One to Many - Locker ๊ด๊ณ๋ก ๋ฐ๊พธ์ด์ Member์ List ๋ก ๋งคํ์ด ๋๊ณ , ๊ทธ ์์๋ deleted = true์ธ ๊ฒ๋ค๊ณผ delete = false ์ธ ๊ฒ๋ค์ด ๋งคํ๋์ด์ผ ํ๋ค๋ ๋ง์์ด์ ๊ฐ์? ์ ์ดํด๊ฐ ๋์ง ์์ต๋๋ค ใ
ใ
์ง๋ฌธ์ ์์ง๋ OneToOne๊ด๊ณ, FK์ Unique Constraint, Soft Delete ์ธ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ๊ถ๊ธํ์ต๋๋ค! ๊ฒ์ํด์ delete = false ์ธ ๊ฒ๋ค์๋ง ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ์ ์๋ค๋ ๊ฒ์ ๋ง์๋๋ฆฐ๊ฑด, @Where ์ด๋
ธํ
์ด์
์ ๋ง์๋๋ฆฐ๊ฑด ์๋๊ณ SQL๋ฌธ์ ํตํด ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ์์ Where delete = 0 ๊ตฌ๋ฌธ์ ์ถ๊ฐํ์ฌ "delete = 0 ์ธ row์ ๋ํด์๋ง memberId๊ฐ Uniqueํ๋ค" ๋ผ๋ ์กฐ๊ฑด์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ํน์ ์ฌ์ฉํ์๋์ง ์ฌ์ญค๋ณธ๊ฒ์ด์์ต๋๋ค. ์๋ฅผ๋ค๋ฉด ์๋์ ๊ฐ์ด์, CREATE UNIQUE INDEX memberId_index ON locker (memberId) WHERE IsDeleted = 0 ์ ๊ฐ ์ง๋ฌธ์ ์์ธํ ๋ง์ ๋ชป๋๋ ธ๋ ๊ฒ ๊ฐ์๋ฐ, ํน์ ์ ๊ถ๊ธ์ฆ์ด ์ ๋ฌ์ด ๋์์๊น์!