2011-09-15 12 views
2

私は友達リストを使用するAndroidアプリを作っています。私の知る限り、あなたはMySQLテーブルに配列を格納することはできませんので、私は "Users"テーブルから別のテーブルを作り、それを "Friends"と呼ぶ必要があります。このテーブルにはFriend1とFriend2だけがあります。MySQLの友人リストヘルプ

私の質問は、このテーブルを保存するのに好ましい方法です。私は私の "Users"テーブルからUserNameフィールド(文字列)を使用してそれらを保存するか、私の "Users"テーブルからUserIDフィールド(整数)を使用することができます。小さな整数は文字列よりも多くの領域を占めるため、IDを使用すると表が小さくなりますが、同時に、このデータは主にUserNameフィールドを使用してアクセスされます(ユーザー表を問い合せてUserIDを取得する必要があります)。ユーザーテーブル)。

MySQLテーブルにはどの方法が適していますか?ユーザー名を直接使用するので、UsersテーブルからUserIDを見つけたり、2つの整数としてテーブルを保存したり、UserNameからIDを検索したりする必要はありませんか?ありがとう。

+0

は、私はあなたがSQLiteの意味と仮定しますか?それにもかかわらず、IDを外部キーとして使用してください。 –

答えて

1

usersテーブルから2つのuserIDキーを格納します。

連絡先の名前を「Guy from bar」から「Mr. McMoneypants」に変更するとします。この連絡先が友人の場合、変更後も「バーからのガイ」と表示されます。

複数の場所にデータが保存されないようにしてください。

+1

さらに、整数比較は文字列比較よりもはるかに速く、結合の苦労を大幅に軽減します。 – jmelesky

0

推奨される方法は、そのユーザーを参照する方法として、FriendsテーブルのUsersテーブルのUserIDを使用する方法です。そうすれば、ユーザーは名前を変更できるので、変更する必要があるのは1か所だけです。さらに、あなたの言うとおり、Friendsテーブルは、文字列と比較して数字の列でより少ないスペースを占有します。

そして"(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'; 
関連する問題