2012-05-13 13 views
1

私のデータベースプロジェクトに6つの主キーを持つことができますか。私はちょうど私のデータベースプロジェクトを作成し始めて、1と2の可能性があるが、確信が持てないことを知っています。何か助けてください!6データベースの主キー

+0

私たちは、多数の属性(とテーブルを持っている http://stackoverflow.com/questions/217945/can-i-have-multiple-primary-keys-in-a-single-table – ravi

答えて

2

はい、テーブルごとに複数のキーを持つことができ、各キーに複数の属性を設定できます。定義による各キーは、既約でなければなりません、つまり、そのキーの一意性を維持するために必要な最小限の列が含まれている必要があります。

あなたのコメントに基づいて、実際には複数のキーではなく複数の属性を持つONEキーをお持ちではないかと疑問に思っています。違いは重要で、あなたはそれを理解する必要があります。本のような質問に答えるために、本を勉強したり、データベース設計の基礎を学ぶことを検討することをお勧めします。

+0

多くのおかげであなたの答えが助けになりました。今は大きな運動ではないので、私は3keysの要求を減らします。もう一度ありがとう:) – niki

+0

キーは、エクササイズのサイズやデータの整合性とは関係ありません。 – sqlvogel

2

あなたが複数のことを言った瞬間、それは合成キーになります。技術的には、1列以上の複合キーを持つことができます。しかし、私は本当にテーブルの複合キーとして6つのキーを持つような要件を満たすようなユースケースが何であるか知りたいです。

+0

の重複を探します時間、システム名、サブシステム名、ピリオドタイプ、デバイス名などからコンポジット主キーが作成されている場合は、最大約100まで)つまり、頻繁に6つ以上。時には痛みを管理するが、私たちの目的のために必要と考える。 – paxdiablo

+0

しかし、私はプライマリキーとして別々の32ビットの文字列を持っているとこれらのフィールドの制約があるので、複雑な複合キーを持つことは、レコードの挿入時間を遅くする可能性があります。 use case..thanks @paxdiablo – raddykrish

+0

お返事ありがとうございました。テーブルで複数のプライマリが必要なのですが、最初にCustomer_numを1つのテーブルに、2つ目のセカンドをitem_numに販売し、item_numをコンポジットとして採用しましたが、これがうまくいくかどうかは分かりませんでした。アイテムを雇用するための3プライマリキーのあるテーブル(そのアイテムは何だと書かれていましたか?)と、もう1つはsales item_numのためのものです。さらに見た目は良くなりますが、このテーブルは3つあります。または私が最初に設定したときにそれを残すか?あなたの時間があるなら、あなたの応答は大いに評価されます。多くの感謝 – niki

2

私は、データベースではなくテーブルに複数の主キーを持つ方法を尋ねようとしていると思います。 (厳密に言えば、これは複合キーになります)。

これは確かに可能です。たとえば、MySQLでの構文は次のとおりです。

CREATE TABLE tbl_name (
    col1 int, 
    col2 int, 
    col3 int, 
    col4 int, 
    col5 int, 
    col6 int, 
    col7 int, 
    col8 int, 
    col9 int, 
    PRIMARY KEY (col1, col2, col3, col4, col5, col6)); 

はあなたが本当にあなたがこれをやっているのか分からない限り、おそらくあなたがやるべきものではない、と述べました私は確かに、大きな複合キーを持つ非常に複雑なビジネスモデルで作業しました。

(例えば、1つのクライアントは、特定の在庫/注文ラインアイテムにsalesOrganizationNumber、salesRepNumber、locationId、styleNumber、styleTypeを表す、例えば複合キーでは5つのフィールドを持つテーブルの多くを持っていた。)

しかし、あなたの質問はとても基本的なので、私はおそらくスキーマを設計する方法についてより詳細なサンプルの質問をする必要があり、おそらくあなたの主キーがはるかに小さくなることがわかるでしょう。

+0

お返事ありがとうございます。はい、テーブル内に複数のプライマリが必要です。最初にCustomer_numを1つのテーブルに設定し、2つ目のセカンドアイテムをitem_numで販売し、item_numをコンポジットとして採用しますが、これがうまくいくかどうかは分かりませんでした。アイテムを雇用するための3プライマリキーのあるテーブル(そのアイテムは何だと書かれていましたか?)と、もう1つはsales item_numのためのものです。さらに見た目は良くなりますが、このテーブルは3つあります。または私が最初に設定したときにそれを残すか?あなたの時間があるなら、あなたの応答は大いに評価されます。多くのお礼ありがとうございます – niki

+0

私はあなたのテーブルの説明で少し失われてきました。私はあなたの質問にあなたのテーブル定義ステートメントの短縮版を置くことをお勧めし、我々はそこからそれを見ることができます。 –

2

データベースには多くのプライマリキーを持つことができます。にはテーブルがあります。テーブルごとに1つのプライマリキーが許可されています。

もちろん、のインデックスはのテーブルごとに複数設定できますが、プライマリキーとは見なされません。

複数の列(好きなだけ多くの列)から主キーを構成することもできますが、それでも1つの主キーであり、複合キーです。

前者は完全なキーが一意である限り、キーの複合部分を複製することができるので、複数の主キーとは大きく異なります。後者(許可されている場合)は、各部分がプライマリキーのプロパティであるため一意である必要があります。

3

複数のプライマリキーとはどういう意味ですか?説明できますか?データベースで複数の主キーを要求している場合は、テーブルごとの主キーを使用できます。同じ表では、2つ以上の主キーは使用できません。

テーブルには1つのプライマリキーと複数のユニークキー(コンポジットキー)があります。

例:-Employeeテーブル

 EmpID(Not null) ManagerID(null) 
    001    001 
    002    002 

ここEMPIDはあなたの主キーとマネージャーIdがあなたの複合キーです。

このように、テーブルの列を一意にすることができます。