인프런 커뮤니티 질문&답변

sunnnwo님의 프로필 이미지

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)

02-02 장고 핵심 기능 리뷰 #01 - 장고 기본 구조, 뷰, 모델, 마이그레이션

외래키 관계라는게 무슨 의미인지 잘 모르겠습니다.

해결된 질문

작성

·

45

0

안녕하세요 강사님.

post 모델과 코멘트, 즉, post 테이블과 코멘트는 외래키 관계라고 설명해주셨는데, 제가 db용어를 잘 모르고, 찾아봐도 와닿지 않아서 이해가 잘 되지 않았습니다.

감사합니다.

답변 2

1

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

DB는 익숙하지 않으시더라도 엑셀은 익숙하실 텐데요. 하나의 엑셀 파일을 워크북(workbook)이라고 하구요. 그 워크북 안에 다수의 워크시트(worksheet)를 저장할 수 있습니다. 워크북을 DB에서는 "데이터베이스 (Database)" 라고 부르고, 워크시트를 "테이블 (Table)" 이라고 부릅니다.

엑셀에서는 워크시트에 데이터를 저장할 때 유연하게 원하는 Cell에 이곳저곳 Cell에 자유롭게 데이터를 저장할 수 있지만, 우리가 흔히 쓰는 "관계형 데이터베이스"에서는 엄격하게 행과 열에 맞춰 데이터를 저장해야만 합니다.

엑셀에서 아래와 같이 blog_post 시트에 포스팅 데이터를 저장할 수 있겠구요. 각각의 포스팅을 식별하는 식별자를 id 컬럼을 두었는 데요. 이를 기본키(primary key)라고 부릅니다.

Pasted_Image_11_2_24__14_52.png

댓글 데이터는 시트의 특성상 blog_post 시트에 담을 수는 없구요. 아래와 같이 별도의 시트(DB에서는 테이블)에 저장해야합니다. 이때 어떤 포스팅에 대한 댓글인지를 post_id 컬럼에 저장토록 설계를 하게 됩니다. post_id 컬럼에 저장된 값은 blog_post 시트에서의 식별자를 지정하구요. 이를 외래키 (Foreign Key) 라고 부릅니다.

Pasted_Image_11_2_24__14_53.png

살펴보시고, 추가 질문은 댓글로 남겨주세요. 질답을 이어가며 이해도를 높여가보시죠.

화이팅입니다!!! :-)

 

 

sunnnwo님의 프로필 이미지
sunnnwo
질문자

친절한 답변 감사합니다. 제가 이해한게 맞다면, 외래키는 blog_comment 테이블의 댓글이 blog_post 테이블 안에 있는 포스팅 id를 참조하기 위해 갖고 있는 데이터라고 이해했습니다. 약간 구조체 들고 다니는 포인터 느낌이기도한데요.

그리고 후기를 남기고 싶은데 어디에 써야하나요.

이진석님의 프로필 이미지
이진석
지식공유자

이해하신 바가 정확히 맞구요. 말씀하신 대로 개념적으로 외래키를 포인터로 이해해보실 수도 있겠습니다. 각 데이터를 구조체로 보고, 기본키를 address로 보고, 외래키를 포인터로 보는 거죠. 실제로 그렇게 많이 설명하기도 합니다.

수강평 버튼이 처음에는 안 보이실텐데요. 강의를 조금 수강하시다보면 "수강평" 알림이 뜨고, 화면 우상단에 아래와 같이 "수강평" 버튼이 노출됩니다. 이때 작성해주시면 됩니다.

image.png

 

감사합니다. ;-)

sunnnwo님의 프로필 이미지
sunnnwo
질문자

감사합니다. 후기 작성 잘 하도록 하겠습니다.

강의 많은 사람들이 들었으면 좋겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. sunnnwo님 질문에 답변 드리겠습니다.

외래키(Foreign Key)는 데이터베이스에서 관계를 정의하는 키입니다. 기본적으로 한 테이블의 열이 다른 테이블의 행을 가리키는 참조를 나타낼 때 사용됩니다. 쉽게 말해, 외래키는 두 테이블 간에 연결을 만드는 링크 역할을 합니다.

예를 들어, Post 테이블과 Comment 테이블이 있다면, Comment 테이블은 각 댓글이 어떤 게시물에 있는지를 알아야 합니다. 이때 Comment 테이블에 Post 테이블의 기본 키(Primary Key)를 참조하는 열을 두어 연결하는 것을 외래키 관계라고 합니다. 이렇게 함으로써 데이터베이스를 정규화하고, 데이터의 중복을 최소화할 수 있습니다.

외래키는 다음과 같은 역할을 합니다:
1. 데이터 무결성을 유지: 외래키를 통해 존재하지 않는 참조를 방지하여 데이터베이스의 무결성을 유지할 수 있습니다.
2. 연관 데이터 쉽게 조회: 외래키 관계를 통해 연관된 데이터를 쉽게 검색하고 조인할 수 있습니다.

장고(Django)에서 외래키는 모델 클래스에서 ForeignKey 필드를 사용하여 정의할 수 있습니다. 예:

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    content = models.TextField()

위의 예제에서 Comment 모델은 Post 모델과 연결되어 있으며, 댓글이 달린 게시물에 대한 정보를 가집니다.

외래키와 그 의미에 대해 조금 더 알아보시려면 아래 관련된 링크를 참고해 주세요:
- 장고 모델의 외래키 가이드
- SQL의 외래키 이해

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

sunnnwo님의 프로필 이미지

작성한 질문수

질문하기