私は常にMySQLデータベースの主キーを整数として見ています。これは、主キーが整数である必要があるためですか、auto_increment
それとも列に設定するときの使いやすさのためですか?
将来、主キーを使用したい場合に備えて、疑問に思ってvarchar
います。
私は常にMySQLデータベースの主キーを整数として見ています。これは、主キーが整数である必要があるためですか、auto_increment
それとも列に設定するときの使いやすさのためですか?
将来、主キーを使用したい場合に備えて、疑問に思ってvarchar
います。
それぞれが一意varchar
であることを確認する限り、使用することもできます。ただし、これは理想的ではありません(詳細については、以下の記事のリンクを参照してください)。
探しているものは自然キーと呼ばれますが、自動インクリメントされ、RDBMSによって処理される主キーは代理キーと呼ばれます。これは推奨される方法です。したがって、整数である必要があります。
もっと詳しく知る:
文字列や複合キーと比較して、インデックス作成に整数を使用する方が簡単な場合がよくあります。整数は、結果(概念上または実際)を配列として扱うのに適しているためです。データベースの実装によっては、整数へのアクセス、並べ替え、比較も高速になる場合があります。整数型は通常、他のデータ型では使用できない自動インクリメントなどの追加機能を提供します。たとえば、複合キーを自動インクリメントするにはどうすればよいですか?
MySQLには、主キーについて次のように書かれています。
テーブルの主キーは、最も重要なクエリで使用する列または列のセットを表します。クエリのパフォーマンスを高速化するために、インデックスが関連付けられています。クエリのパフォーマンスは、NULL値を含めることができないため、NOTNULL最適化の恩恵を受けます。
SQLでは、null以外の一意の列(または列のセット)を主キーとして使用できます。ただし、自動インクリメントを気にしない場合は、通常、主キーをUNIQUEでNULLではない任意のインデックスにすることができます。
難しい要件ではありませんが、一部のフレームワークは整数の主キーを最適化します。たとえば、Ruby on Railsは、デフォルトで自動インクリメントの主キーの使用を容易にします。別のものを使用したい場合は、意図的に規則に反する必要があります。
これは、主キーとして整数を使用する必要がある、または使用しない必要があるという意味ではありません。これは、主キーの選択が、基盤となるデータベースシステムとそれに対して実行する予定のクエリによって、またデータの取得に使用する予定のアプリケーションによって部分的に決定されることを意味します。候補キーを検討する際には、これらすべてを考慮に入れる必要があります。
基本的に、主キーは2つの条件を満たす必要があります。null以外の列である必要があり、一意である必要があります。この2つの条件を尊重する任意のタイプの列を主キーとして設定できます。主キーが複数列のものである場合、両方の列がnullでない必要があります。
理論的には他のフィールドを主キーとして使用できますが、整数は管理が最も簡単であり、利用可能な最速のインデックスです。
主キーはunique.intであり、自動インクリメントでその条件を満たすのは簡単です。charにする場合は、データを追加するたびに一意にする方法を作成する必要があります。
いいえ、主キーは整数である必要はありません。それは非常に一般的です。例として、ここに先行ゼロを持つことができるユーザーIDがあるため、varcharフィールドに格納する必要があります。そのフィールドは、Employeeテーブルの主キーとして使用されます。
主キーが整数であるためには、管理が容易であり、そのインデックスがより効果的になります。ご存知のように、キーには自動インデックスが付けられますが、インデックスはバイナリツリーとして格納されます。これは、トラバースの整数に最適です。キーをintにすることに制限はありません。それをvarcharとして宣言することもできます。