버그 해결을 위한 모든 질문을 던져
+1 vote
46 views
User 테이블

(user_id) | (weapon_id)

ABC123 | Sword

BABO   | Bow

 

Weapon 테이블

(weapon_id) | (user_id)

Sword      |  ABC123

Bow         |  BABO

 

이런 테이블이 있습니다.

보시다시피 서로를 참조하는 관계입니다.

유저는 생성될 때 반드시 무기 하나를 가지고 생성이 됩니다.

 

상황 하나를 가정해보겠습니다.

유저 하나가 생성되고,

KIMCHI88 | Knife

라는 데이터를 저장해야 합니다.

 

현재 제가 사용하는 방식은 다음과 같습니다.

1. Weapon 테이블에 Knife | null 을 삽입한다.

2. User 테이블에 KIMCHI88 | Knife를 삽입한다.

3. Weapon 테이블의 user_id를 채워준다 => Knife | KIMCHI88

 

저는 이 방식이 다소 비효율적으로 느껴집니다.

혹시 2. 이후에 자동으로 3.이 진행되게 할 수는 없는건가요?

User 테이블에 KIMCHI88 | Knife를 삽입할 때,

Weapon 테이블에 있는 Knife가 "누군가 나를 참조했다" 이렇게 인식하고

자동으로 KIMCHI88을 등록시키게 만들 수는 없는건가요?

 

제가 RDBMS의 기능을 제대로 활용하고 있는지 의문입니다...

제가 사용하는 방식이 일반적인 방식인가요?

아니면 더 좋은 방식이 있을까요?

 

고수님들 답변을 기다립니다...ㅠ
asked (27 point) , 46 views

1 답변

+2 votes
우수 답변
User테이블에 weapon_id컬럼은 없어도 될것 같네요.

 

유저 생성시

Insert User

Insert Weapon

이렇게 두번 하고,

조회할때는 Weapon에 user_id가 있으니 그걸로 갖고 오면 되겠죠.
answered (82 point)
선택됨
음... 사실 위 예시는 질문을 위해 급조한 설계입니다.

만약 테이블A와 테이블B가 서로를 참조하는 관계일 때,

테이블 A에 테이블 B(Foeign Key)를 삽입하면,

테이블 B에서 자동으로 테이블 A를 등록하게 할 수 없는지를 여쭈어보고 싶었습니다.

쿼리 3번 할 것을 2번만 할 수 있게 바꿀 수 있으면 좋을 것 같아서...

제 질문 내용이 부실했나봅니다.

답변 감사드립니다.
두 테이블이 서로 FK로 참조하는 관계인것 같은데요,

이렇게 하면 delete할때도 문제 생기지 않을까요?

계속 쌓기만 하는거라고 해도 말씀하신대로 null로 넣었다가 해야 해서 불편할 테고요.

저런 경우에는 테이블을 다시 설계해서 한쪽으로만 참조가 일어나게 했기 때문에 좀 생소한 문제네요.

구체적으로 어떤 컨텐츠를 표현하시려고 하는지 모르겠지만 유지보수등을 생각하면 단순하게 가는게 좋지 않나 생각합니다.
말씀대로 시도해보니 한쪽에서만 참조해도 문제가 없는 것 같습니다.

구조가 훨씬 더 단순해졌네요ㅎㅎ

많은 도움이 되었습니다. 조언 감사드립니다!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

413 질문
545 answers
562 댓글
24,950 users