2017-01-30 18 views
-1

私は基本的に1つのテーブルのプライマリキーを別のテーブルのプライマリキー(および他のいくつかのカラム)にマッピングするマッピングテーブルを持っています。主キーを参照する両方の列には索引があります。主キー(SQLite)の代わりにROWIDに頼ることの短所

マッピングテーブルに_id主キーが必要かどうかと思います。クエリでは、単に_idの代わりにROWIDを参照することができます。 FWIWでは、データベースは作成後に変更されません。

_id列を作成する利点は何ですか?

+0

ディザアダント、althouhgは頼まれていない、無駄なスペースです。行や行にアクセスするためにそれを使用することを想像してみませんか? 1の利点は、カーソルアダプタが_idカラムを必要とする(簡単に回避される)ように、カーソルアダプタを使用する場合に他のものを考えることができないことである。挿入に関して – MikeT

答えて

1

多くの部分クエリが_idと呼ばれるユニークな整数列を返すことを期待しています。

このようなAndroidコンポーネントにマッピングテーブルの内容が表示されない場合(たとえば、両方の名前を検索し、リストビューでname1/name2マッピングを表示している場合)、その必要はありません。

ただし、(almost)すべてのテーブルにはrowidという内部テーブルがあるため、特に必要な場合があるかどうかわからない場合は、明示的に_idと宣言することは害です。

rowidと指定すると、明示的な列がないと、its value might changeが表示されないので、必ずしも良いとは限りません。

+0

潜在的にRUIDを変更するVACUUMに関する優れた点。私はそれを知らなかった。おそらくそれは行の順序を変更しないだろう。私はとにかく願っていません! – techehcet

1

_idがプライマリキーで整数型の場合、rowidのエイリアスになります。

だから大きな違いはありません。

インサート中のROWID含めるためには不便かもしれないけれども:AndroidのフレームワークのINSERT INTO test1(rowid, a, b) VALUES(123, 5, 'hello'); (From sqlite.org)

+0

は、同義語の2つのケースではありませんか? INSERT INTO test1(_id、a、b)... – techehcet

+0

@techehcetはい、 '_id'の場合は、単にINSERT INTOを使用することができますテスト1の価値。列名を指定する必要はありません。 – cshu

+0

ああ、私はそれが同じように動作するだろうと推測しましたが、今はそうではありません! – techehcet

関連する問題