2011-09-15 3 views
2

친구 목록을 사용하는 Android 앱을 만들고 있습니다. 내가 아는 한 MySQL 테이블에 배열을 저장할 수 없기 때문에 "Users"테이블에서 별도의 테이블을 만들고 "Friends"라고해야합니다. 이 테이블에는 Friend1과 Friend2 만 있습니다.MySQL 친구 목록 도움말

이 테이블을 저장하는 가장 좋은 방법은 내 질문입니다. 내 "사용자"테이블의 UserName 필드 (문자열)를 사용하여 저장할 수 있거나 "사용자"테이블의 UserID 필드 (정수)를 사용할 수 있습니다. 작은 정수가 문자열보다 많은 공간을 차지하기 때문에 ID를 사용하면 표가 더 작아 지지만, 동시에 UserName 필드를 사용하여이 데이터에 액세스합니다 (따라서 User 테이블을 쿼리하여 사용자 테이블).

MySQL 테이블에는 어떤 방법이 선호됩니까? 사용자 이름을 직접 사용하므로 Users 테이블에서 UserID를 찾거나 두 개의 정수로 테이블을 저장하지 않고 UserName에서 ID를 찾으려면 쿼리 할 필요가 없습니까? 감사.

+0

나는 당신이 SQLite를 의미한다고 생각합니까? 어쨌든 ID를 외래 키로 사용하십시오. –

답변

1

users 테이블에서 두 개의 userID 키를 저장하십시오.

연락처 이름을 "Guy from bar"에서 "Mr. McMoneypants"로 변경한다고 가정 해 봅시다. 이 대화 상대가 친구 인 경우 변경 후에도 여전히 "가이의 가이"로 표시됩니다.

여러 위치에 데이터가 저장되지 않도록하십시오.

+1

게다가 정수 비교는 문자열 비교보다 훨씬 빠르기 때문에 조인의 고통을 크게 줄여줍니다. – jmelesky

0

선호하는 방법은 해당 사용자를 참조하는 방법으로 Friends 테이블의 Users 테이블에서 UserID를 사용하는 것입니다. 그렇게하면 필립이 말했듯이 사용자는 이름을 바꿀 수 있으며 한 곳에서만 변경하면됩니다. 게다가, 친구 테이블은 문자열 열에 비해 숫자 열로 더 적은 공간을 차지합니다.

그리고 "(so I have to query the Users table to get the UserID from the Users table)"에 관해서

는 다음과 같은 쿼리가 너무 복잡되지 않습니다 :
SELECT FriendName 
FROM Users Natural Left Join Friends 
WHERE UserName = 'Ralph'; 

는 지금까지 쿼리에 관한 한, 당신은 사용자 ID 열을 처리 할 수 ​​없었어요. 그것은 당신의 방법보다 훨씬 어렵지 않습니다 :

SELECT FriendName 
FROM Friends 
WHERE UserName = 'Ralph';