해결된 질문
작성
·
65
답변 2
1
안녕하세요.
DB는 익숙하지 않으시더라도 엑셀은 익숙하실 텐데요. 하나의 엑셀 파일을 워크북(workbook)이라고 하구요. 그 워크북 안에 다수의 워크시트(worksheet)를 저장할 수 있습니다. 워크북을 DB에서는 "데이터베이스 (Database)" 라고 부르고, 워크시트를 "테이블 (Table)" 이라고 부릅니다.
엑셀에서는 워크시트에 데이터를 저장할 때 유연하게 원하는 Cell에 이곳저곳 Cell에 자유롭게 데이터를 저장할 수 있지만, 우리가 흔히 쓰는 "관계형 데이터베이스"에서는 엄격하게 행과 열에 맞춰 데이터를 저장해야만 합니다.
엑셀에서 아래와 같이 blog_post 시트에 포스팅 데이터를 저장할 수 있겠구요. 각각의 포스팅을 식별하는 식별자를 id 컬럼을 두었는 데요. 이를 기본키(primary key)라고 부릅니다.
댓글 데이터는 시트의 특성상 blog_post 시트에 담을 수는 없구요. 아래와 같이 별도의 시트(DB에서는 테이블)에 저장해야합니다. 이때 어떤 포스팅에 대한 댓글인지를 post_id 컬럼에 저장토록 설계를 하게 됩니다. post_id 컬럼에 저장된 값은 blog_post 시트에서의 식별자를 지정하구요. 이를 외래키 (Foreign Key) 라고 부릅니다.
살펴보시고, 추가 질문은 댓글로 남겨주세요. 질답을 이어가며 이해도를 높여가보시죠.
화이팅입니다!!! :-)
이해하신 바가 정확히 맞구요. 말씀하신 대로 개념적으로 외래키를 포인터로 이해해보실 수도 있겠습니다. 각 데이터를 구조체로 보고, 기본키를 address로 보고, 외래키를 포인터로 보는 거죠. 실제로 그렇게 많이 설명하기도 합니다.
수강평 버튼이 처음에는 안 보이실텐데요. 강의를 조금 수강하시다보면 "수강평" 알림이 뜨고, 화면 우상단에 아래와 같이 "수강평" 버튼이 노출됩니다. 이때 작성해주시면 됩니다.
감사합니다. ;-)
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의 외래키 이해
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
친절한 답변 감사합니다. 제가 이해한게 맞다면, 외래키는 blog_comment 테이블의 댓글이 blog_post 테이블 안에 있는 포스팅 id를 참조하기 위해 갖고 있는 데이터라고 이해했습니다. 약간 구조체 들고 다니는 포인터 느낌이기도한데요.
그리고 후기를 남기고 싶은데 어디에 써야하나요.