web-dev-qa-db-ja.com

テーブルに複数の主キーを含めることはできますか?

私は今非常に混乱していますが、もしそうならどのようにテーブルが2つの主キーを持つことができるかという質問に関する問題をよりよく理解するのを手伝うことができますか?そして、それはなぜですか?

17
Pankaj Kumar

いいえ1つのテーブルに2つの主キーを持つことはできませんが、複合主キーを持つことはできます

主キーは行のIDであり、行に対して2つのIDを使用することはできません。

14
zzlalani

テーブルは多くのキーを持つことができますが、慣例により、テーブルごとに1つのキーのみが「プライマリ」キーとして指定されます。通常、これは、そのテーブル内の情報の「優先」識別子と見なされるキー、またはテーブルの設計者が他の特定の目的のために選択したキーです。

原則として、「プライマリ」と指定されたキーに関連付ける機能またはプロパティは、他のキーにも関連付けることができます。したがって、多くの実用的な目的で、必要に応じて複数の「プライマリ」キーを指定できますが、特定のDBMSの制限が許す場合のみです。

データのリレーショナルモデルでは、すべてのキーは等しく、プライマリキーに特別な機能はありません(実際には、プライマリキーという用語のリレーショナル使用は、元々anyを参照していました。 all 1つのキーだけでなく、関係のキー)。残念ながら、多くのDBMSはこの原則を尊重せず、特定の機能をテーブルの唯一のキーに制限する場合があり、どのキーをプライマリとして指定するかを選択する必要があります。したがって、あなたの質問に対する答えは、原則としてYESでなければなりません。特定のSQL DBMSでそれを実現する必要がある場合、実際の答えは次のとおりです。

4
nvogel

主キーは1つしか持てません-すべて主キーになる可能性のあるキーの範囲は、候補キーと呼ばれます。選択するのは主キーで、他の代替キーは一意の制約/インデックスとして実装できます。

したがって、主キーは1つしかありませんが、一意の制約/インデックスを使用して、他のフィールド/フィールドの組み合わせのプライマリティを保証できます。

3
Andrew

いいえ、テーブルには主キーのみがあります。ただし、その主キーには複数のフィールドを含めることができます。テーブルを作成し、主キーに言及するときは、必要な列を複数追加できます。例えば

CREATE TABLE table_name(col1データ型、col2データ型、col3データ型、col4データ型、プライマリキー(col1、col2、col3))

この方法で、単一のテーブルに主キーを追加できます

3
Bha15

テーブルでindexesを作成できます。これにより、内部データベースエンジンは、影響を受ける列(1対多)の内容を処理して、簡単に検索できます。エンジンはその時点ですでにフィールドのコンテンツを評価およびソートしているため、値の一意性も簡単に保証できます。したがって、indexは1行から多くの行にまたがることができ、オプションで一意にすることもできます。

主キーは理論的にはオプションですが、実際には必須ですが、特定のインデックスにマーカーを付けて、テーブル内の特定の行を参照する永遠にユニークな方法であることを示します。通常は、GUIDまたはSQL Serverのidentity)のいずれかです。主キー自体は特定のテーブルに対して一意であり、定義により一意の制約を強制します、オプションで複数の行にまたがることができます(spannedインデックス/キー)。

たとえば、両方とも外部キーであり、一緒にテーブルのプライマリキー/インデックスを形成する2つのフィールドのみを含むジャンクションテーブルを作成できます。

1

CREATE TABLE track(col1 numeric(10)、col2 numeric(10)、col3 numeric(10)、col4 numeric(10)、PRIMARY KEY(col1、col2、col3))

0
harish

以下のように複数の列を主キーとして定義できないため

create table test1 (col1 numeric(10) primary key, col2 numeric(10) primary key 
,col3 numeric(10) primary key, col4 numeric(10)) 

複合キーである必要があります。はい。いくつかのビジネス要件を解決するために、主キーとして複数の列を使用できます。主キーにより、列の値が重複することはありません。テーブルではNullになります。

以下は、複合主キーを持つテーブルを作成するSQLです

CREATE TABLE track( 
col1 numeric(10) , col2 numeric(10) ,col3 numeric(10) primary key, col4 numeric(10), 
PRIMARY KEY (col1,col2,col3) 
)
0
Nagaraj S

FOREIGN KEYは、1つのテーブルのフィールド(またはフィールドのコレクション)で、別のテーブルのPRIMARY KEYを参照できます。

0
Arm Avi

いいえ。テーブルで複数のプライマリキーを使用することはできません。複数のフィールドを組み合わせた複合キーがあるためです。

0
Vaibhav Parmar