취업준비/[데일리과제]50문 50답

[데일리과제] 50문 50답 -3

황소탄 2023. 7. 21. 13:37

Q.

  • 데이터 테이블 간의 관계를 나타내는 FK, OneToOne, ManyToMany 필드에 대해서 설명하시오
  • Django에서 ManyToMany필드를 만드는 방법에 대해서 설명하시오

A.

1.데이터 테이블 간의 관계를 나타내는 FK, OneToOne, ManyToMany 필드에 대해서 설명하시오

 

[Key point]

-FK, PK

[레퍼런스]

https://velog.io/@jch9537/DATABASE-PK-FK

 

[DATABASE] 기본키(PK), 외래키(FK)

데이터 모델링을 하며 ERD(Entity Relationship Diagram: 개체관계도)에 테이블을 만들면서 테이블간의 관계 연결에 대해 어려움을 겪었다.요약하면 부모와 자식/ 참조하는 테이블과 참조되는 테이블로

velog.io

https://puleugo.tistory.com/149

 

FK란 무엇인가? 각 관계형은 어떤 경우에 가장 효율적인가?

서론"FK란 무엇인지, 왜 사용하는지, 언제 사용하는지 설명해주세요." 모의 면접에서 질문이 나왔다. 이부분을 조금 더 깊게 공부해보려고 한다. FK란 무엇이고 왜 사용하는가?Foreign Key는 외래키

puleugo.tistory.com

https://burndogfather.com/258

 

RDBMS에서의 Foreign key(외래키)에 대한 고찰 (어쩌다가 우리는 FK를 쓰지 않는가?)

최근 RDBMS환경에서 일일 1,000만개 이상의 데이터가 지속적으로 insert, delete되며 데이터최신화를 위한 개발환경을 겪으면서 외래키에 대한 생각을 끄적여봄. 결론부터 이야기하자면 "아무리 작은

burndogfather.com

FK는 Foreign Key(외래키)의 약칭이며, 테이블 간의 연결을 위해 사용됩니다.

PK는 Primary Key(기본키)의 약칭이며, 테이블 내 오브젝트를 구분을 위해 사용되면 중복과 빈 값을 허용하지 않는다는 특징이 있습니다.

 

OneToOne 필드는 각 오브젝트끼리 FK를 통해 일 대 일 관계를 맺는 것을 의미합니다.

예시로 A유저와 A유저의 프로필을 들 수 있습니다.

OneToOne 필드의 특징으로는 참조무결성을 방지하고, 쿼리 성능을 향상시키며, 확장성 및 유지보수성을 높일 수 있습니다.

 

ManyToMany 필드는 다 대 다 관계를 의미합니다, 예시로 유저가 게시글에 대한 좋아요 기능을 사용할 수 있다고 할 때, DB상으로 유저는 다른 게시글에도 좋아요 기능을 사용할 수 있으며, 게시글 또한 여러 유저에게 좋아요를 받을 수 있습니다.

ManyToMany필드의 특징으로는 참조무결성을 방지하고, 쿼리의 성능 향상 및 데이터 중복을 최소화 합니다.

 

A.

2.Django에서 ManyToMany필드를 만드는 방법에 대해서 설명하시오

 

[Key point]

-모델간의 관계

-오브젝트

-필드

[레퍼런스]

https://github.com/Jeongchan-ho/gwolnadri_project/blob/develop/events/models.py

 

커뮤니티 사이트를 만들었다 가장하여 게시글의 좋아요, 북마크 기능을 통해 설명하겠습니다.

 

좋아요, 북마크가 작동하기 위해 대상이 되는 오브젝트가 있어야 하고 그 기능을 작동시켜줄 오브젝트가 있어야 합니다.

게시글이 대상이 되는 오브젝트, 유저가 작동을 시켜줄 오브젝트라 볼 수 있습니다.

 

게시글을 만들기위해 우리는 이 오브젝트가 어떤 속성(필드)을 가지고 있는지 정해야 합니다.

마찬가지로 유저가 어떤 정보를 가지고 있는지 정해야합니다.

또한 각 게시글과 유저를 구분할 수 있는 수단인 PK 값을 주어야 합니다.

모델을 통해 게시글과 유저가 어떤 속성을 가지는지 구현해줍니다, PK는 django에서 기본적으로 부여하기에 따로 구현해 줄 필요는 없습니다.

게시글 모델에 북마크와 좋아요를 위한 필드를 생성해주고, 해당 필드의 속성을 ManyToMany로 부여해줍니다. 

ManyToMany로 관계를 맺은 테이블은 유저 테이블로 정해주고 related_name을 부여하면 이후 여러 곳에서 편하게 해당 필드를 조작할 수 있습니다.

이렇게 하면, ManyToMany 필드를 구현할 수 있습니다.