Primary key, Foreign Key, join

momomoki·2023년 11월 14일
0

Primary key?

Primary key란? primary는 사전적으로 최초의 초기의라는 뜻을 가졌으며 그럼 초기의 키를 뜻하겠죠?
그럼 데이터베이스에서는 어떤식으로 사용하는지 알아보겠습니다. 데이터베이스에서는 테이블을 만들때 primary key라고 붙여줘야 사용이 가능하며 primary key는 데이터 베이스에서 중복이 안돼서 유일키입니다.

Foreign Key

Foreign Key란? Foreign Key의 Foreign은 사전에서 for에서 어원이 왔다고 하여 ~~에 대해라는 뜻을 가졌겠다고 생각을 했습니다. 왜? Foreign Key는 데이터베이스에서는 참조 키로 사용하기 때문이죠. 참조 키가 무엇일까? 이걸 설명할려면 데이터베이스의 정규화부터 설명을 해야한다.. 그럼 데이터베이스의 정규화를 아주아주 간단하게 설명하겠습니다.

데이터베이스의 정규화

데이터베이스의 정규화에는 1정규화 2정규화 3정규화 이런 정규화에 대한 단계가있지만 결국 데이터베이스를 얼마나 효율적으로 설계하는지에 대한 고민과 생각이 정규화이지 않을까 싶습니다. 저 규칙을 거치겠지만 저 규칙이 최선일지라도 최고일까?라는 생각을 합니다.
그럼 Primary key, Foreign Key, 정규화에 대해 간단하게 설명했는데 그럼 데이터베이스에 데이터가 들어가있는걸 보겠습니다.
ERD부터 보겠습니다.

erd를 보면 코디라는 테이블에 댓글이 1:n로 연결되어있고 댓글에는 대댓글이 1:n으로 연결 되어있습니다. 여기서 노란색 열쇠가 primary key이고 흰색 열쇠가 foreign key를 뜻합니다. 여기서 잠깐보면 primary key가 foreign key가 되고 있습니다. primary key는 유일키이기 때문에 그 키값으로 정보를 조회하기에 유일키이면서도 참조키가 되는 것입니다.

join

위에서 primary key, foreign key에 대해 설명을했는데 결국 join이라는것을 설명하기 위해 왔죠. join이란? 오라클,mysql,maria DB등등을 RDBMS라 하죠. RDBMS란? 관계형 데이터베이스라고 합니다. 관계형 데이터베이스란 간단하게 각 테이블들이 관계를 가지고있다. 1:n, 1:1, n:m관계를 말하죠. 이런 관계를 가지는 이유는 정규화를 하기 때문이죠. 왜? 어찌되었든 사용자,사업자는 데이터를 변경하는 경우가 있을겁니다. 그때마다 엄청나게 많은 데이터를 찾아서 그정보를 하나하나 수정하는 일이 과연 좋을까? 여기서 시작 되었다고 저는 생각을 합니다. 그래서 테이블을 나누면 참조키를 통해 id값만 가지고 그 id값에 join된 내용으르 변경하면 1번의 조회와 변경으로 수만개의 데이터를 변경할 수 있습니다. 그럼 join의 예를 한번 보겠습니다.

위 테이블은 아까 erd의 코디테이블입니다.

위 테이블은 댓글 테이블입니다.

위 테이블은 대댓글 테이블입니다.
원래는 하나의 코디테이블에 댓글과 대댓글이 들어가 있어여 하죠. 하지만 하나의 테이블에 수정 추가 삭제가 자유롭게 할려면 테이블들을 나누어서 사용하는게 효율이 좋습니다. 그렇다보니 이런식으로 나누었고 보시면 그리고 이녀석들은 원래 하나가 세트이므로 한화면에 한번에 보여줘야합니다. 그럼 다 다른 테이블에 있으니 다 따로 불러야하 하나? 이걸 한번에 하는걸 join으로 하는것이며 댓글과 대댓글에서는 참조키로 코디NO 댓글NO라고 따로 참조키로 들어가있죠. 그래서 join을하면 하나의 게시물을 선택해서 보면 댓글과 대댓글의 내용도 찾아올 수가 있습니다.

제가 데이터베이스 시각화 툴인 DBeaver를 사용하고 있고 거기서 sql query문을 SELECT * FROM cbcomment co inner JOIN cbreply re ON co.CODYBOARDNO = re.CODYBOARDNO AND co.no = re.CBCOMMENTNO WHERE co.CODYBOARDNO = 4 ORDER BY co.NO asc, re.no ASC; 이렇게 사용하면


이렇게 제가 원하는 데이터를 뽑아 올 수있게됩니다.
이번 포스팅은 primary key와 foreign key, join을 거였는데 좀 많이 다른 길로 갔네요. 그래도 데이터베이스는 재밌습니다.

profile
얍얍엽엽욥욥

0개의 댓글