2009-06-17 17 views
1

私はデータベースにデータを格納するのが好ましい方法であるかというかなり基本的な質問をしています。mysqlにデータを保存する最も良い方法は?

"users"というテーブルがあり、各ユーザーはusernameとuser_idを取得しています。さて、私は、ユーザーがニュースにコメントするための "コメント"と呼ばれるテーブルを作成したいと思います。

コメントに「username」という名前の列を持ち、ログインしたユーザーの名前を格納するか、「user_id」という列を持つ方がよいでしょうか。 user_idを使用すると、SQL文に別のselect文が必要になります。 "(ユーザー名からusers.id = comments.user_idを選択してください)。パフォーマンスは、ユーザー名を保存するほうが良いようです。

私はデータベース内の重複データを避けるために読んだと思った。

どちらが優れていますか? USER_IDが主キーである場合

おかげ

答えて

1

は、あなたが代わりのuser_idのユーザー名を使用したい場合は、なぜあなたが最初の場所でのuser_idを持っているか、ユーザー名の代わりにuser_idを使用する必要がありますか?

10

通常、IDフィールドを使用してテーブルをリンクします。あなたのユーザ名を変更することを許可するかもしれないが、その場所にあるすべての場所を試して更新したくない理由は(あなたの状況では)...

したがって、あなたのコメントにuser_idを入れて表示されているように、ユーザー名をジョインで外します。

+0

これはまさに正しい – jlarson

+0

まさに正しい。たぶん一つのことです:私は*常に*すべての私のテーブルに "id"を使用してください、それは "メイン" IDで、 "id_"で始まる外部キーは、フォージンキーのテーブルの名前です。したがって、私のクエリは次のようになります: << SELECT C.comment FROM users U JOIN comment C ON C.id_user = U.id "Olivier" >>のようなU.name。ポイントは何ですか ?あなたのデータベースを知らない人は、外来キーの構文を非常に簡単に推測し、長期間に渡ってあなたのデータベースは維持しやすくなります。 –

1

十分な大きさのデータベースを作成する可能性がある場合は、user_idをコメントテーブルに格納します。より少ないオーバーヘッド。また、ユーザー名をこのように変更しやすいと考えてください。

+0

オーバーヘッドが少なく、結合が遅い –

+0

ユーザー名を使用すると、より低速のJOINに遭遇することを意味すると思います。 – Sev

0

ユーザーID(整数)を格納すると、後でJOINが高速化されます。手作業でデータベースを掘り下げる計画がない限り、実際にはユーザー名を使用する理由はありません。

0

コメントテーブルにユーザーIDを格納するだけで十分です。コメントテーブルから行を返す場合は、JOIN文を使用します。

乾杯

0

どちらが固有の識別子になりますか? user_id、あなたのシステムに2つの "John Smith"を持つことはできません。

ボリュームが大いに懸念される場合、ユーザー名フィールドを一致させるテキストは、クエリのユーザーテーブルに長期間リンクするよりも高価になります。

1

あなたはユーザーテーブルの主キーとしてのuser_idを使用して、コメントテーブルの外部キーとしておよび詳細を取得するためにこれを使用する必要がありますので、データは、third normalized form(少なくとも)に格納する必要があります。

あなたが記事に基づいてコメントを取得している場合は
SELECT comments.*, users.username 
FROM comments, users 
WHERE users.user_id = comments.user_id; 

、あなたはこのようにこれを行うことができます:

SELECT comments.*, users.username 
FROM comments, users 
WHERE users.user_id = comments.user_id 
AND comments.article_id = '$current_article_id'; 
+1

2番目のクエリでarticlesテーブルはまったく必要ありません。 – Fenton

0

数値は、英数字のIDより参加し安価でインデックスされています。行を一意に識別する番号を使用します。別の利点は、ユーザーIDを変更する必要がある場合、PKを変更する必要がないことです。最後の利点は、これがジャンゴとレールのような最新のWebフレームワークの設計であることです。

関連する問題