2016-04-22 1 views
-3

EDITED:なぜ私は2つの 'id'値をSQLコードに持つのだろうかと疑問に思うかもしれません。私は、この質問の下のコメントの中で私の特定のケースではなぜ必要と思われるのかを取り上げました。SQL:列pokemon_master_idにUNIQUEを使用する

CREATE TABLE pokemon_users (
user_id BIGINT NOT NULL AUTO_INCREMENT, 
pokemon_master_id BIGINT NOT NULL UNIQUE, 
message varchar(255), 
PRIMARY KEY (user_id) 
) 

QUESTION 1:テーブルpokemon_usersを作成するための次のSQLコードを考えると

は、インデックスが列pokemon_master_idのために作成されるのでしょうか?

QUESTION 2:もしそうなら、何がPRIMARY KEY(USER_ID)用に作成されたインデックス、およびpokemon_master_idインデックスの違いでしょうか?

+0

本当に同じユーザーの一意の番号が_two_必要ですか? –

+0

@Rick James私の具体的なケースでは、少なくとも技術的な理由から、私が採用した解決策でした。たとえば、Facebook SDK for PHPを使用してFacebookのユーザーIDを取得した後、ウェブサイトで各ユーザーの一意の値を公開する必要があるとします。セキュリティ上の理由から、私はfacebook_idのfacebookを表示するとあなたが悪いことになると考えています。そのため、異なる一意のIDを作成することは当てはまります。 – Webeng

+0

あなたは良いケースを提示します。 –

答えて

2

質問1:はい。ユニークなインデックス。

質問2:プライマリキーuser_idも一意のインデックスです。違いは、1つの主キーのみを持つことができることですが、表には多数の一意の索引があることです。

+1

私の最初のコメントは正しくありませんでした:プライマリインデックス(デフォルトで)が物理ストレージの順序を決定しますが、これは一意のインデックスの場合とは異なります。ただし、ほとんどのSQLバージョンでは、クラスタ化されているインデックスを変更できます。このシナリオでは、クラスタードインデックスによって物理ストレージの順序が決定されます。 – Jaco

+0

MySQLでは、 "engine = InnoDB"で、PRIMARY KEYは常に(デフォルトではなく)一意であり、データとクラスタ化されています。 –

関連する問題