제목 | 트위터 팔로윙 팔로워 시스템 DB | ||
---|---|---|---|
글쓴이 | dataguru | 작성시각 | 2012/07/30 12:35:04 |
|
|||
트위터 팔로윙, 팔로워 같은 데이터베이스를 설계 할려고합니다. * 맞팔로워 인지 확인이 가능해야합니다. * 회원 탈퇴시 회원관계 데이터가 삭제 되야합니다. DB 설계 회원 테이블 1. 회원 주식별자 2. 이름 3. 로그인아이디 회원관계 테이블 1. 회원관계 주식별자 2. 신청회원 주식별자 3. 받는회원 주식별자 4. 맞팔로워 구분값 : 0:팔로윙, 1:맞팔 관계 회원 테이블 : 회원관계 테이블 1 : N 회원관계 테이블은 회원테이블의 자식 테이블입니다. 즉 회원테이블에서 데이터가 삭제 될시 회원관계 테이블 데이터도 삭제가 됩니다. delete cascade 위 처럼 DB 설계를 해야 하는게 맞을까요 아니면 더 좋은 설계 방법이 있으면 조언해 주시면 감사 하겟습니다. |
|||
다음글 | db 연결이 안된다고 나오는데요; (3) | ||
이전글 | 검색시 한글 변환문제 (5) | ||
니삼
/
2012/07/30 16:59:22 /
추천
0
|
변종원(웅파)
/
2012/07/30 17:27:24 /
추천
0
니삼님 말씀처럼
맞팔인지 체크하는 쿼리가 조금 더 길어지겠지만 a -> b 팔로윙 b -> a 팔로윙 양방향 체크하는 것이 좋을 것 같습니다. 위와 같은 로직일 경우 해당 로우가 없으면 팔로워가 아니고 있을 경우 상대방도 나를 팔로윙하고 있는지 체크만 하는게 좋을 것 같네요. |
dataguru
/
2012/07/31 13:34:57 /
추천
0
답변 감사합니다. 그런데 트위터가 mysql 을 사용하고 관계형 데이터베이스 인걸로 알고 있습니다. 제가 알고 있는게 틀린 건가요?? 그리고 맞팔로워 구분값은 웅파 님이 말씀 하신것 처럼 나를 팔로윙 하고 있는지 체크 하는 컬럼 입니다.
0. user 는 회원정보를 담고 있습니다.
1. post 는 페이스북의 담벼락 같은 역할을 합니다.
2. comment 는 페이스북의 담벼락 게시물의 댓글 같은 역할을 합니다.
3. relation 은 페이스북의 친구관계를 뜻합니다.
ex) 1
user
uid, loginId, email, password
1 A A@email.com a123
2 B B@email.com b123
3 C C@email.com c123
회원A ~ C 까지 있습니다.
relraion
senduser_id, getuser_id
1 2
2 1
1 3
A와 B는 서로 친구이며 현제 A가 C 에게 친구요청을 한 상태 입니다.
post
pid, content, user_user_id
1, '난 A 입니다.', 1
2, '난 B 입니다', 2
3, '난 C 입니다, 3
회원 A ~ C 가 게시물을 작성 했습니다.
comment
cid, post_pid, post_user_uid, text
1 1 2 '안녕 A 댓글임'
2 2 1 '안녕 B 댓글임'
회원 A ~ B 가 각각의 게시물에 댓글을 달았습니다.
relation, post, comment
위의 테이블은 참조 무결성을 지켜줘야 합니다. 즉 user 1번이 탈퇴하면 relation 테이블에서 senduser_id, getuser_id 컬럼에 1 이라는 데이터가 들어 있는 행을 삭제 해줘야합니다. 그리고 post, comment 도 user 컬럼에 1번이 들어간 행은 삭제 해줘야합니다. 그리고 comment 와 post 테이블과의 관계도 참조 무결성을 지켜줘야 하기때문에 post 행이 삭제 되면 comment 행도 삭제 되
어야 합니다.
ex) 2
user 1번이 탈퇴 했을때 아래와 같이 데이터가 삭제 되어야 합니다.
user
uid, loginId, email, password
2 B B@email.com b123
3 C C@email.com c123
user 1번이 삭제 됩니다.
relraion
senduser_id, getuser_id
user 테이블의 uid 를 참조 하고 있는 senduser_id, getuser_id 는 참조무결성을 지켜줘야하기때문에 1,2,3 행이 삭제됩니다.
post
pid, content, user_user_id
2, '난 B 입니다', 2
3, '난 C 입니다, 3
user 테이블의 uid를 참조 하고있는 user_user_id 는 참조무결성을 지켜줘야 하기때문에 1행이 삭제됩니다.
comment
cid, post_pid, post_user_uid, text
post 테이블의 pid를 참조 하고 있는 post_pid는 참조 무결성을 지켜줘야 하기때문에 1행이 삭제됩니다.
post 테이블의 uid는 user 테이블의 uid를 참조 하고 있기때문에 참조 무결성을 지켜줘야 하기에 2행이 삭제 됩니다.
제가 설계한 테이블 관계는 위와 같습니다. 위 처럼 설계를 하면 식별관계에 문제점이 생긴다거나, 성능에 문제가 있을까요?
그리고 위처럼 설계를 하면 dml 작업에서 트랙잭션 시 잠금 범위가 확장되어 동시 처리에 영향
이 있을것같습니다. 그럼에도 불구 하고 위처럼 설계를 해야 한다면 그에 따른 대책은 어떤 것들이 있을까요?? 조언 부탁드립니다.
|
milosz
/
2012/07/31 14:18:33 /
추천
0
그럼 만약에 하나에 게시글에 여러개의 아이디 즉 여러 유저에게 보내는 경우는 없는건가요?
|
dataguru
/
2012/07/31 15:47:22 /
추천
0
pid, content, user_user_id 1, '난 A 입니다.', 1 2, '난 B 입니다', 2 3, '난 C 입니다, 3
4, '난 A 입니다 2번째 글입니다.', 1 5, '난 A 입니다 3번째 글입니다.', 1 6, '난 B 입니다 2번째 글닙니다.', 2 cid, post_pid, post_user_uid, text 1 1 2 '안녕 A 댓글임' 2 2 1 '안녕 B 댓글임' 3 1 2 '안녕 A 댓글임 2번째' 4 1 2 '안녕 A 댓글임 3번째' 5 2 2 '안녕 A 댓글임 2번째' milosz님 께서 하나의 게시글에 여러명의 유저 에게 보내는 경우라고 말씀 하셧는데 위의 erd 관계를 보시면 아시겟지만 post 의 자식이 user 가아니라 user 의 자식이 post입니다. 그러므로 1명의 user가 여러개의 글을 달수 있고 comment 의 부모가 post 이기 때문에 1개의 post에 여러개의 comment 를 달수가 있습니다. |
milosz
/
2012/07/31 15:54:14 /
추천
0
아 죄송합니다. 제가 글을 꼼꼼하게 읽고 달질 않았군요. 위에서 문제는 크게 없어 보입니다.
|
dataguru
/
2012/08/01 17:39:16 /
추천
0
답변 달아주신분들 감사합니다.
|
그것보다 우선 트위터는 관계형디비가 아니라 ..
그냥 지나가다 댓글 달아요 생각을 두고 읽진마세요 ..