0

現在、MySQLデータベースを設計しています。ユーザーテーブルとコメントテーブルから始めましょう。私たちが主に目にするのは、コメントの作成者が整数として格納されていることです。ただし、左結合を使用する必要があり、アプリケーションが大きくなると、1つのクエリで必要な左結合はほとんどありません。最後に、これは複雑なクエリを作成します。整数なしでusersテーブルを作成できますか?そして、コメントの作者は彼のユーザー名で保存されます。

また、foreign keysMySQLにもあります。それらを使用した場合、どのような実用的な利点がありますか?

注:私はUTF-8を使用しており、アプリケーション(辞書(直接の銀河百科事典)のようなもの)はキリル文字になります。

4

4 に答える 4

4

してもいいです。ただし、これにより結合に処理オーバーヘッドが追加されます。数値キーを使用する方がはるかに高速です。

クエリ内のいくつかの結合は完全に問題ありません...「利便性」のために非正規化または他のデータレベルの変更を行うよりもはるかに優れています

于 2012-07-26T18:32:23.073 に答える
2

ユーザーテーブルのキーとして整数を使用することを強くお勧めします。自動インクリメントのフィールドを設定して、一意性を保証します。これにより、自分で設定する必要がなくなります。次に、コメントまたは他のテーブルに外部キーを設定します。主キー フィールドにはインデックスが付けられ、これを整数として使用することをお勧めします。この概念は、データベース設計の他の多くの場所に適用される可能性があります。

于 2012-07-26T18:36:56.817 に答える
1

代理キーを使用しない正当な理由がない場合は、それらを使用してください。

それらは、定義上、エンティティ全体で変更できないエンティティの一意の識別子であるため、あなたの生活を非常に簡単にします。

これは、ユーザー名のような自然な主キーには当てはまりません。それらは自然であるため、アプリケーションデータに依存します。現在有効なアプリケーションデータに関する制約は、機能要件の変更により、明日は無効になる可能性があります。機能要件は、顧客が指示するため、通常は管理できません。したがって、通常、自分で制御できない制約に基づいてスキーマを構築することは適切ではありません。

したがって、サロゲートキーを使用しない正当な理由がある場合を除いて、サロゲートキーを使用してください。

于 2012-07-26T18:54:36.017 に答える
0

実際には、多くの要因 (ユーザーは自分のユーザー名を変更できるか? 未登録のユーザーがコメントを投稿できるようにするか? など) に依存するため、どちらのオプションが優れているかを確実に判断するのは難しいです。

commentsテーブルにユーザー名と数値のユーザーIDの両方を格納するソリューションを検討してください。このようにしてデータを非正規化しますが、パフォーマンス上の利点がいくつかあります(実際には、コメントを配置した時点のユーザー名を保存するため、実際には非正規化ではありません-厳密に言うと.:])。

于 2012-07-26T18:37:51.587 に答える