2017-01-08 29 views
1

私は現在行を一意に識別することができる複合主キーとして設定5列があるデータベースを設定しています。各行を識別するID列がまだあるはずですか?私は標準であるかどうかはわかりませんが、冗長であるようです。IDプライマリキーの代わりにプライマリキーを使用できますか?

私はSQLAlchemyのを使用しています。コンポジットのプライマリキーとして5つのカラムがある場合、IDカラムがある場合と比べて、CSVファイルからのデータの挿入が大幅に遅くなっていました。それは列のスピードの半分でした(これが関係しているかどうかは分かりません)。

明確にするために:私の質問は、私は、ID列が冗長になるにもかかわらず、複合主キーと一緒にID列を持っているべきですか?

+0

だからあなたはまだUNIQUE、PRIMARYだけではないと識別さ5つの列を持っていましたか? – Strawberry

+0

これらのフィールドはプライマリとしてマークされています。私は主キーがユニークでなければならないという印象を受けています。しかし、私は彼らがそうでなければならないほどユニークであるとマークすることができます。カラムがユニークでプライマリであれば、IDカラムを持たないことに代わる可能性がありますか? – Hidden14

答えて

-1

はい、あなたは常に別のROWIDを持っている(いずれかに基づいて1アップまたはUUIDをint型)必要があります。特に、あなたがmysqlやデータベースDevOpsの他の側面に遭遇したとき、そのIDフィールドを持つことは生命維持装置(例えば、レプリケーションやgaleraクラスタリング)です。また、djangoのようなフレームワークでの作業もずっと簡単になります。

+0

プライマリキーにすることもお勧めしますか?私が(SQLAlchemyで)何をしたいのですが、主キーではなくそのIDを持つことですが、一意にしてauto_incrementにすることです。 – Hidden14

+0

プライマリキーである必要はありませんが、** a **キーとして使用することをお勧めします(クエリーやインデックスサイズの高速化のため)。クラスタインデックス作成のように、主キーであれば簡単にできるように、MySQLのより洗練された面がたくさんありますが、レプリケーションやgaleraクラスタリングのようなものでは必要ありません。 – 2ps

+0

また、「いいえ、状況によっては非常に便利ですが、不要な冗長性をデータセットに追加することもできます」 – Strawberry

関連する問題