• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

EFCore 포렌키 설정 관련 질문(Entity Framework Code First One-to-Many Relationship)

23.12.29 15:27 작성 조회수 110

0

public class UserData

{

//public int Id { get; set; }

[Key] public string UserId { get; set; }

public string? Token { get; set; }

[MaxLength(32)]

public string? UserName { get; set; }

public DateTime? CreateTime { get; set; }

public BanData BanData { get; set; }

public List<MailData> MailDatas { get; set; }

public List<GetMailData> GetMailDatas { get; set; }

}

 

public class BanData

{

public int Id { get; set; }

public DateTime Start { get; set; }

public DateTime End { get; set; }

public int State { get; set; }

public string DescKey { get; set; }

// Foreign Key

////1:1 방향일 경우 한쪽이 아이디까지 물고 있어야함

public string UserDataUserId { get; set; }

[JsonIgnore] public UserData UserData { get; set; }

}

 

public class MailData

{

/// <summary> 우편물 구분 값 </summary>

public int Id { get; set; }

/// <summary> 발송일 </summary>

public DateTime SendDate { get; set; }

/// <summary> 우편물 받아야하는 기간 </summary>

public DateTime EndDate { get; set; }

/// <summary> 우편 내용물 </summary>

public string Body { get; set; }

/// <summary> 보낸이 ex)GM, DEV 등등 </summary>

public string Sender { get; set; }

// Foreign Key

public string UserDataUserId { get; set; }

[JsonIgnore] public UserData UserData { get; set; }

}

 

이렇게 코드가 있을 경우
MailData -> UserData로 연동은 잘 됩니다

다만 DB 테이블에 MailData가 생성되는데 제가 원하는 것은

UserData 테이블에 MailDatas 가 생성되는 것입니다

 

다만 위 코드처럼 처리를 할 경우 MailData 테이블에

모든 유저들의 메일 정보가 저장되고 UserData에서

긁어오는 것으로 파악되는데 맞을까여?

만약 이렇게하여 모든유저들의 정보를 처리하는게 더 좋은 방식인지 UserData 테이블에 JSON으로 메일을 처리하는것이 좋은 방식인지 궁금합니다

 

 

답변 3

·

답변을 작성해보세요.

1

다만 위 코드처럼 처리를 할 경우 MailData 테이블에
모든 유저들의 메일 정보가 저장되고 UserData에서
긁어오는 것으로 파악되는데 맞을까여?
-> 네 그렇습니다.

만약 이렇게하여 모든유저들의 정보를 처리하는게 더 좋은 방식인지
UserData 테이블에 JSON으로 메일을 처리하는것이 좋은 방식인지 궁금합니다
-> JSON으로 처리하면 특정 메일만 삭제한다거나 하는 처리가 어려워집니다.
JSON같은 Raw Data로 저장하는 것은, 그대로 긁어서 건내줘도 무방한
(예를 들면 단축키 세팅 등이라거나) 것들만 해주시는게 좋습니다.

0

한일상님의 프로필

한일상

질문자

2023.12.29

답변 감사합니다
메일의 데이터 테이블에서 모든 유저들의 정보가 저장될텐데 이 방식이 일반적으로 사용하는 방식인지, 속도는 상관없을지 궁금합니다

루키스님의 강의 중 DB관련 심화 과정이 있는지도 궁금합니다

게임 장르에 따라 다르지만, 메일의 경우
0.1초마다 1000개씩 뿌리지 않기 때문에 그렇게 해도 전혀 상관없습니다.
아이템 테이블에서도 모든 캐릭터의 아이템을 들고 있는데
이게 몇 천만 단위로 가도 무리없이 잘 케어가 됩니다.
모든 정보가 있더라고 PK의 힘으로 빠르게 찾을 수 있기도 하고,
경우에 따라 그럼에도 더 효율적으로 만들고 싶다면
키값에 따라 DB 테이블을 여러개를 만들면 됩니다.
(예를 들어 PK % 1000 으로 해서 결과가 1이면 1번 DB라거나 이런식)
이게 sharding이라고 불리우는 것인데 아주 효과적이고
MMO는 아니지만 SNG 게임에서 종종 사용합니다.

심화 과정은 케바케로 다르기 때문에 기본적인 지식을 토대로
이후 내용은 스스로 응용하셔야 합니다.
응용 컨텐츠 개발 관점에서는 이 정도 지식만 알아도 충분할 것 같네요.
그래도 정 궁금하시면 DBA 관련 공부 (DB 튜닝 등)을 하면 되지만,
이 또한 경험 위주로 쌓는 지식이지 책이나 강의로 볼 수 있는 부분은 아닙니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.29

안녕하세요, 인프런 AI 인턴입니다.

Entity Framework Core를 사용하여 One-to-Many 관계를 설정하는 방법에 대해 궁금하신 것 같습니다. 관련하여 질문을 하신 한일상님의 경우, MailData를 UserData와 연결하는 방법과 해당 데이터를 처리하는 더 좋은 방식이 무엇인지에 대해 질문하고 계신데요, 강의 중에서도 유사한 내용에 대한 답변이 제공되었습니다. 아래 링크에서 유사한 질문에 대한 강사님의 답변을 참고하시면 도움이 될 것 같습니다.

“강의에서 Entity Framework Core를 사용하는 방법에 대해 설명했는데, 이 부분을 참고하면 여러분이 질문하신 내용에 대한 답을 얻을 수 있을 것입니다.”

강의 제목: [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part8: Entity Framework Core
- FK와 JOIN
- Db model 에 index 추가 및 Identity관련

이 링크들을 통해 데이터베이스 관계 설정 및 테이블 생성에 대한 이해를 높이실 수 있습니다.