完全性制限の決定 外部キー外部キーMySQLで主キーを作成する
リレーショナル(表形式)データベースがどのように配置されているかを分解し、リレーショナルデータベースの主な要素は、テーブル、列、文字列、および数学的概念であることを判断しました。関係、属性、およびテープ。 また、ラインはレコードと呼ばれ、列はスピーカーと呼ばれ、レコードと列の交差点はセルと呼ばれます。
文字列の内容と列の名前が1つのデータベース内で一意である必要があることを覚えておくことが重要です。
バッシーのデータ型
テキスト、日付、時刻、イベント、数字のデータ型のデータベースを作成できることを理解することが重要です。 情報の種類に応じて、リレーショナルデータベースは型に分けられます。 データの各タイプ(属性)には独自の指定があります。
- 整数 - 整数からのデータ。
- float - 分数数からのデータ、いわゆる浮動小数点データ。
- char、varchar - テキストデータ型(シンボリック);
- 論理論理データ型(はい/いいえ);
- 日付/時刻 - 一時データ。
これらは、実際にはもっと多くのデータの主な種類です。 さらに、各プログラミング言語には独自のシステム属性(データ型)があります。
主キーとリレーショナルデータベーステーブルの外部キーとは
主キー
上記の、私たちは記憶しました:データベースの各行(録音)は一意であるべきです。 それは一定の値の形式の主キーです、最大はすべてのレコードを識別します。 あなたは違うように判断することができます。 主キー:各レコードに固有の特定の機能のセット。 主キーは主キーと呼ばれます。
主キー(PK) 各テーブルにとって非常に重要です。 なぜ説明します。
- 主キーでは、テーブルに同じレコード(行)を作成できません。
- PK(リレーショナルデータベース用)1つのデータベースのテーブル間の論理接続を提供します。
テーブル間の論理接続では、より詳細に停止する価値があります。
キー外部
外部キー、簡単にFK。 1つのデータベースのテーブル間に明確な論理接続を提供します。
たとえば、2つのテーブルAとVがあります。表A(Shoes)には、主キーがあります。サイズ(色)の表は、名前サイズの列でなければなりません。 この表の「サイズ」は、テーブルINとAの論理接続の外部キーです。
より複雑な例。
2つのデータテーブル:人と電話番号
テーブル:人
表:電話番号
テーブルの電話番号PKは一意です。 FKこのテーブルはPKテーブルの人々です。 電話番号と人々の関係はFK電話テーブルを提供します。 すなわち:
- Hytsevには2つの電話があります。
- Volkovaには2つの電話があります。
- ベルキンには1台の電話があります。
最後に私はそれを追加します データベースマネージャー 技術能力 主キーを押します。
それが私たちが非常に近づいていない気付かしいことです 重要なトピック - プライマリキーと外部キー。 最初のものがほとんどすべて使用されている場合、何らかの理由で2番目の理由は無視されます。 そして無駄に。 外部キーは問題ではありません、それはデータの整合性の本当の助けです。
1.2.5。 主キー
私たちはすでに主要なフィールドについてかなり話していますが、それらを使ったことはありませんでした。 すべてがうまくいった最も興味深いこと。 これは利点であり、多分基盤の欠如 マイクロソフトデータ SQL ServerとMSアクセス。 Paradoxテーブルでは、このトリックは渡されず、キーフィールドの存在なしに、テーブルは読み取り専用です。
ある程度までは、キーは制限事項であり、アナウンスが同様に発生し、制約ステートメントを使用するため、チェックオペレータで表示できます。 この例でこのプロセスを見てみましょう。 これを行うには、2つの "GUID"と "vcname"のテーブルを作成します。 この場合、「GUID」フィールドは主キーとしてインストールされています。
テーブルを作成するGlobally_Unique_Data(GUID UniqueIdentifer uniqueIdentifer uniqueIdentiferの既定のnewId()、vcname varchar(50)、制約PK_GUID主キー(GUID))
ここで最も美味しいのは制約文字列です。 私たちが知っているように キーワード 制限の名前がやがれており、キー広告は例外ではありません。 主キーの命名については、PK_IN名のタイプを使用することをお勧めします。ここで、名前はメインキーになるべきフィールドの名前です。 縮小PKは主キー(主キー)から来ています。
その後、制限で使用したキーワードチェックの代わりに、プライマリキーステートメントの価値がありますが、これは私たちがチェックする必要がないが主キーを示すものです。 括弧内には、キーが1つ、またはキーになるいくつかのフィールドを示します。
キーフィールドには、2行で等しい値がないことを忘れないでください。主キーのこの制限では、一意性を同じに制限します。 つまり、主キーに名前を格納するためのフィールドを作成すると、2つのIVANOVがそのようなテーブルに書き込まれません。 異なる名前。 これにより、主キーの制限が混乱します。 そのため、キーが制約であり、チェックの制限と同様に宣言されています。 しかし、これは主要な鍵と一意性を持つ二次的なものには当てはまりません。
この例では、UniqueIdentifier(GUID)フィールドが主キーとして表示されます。 このフィールドのデフォルト値は、NewID Serverプロシージャの結果です。
注意
テーブル用に作成できる主キーは1つだけです。
例を簡単にするためには、キーとして数値型を使用し、データベースが許可されている場合は、「自動インクリメント」と型がある場合はより良いでしょう(自動的に増減する数)。 MS SQL Serverでは、このフィールドはIDであり、MS Accessでは、これは "Counter"の型のフィールドです。
次の例は、自動ズーム付きの整数フィールドが主キーとして表示される製品テーブルを作成する方法を示しています。
テーブル製品を作成する(ID int Intentity(1,1)、製品varchar(50)、価格Money、数値(10,2)、制約PK_ID主キー(ID))
キーフィールドが数の認識のために保存され、それらと連携するために、ほとんどの場合、ほとんどの場合、そのようなキーの種類です。
主キーは複数の列で構成されています。 次の例では、フィールド "id"と "wases"が主キーを形成するテーブルを作成します。これは、両方のフィールドに一意性インデックスが作成されることを意味します。
テーブルProducts 1(ID Int Intentity(1,1)、製品varchar(50)、価格Money、数値(10,2)、制約PK_ID主キー(ID、[製品名]))
非常に頻繁には、プログラマは整数の形式で鍵フィールドを持つデータベースを作成しますが、特定のフィールドが一意であるべきであることは明らかです。 そして、これらのフィールドからプライマリキーを作成しないのはなぜですか、その問題に対して別々のソリューションを作成する必要はありません。
複数の列の主キーの唯一の欠如は、接続を作成するための問題です。 ここであなたは逃げなければなりません 様々な方法しかし問題はまだ解決されています。 UniqueIdentifier typeフィールドを入力して通信するだけです。 はい、この場合はUniqueIdentifier型の一意の主キーとフィールドがありますが、この冗長性は同じテーブルには限りません。ここで、プライマリキーのUniqueIdentifierと固有の制限が一意でなければならないフィールドにはありません。 何を選ぶべきですか? それは特定のタスクとそれが働くのがより便利なものに依存します。
1.2.6。 外部キー
外部キーは制約制限でもあり、2つのテーブル間の接続を表示します。 2つのテーブルがあるとします。
- 名前 - 人名は、識別子フィールド(キーフィールド)、名前で構成されています。
- Phones - 電話テーブルは、識別子(キーフィールド)、名前テーブルと通信するための外部キーと電話番号を格納するための文字列フィールドで構成される。
一人の人が複数の電話を持っているかもしれないので、データストレージをさまざまなテーブルに分けました。 図1.4は、2つのテーブル間の接続を視覚的に示しています。 接続テーブルをすでに取り組んでいた場合は、これで十分です。 初めての接続について聞く場合は、問題を詳しく見てみましょう。
たとえば、3つの表を取ります。 表1.3に「名前」テーブルの内容を示します。 これは3行だけであり、それぞれ独自のユニークなメインキーがあります。 一意性のために、テーブルを作成するときに、キーをフィールド別に自動的にインクリメントします。
表1.3コンテンツ名テーブル
表1.4。 電話テーブルの内容
表1.4に5つの電話番号が含まれています。 マスターキーフィールドでも一意の主なキーでもあり、これも自動的に強化することができます。 セカンダリキーは、名前テーブルのメインキーとの接続です。 この接続はどのように機能しますか? メインキーとしての名前テーブルのPetrovaは1番のものの価値があります。二次キーの電話テーブルでは、番号1を探して、Petrovの電話番号の数を取得しています。 残りのレコードと同じです。 図1.5に視覚的に通信が見られます。
そのようなデータ記憶は非常に便利です。 関連テーブルを作成する可能性がなかった場合、名前テーブルは1つのフィールドにすべての電話番号をスコアする必要があります。 データの使用、サポート、検索の観点からは不便です。
テーブルにいくつかの名前フィールドを作成できますが、問題は発生します - いくらです。 1人の人は1つの電話しか持てない、そしてたとえば、私は労働者を数えない3です。 たくさんの フィールドはデータの冗長性につながります。
名前テーブル内の各電話機が姓と別の行を開始することは可能ですが、そのようなものは簡単です。 簡単な例名前を入力して簡単に入力する必要がある場合は、いくつかの電話番号を持つPetrov用の複数のレコードを作成できます。 フィールドが10または20の場合は? そのため、外部キーで接続されている2つのテーブルの作成は、リスト1.6に表示されます。
リスト1.6。 外部キーに関連するテーブルを作成する
テーブル名を作成する(IDName int ID(1,1)、vcname varchar(50)、制約PK_GUID主キー(IDNAME)、)テーブル電話の作成(idphone int Identity(1,1)、IDNAME INT、VCPHONE VARCHAR(10)、制約PK_IDPhoneプライマリキー(IDPHONE)、制約FK_IDNAME外部キー(IDNAME)参照名前(IDNAME))
リストの内容を慎重に検討してください。 私たちがすでに考慮されているいくつかの演算子を使用し、追加の例が妨げられていないため、十分に興味深いです。 両方のテーブルの場合、キーフィールドが作成されます。これは最初にタイプINTを持ち、1から1を増やして自動的に増加します。 キーフィールドは、制約制限を使用して主キーによって行われます。
携帯電話テーブルの説明では、最後の行には、外部キー演算子を使用した外部キ\u200b\u200bー宣言、すなわち外部キー宣言が含まれています。 あなたが見ることができるように、これはまた制限であり、もう少し後であなたはなぜあなたはなぜ見るでしょう。 ブラケットでは、テーブルフィールドが指定されています。これは別のテーブルに関連付けられている必要があります。 その後、キーワード参照(リンク)、名前が(名前)と括弧内の表の名前( "IDNAME")があります。 したがって、図1.4に示す債券があります。
注意!
外部キーは、別のテーブルの主キーまたは一意性を制限することしかできません。 つまり、キーワード参照がテーブルの名前と括弧内にある場合は、主キーまたは固有の制限を持つフィールドのみを指定できます。 他のフィールドは指定できません。
これで、データテーブルに記入することができる場合。 以下の3つのコマンドは、表1.3で見た3つの姓を追加します。
名前(vcname)値( "Petrov")の名前( "Petrov")値に挿入( "ivanov")名前( "ivanov")名前(vcname)値( "sidorov")に挿入します。
すでにSQLで動作している場合は、レコードと電話テーブルを追加できます。 これらのコマンドを忘れず、コンパクトディスク上のChapter1ディレクトリのforeign_keys.sqlファイルでそれらを見ることができます。
私たちのタスクは、外部キーの制限的な行動があるものを見るために、それを理解しましょう。 異なるテーブル内の2つのフィールド間の明示的なリンクを示しました。 電話テーブルへの識別子を識別子に追加しようとすると、同じ名前のフィールド(別の名前に名前を付けて)の項目に存在していません(別の名前に名前を付けることができます)。その後、エラーが発生します。 これは2つのテーブル間の接続に違反し、外部キーの制限は通信なしでレコードと存在しません。
制限は有効であり、レコードを変更または削除するときです。 たとえば、Petrovの姓を持つ文字列を削除しようとすると、外部キーの制限のエラーが発生します。 外部関連行のレコードを削除することはできません。 まず、このエントリのすべての電話を削除する必要があり、その後文字列自体をPetrovという名前で削除することが可能になる必要があります。
外部キーを作成している間は、Cascadeの削除または更新カスケードで指定できます。 この場合、名前テーブルからPetriceレコードを削除するか、識別子を変更すると、Petrov文字列に関連付けられているPhonesテーブル内のすべてのエントリが自動的に更新されます。 絶対に。 いいえ、あなたは書く必要があります 大文字:決してそれをしないでください。 すべて削除または手動で変更する必要があります。 ユーザが誤って名前テーブルからエントリを削除した場合、対応する電話機は削除されます。 その場合、その制限的な機能の半分が消えている場合は、その点が外部キーを作成します。 すべてが手動でのみ行われる必要があり、識別子はまったく変更できません。
テーブル自体を削除するには、下位のテーブル、つまり電話でも始まり、その後、メイン名テーブルを削除できます。
最後に、私は2つのテーブルから名前と電話の対応をどのように把握するかを示すでしょう。
vcname、vcphoneの名前、names.idname \u003d phones.idnameの名前から選択します。
私たちはそのような要求についてさらに詳しく説明します。これで、関連する表の電源が表示されるように例を示します。
テーブルには最大253個の外部キーが含まれている場合があります。これは、最も複雑なデータベースを構築するために非常に十分です。 個人的には、私はデータベースを処理しなければなりませんでした。ここで、外部キーの数が1つのテーブルで7を超えなかった。 もっとある場合は、データベースが誤って設計されている可能性がありますが、例外があります。
テーブル自体は、最大253個の外部キーを持つこともできます。 テーブル内の外部キーはそれほど一般的ではありません。ほとんどの場合、テーブル内のほとんどの場合、他のテーブルへの参考数が多数あります。
外部キーは、作成された同じテーブルを参照できます。 たとえば、表1.5に示すように、組織内の投稿の表があります。 表は3つのフィールドで構成されています。主キー、外部キーとPOSTの名前。 どのような組織でも多くの投稿があるかもしれませんが、1つのテーブルではその名前と提出の構造を表示するための1つのテーブルではかなり論理的になります。 これを行うには、外部キーを位置テーブルの主キーに関連付ける必要があります。
表1.5。 内部接続のテーブル
その結果、一般的なディレクタには外部キーゼロ、すなわち この投稿は他のすべての頭にあります。 商業監督と監督 一般的な問題 外部キーは監督全般の行を指しています。 これは、これら2つの投稿が直接監督に従属することを意味します。 等。
SQLクエリの形式ですべてを作成する方法を確認しましょう。
テーブル位置を作成する(IDPosition Int Identity(1,1)、IDParentPosition Int、vcname varchar(30)、制約PK_IDPosition主キー(IDPosition)、制約FK_IDParentPosition外部キー(IDParenPosition)参照位置
ご覧のとおり、外部キーは単に作成するのと同じテーブルを参照します。 CDでは、CD1ディレクトリのディレクトリでは、このテーブルの作成例で、このテーブルの作成例で、データと表示投稿に記入し、その送信を考慮してください。 次の章では、そのようなテーブルをより詳細に作業することを検討します。
1対1に関係
これまでのところ、メインデータテーブルの1行が関連テーブルの1行に対応すると、古典的な接続を見ました。 この接続は1対多と呼ばれます。 しかし、他の接続があり、もう1つのエントリメインテーブルが別のエントリに接続されている場合、もう1つを1つずつ見てください。 実装するには、両方のテーブルの主キーを接続するのに十分です。 主キーを繰り返すことができないので、両方のテーブルで1行だけを接続できます。
次の例では、主キー間のリンクを持つ2つのテーブルを作成します。
テーブル名を作成する(IDName UniqueIdentifer既定IDENTIER NEWID()、VCNAME VARCHAR(50)、制約PK_GUID主キー(IDNAME))テーブル電話の作成(IDPhone UniqueIdentifier既定のID()、VCPhone VARCHAR(10)、制約PK_IDPhone主キー(IDPONE)、制約FK_IDPhone外部キー(ID電話)参照名(IDNAME))
外部キーは、いずれかのテーブルにのみ必要です。 接続が1になるので、それを作成するテーブルは関係ありません。
多くの人に
あるテーブルからの多くのレコードが別のテーブルからの多くのエントリに対応する場合、最も難しい接続は多くのことです。 これを実装するには、2つのテーブルが小さく、3つのテーブルが必要です。
まず、接続を多くの人に使用できる場合は理解する必要がありますか? 2つのテーブルがあるとします:家の住民のリストと電話番号のリスト。 1つのアパートでは複数の数があるかもしれません、それは1つの名前が2つの電話に属することができるということです。 それは多くの接続を結びます。 一方、同じアパートでは、2つの家族があるかもしれません(所有者の電話を使う共同アパートまたは単なるアパートメント)は、電話と居住者との間の接続も1対多であることを意味します。 そして最も難しい選択肢は、共同アパートの2つの電話です。 この場合、両客室にはアパートのいくつかの住民があります。 したがって、「多くの」ファミリが「多くの」電話を使用できることがわかります(接続は多数です)。
多くの人への接続を実現する方法? 一見すると、リレーショナルモデルでは不可能です。 10年前長い間、さまざまなオプションを探していました。結果として、私は単にデータの冗長性であふ\u200b\u200bれていた1つのテーブルを作成しました。 しかし、一度、私は一つのタスクを得ました、それに優れた解決策が地表から状態から出てくれてありがとう - あなたはアパートと電話の2つのテーブルを作成し、それらの中の主キーのみを実装する必要があります。 外部キーはこの表には必要ありません。 しかし、テーブル間の接続は3番目のバインディングテーブルを通過する必要があります。 一見すると難しく、明確ではありませんが、この方法でもう一度起動すると、この解決策のすべての力が表示されます。
表1.6および1.7にそれぞれ姓と電話機のテーブルの例を示します。 表1.8にバインダー表を示します。
表1.6。 テーブルの名前
表1.7。 テーブルフォン
表1.8。 テーブルフォン
多くの人の多くのデータ検索ロジックになることを確認しましょう。 Ivanovに属するすべての電話を見つける必要があるとします。 Ivanovの主キーは1です。接続テーブルのすべてのレコードが1に等しいことを参照してください。これらはレコード1と2になります。これらのレコードでは、「電話との通信」フィールド、識別子1と2が見つかったので、Ivanovは1行目と2行目にある電話テーブルから部屋に属します。
今すぐフィードバックを決定します - 電話番号567575677にアクセスできるのは誰であるかを定義します。電話テーブルのこの番号はキー3を持っています3.バインダーテーブルのすべてのエントリを探しています。これらは4と5のレコードであり、「名前との通信」フィールドにはそれぞれ値2と3が含まれています。 あなたが今姓の表を見るならば、あなたは数字2と3のPetrovとSidorovに見るでしょう。 だから、それは電話番号567575677を使用するこれら2つの住民です。
3つのテーブルをすべて表示し、どの電話番号が居住者に属しているかと逆にどの電話番号を理解していることを確認してください。 この接続が表示された場合は、3つのコペックのように、それが簡単で、プロジェクトにすばやく実装できることがわかります。
テーブル名の作成(IDName UniqueIdentifer既定のIDNAME UniqueIdentifer既定:)、vcname varchar(50)、制約PK_GUIDプライマリキー(IDNAME))テーブルの電話機の作成(IDPhone UniqueIdentiferデフォルトNewID()、VCPhone VARCHAR(10)、Constraint PK_IDPhone主キー(IDPHONE))テーブルLINKTABLE(IDLinkTable UniqueIdentifierのデフォルトのnewId()、IDName UniqueIdentifier、IDNAME UniqueIdentifier、IDNideIdentifier、IDLinkTable)、Constraint FK_IDPhone外部キー(ID電話)参照電話番号(IDPHONE)、制約FK_IDNAME外部キー(IDNAME) )
バインダーテーブルには、名前と電話のテーブルと1つの主キーにバインドする2つの外部キーがあり、レコードの一意性が保証されます。
主キーとして、このタスクを解決するのに便利なので、私はGUIDフィールドを選択しました。 その事実は、レコードを2つのテーブルに挿入する必要があり、どちらの場合も同じキーを指定する必要があります。 GUID値を生成することができ、両方のテーブルにデータを挿入するときに使用できます。
キーとして使用して自動的に増分されたフィールドとして使用できますが、この場合、問題は解決するのはもう少し難しく、問題を解決するのは不便です。 たとえば、電話番号を追加するには、最初にテーブルに適切な文字列を挿入してから、行が割り当てられたキーを確認するために、すでに接続があります。
上に この段階 私たちはテーブルの作成に限られています、そしてセクション2.8ではこのトピックに戻って、関連する表の操作方法を学び、学ぶでしょう。 2つのテーブルのみがこの方式に参加しているため、接続を1に接続し、1から多数のコネクションの操作はあまり異なりません。 拘束力のあるテーブルのために多くの複雑なコミュニケーションであるため、セクション2.27では別途検討します。
主キー - 主キー、制限を使用すると、テーブル内の各エントリを明確に識別できます。 SQL..
主キーOracle。
主キー( 主キー)テーブルまたはその列を制限することができます。 この制限は、独自の制限と同様に機能します。 しかし、外部キーとの使用方法における主キーと列の一意性の違いを考慮に入れるべきです。 主キーはNULL値を許可できません。 つまり、固有の制限の制限のある分野、制限で使用される分野と同様にすることを意味します。 主キーNULLではなく適用されている必要があります。
主キーOracle。。 例1の例1。
テーブルの作成例 SQL. 制限付き 主キー:
学生。
(kod_stud整数NULLではありません 主キー,
FAM CHAR(30)NOT NULLユニーク
Adres Char(50)、
ボール10進数);
最高の場所制限 主キー フィールド(またはフィールド内)では、一意の回線識別子を形成し、一意の論理(電話番号やスナメ項など)でなければならないフィールドの固有の制限(電話番号やスナメ項など)を保存し、行を識別しないようにします。 制限 主キー 値の固有の組み合わせを構成する多数のフィールドにも適用できます。
主キーOracle。。 例2の例2。
テーブルを作成します 学生。
(FAM CHAR(30)NOT NULL、
im char(30)NULLではありません
Adres Char(50)、
主キー (FAM、IM))。
主キーMySQL.
主キーSQL。 / ミーズル。 例3の例3。
テーブルを作成します 人 (
p_id int null、
LastName varchar(255)NOT NULL、
FirstName Varchar(255)、
アドレスvarchar(255)、
City Varchar(255)、
主キー (p_id))。
主キーSQL / MySQL。 例4の例4。
テーブルを作成します `ad_packages`(
`id` int(111)NULL NULL AUTO_INCREMENT、
`title` varchar(132)NOT NULLデフォルト"、
`price`がfloat nullのデフォルト '0'、
`type` varchar(22)null default"、
`c_type` enum( 'cash'、 'points'、 'rur')NOT NULLのデフォルト '現金'、
主キー ( `id`)
);
主キーSQL / MySQL。 例5の例5。
テーブルを作成する(Gamestat`)(
`id` int(11)null auto_increment、
`game` varchar(10)NOT NULLのデフォルト 'TUZ'、
`stavok` int(11)NULLのデフォルト '0'、
`usd` float nullデフォルト '0'、
`rur` float nullデフォルト '0'、
`point` float nullのデフォルト '0'、
`bank_usd` decimal(12,2)nullのデフォルト '0.00'
`bank_rur` decimal(12,2)NOT NULLのデフォルト '0.00'、
`bank_point` decimal(12,2)NULLのデフォルト '0.00'
主キー( `ID`)
);
この記事では、キーに関するすべてを考慮しようとします。 SQL: 何が必要で、鍵の制限事項。 一般的に:それは退屈になるでしょう
今日の計画は次のとおりです。
リレーショナルデータベースの理論で - キー これらは、データベーステーブル内のデータの整合性と可用性をサポートする特定の制限を確立するために作成されたエンティティです。
話したら シンプルな言葉その後キーのキー sQL. 追加の列機能を指定するために作成されました。 それが一意性であるか、列が別のテーブル(外部キー)を参照するかどうか。
主キー
データベース内の列は、主キーによって一意にマークされている必要があります。 主キーまたは主キーとは、主キースピーカーのテーブル値を繰り返すことができないことを意味します。 この方法では この鍵 これを恐れずにテーブル内のエントリを明確に識別できます。列の値が繰り返されます。 すぐに例:ユーザーテーブルがあるとしましょう。 このテーブルにはフィールドがあります。フルネーム、生年月日、電話。 ユーザーを識別する方法 名前と電話のようなパラメータは信頼できません。 結局のところ、私たちは同じ姓だけでなく、名前を付けるだけでなく、いくつかのユーザーを持つことができます。 電話機は時間によって異なりますが、電話番号を持つユーザーはデータベースにいる人のためのものではないかもしれません。
これはこれに、主キーを思い付きました。 一意の識別子を算用したら、それがそれです。 に ミーズル その例では、フィールドからすべての例を実行します。 自動増加。 これが主キーであることを指定しないかどうかを指定できません。
レコードを作成するときに主キーとしてマークされたフィールドが空でできないことを言及する価値がないと思います。
外部キー( 外部キー。)
もう少しありますか 外部キー (外部キー。)。 参考とも呼ばれます。 それ自体の間でテーブルにバインドする必要があります。
上の写真を見ると、外部キーは靴テーブルのフィールドプロバイダになります。 ルールとして、テーブルを作成するときに、一意の整数値の列を設定します。 テーブルを作成したときの方法 サプライヤー。
カラム supplier_id 各レコードに固有のものです。 その価値と復讐列を実行します プロバイダー テーブル 履物。すぐにお勧めし、外部キーがどのように作成されるかについて考察します。
外部キーを作成します
テーブルシューズの作成(Shoes_ID int auto_increment主キー、タイトルテキスト、サイズint、価格フロート、カウントINT、varchar(30)、Supplier Int、Supplier int、Suppliers)参照サプライヤー(supparter_id))。上記の例から見られるように、外部キーを作成するための構文は非常に簡単です。 テーブルにフィールドを追加し、そのフィールドを外部キーとして宣言して参照先を指定する必要があります。 に この場合 フィールド サプライヤー フィールドを参照します supplier_id テーブル サプライヤー。
コンポジットキー (複合キー)
複合キーに関しては、テーブル内の複数の主キーです。 したがって、創造 コンポジットキー。このキーに組み合わされるフィールドを介して録音の一意性がチェックされます。
テーブルに挿入されたときにいくつかのフィールドに一度に一度に1回の単一性をチェックする必要がある場合の状況があります。 つまり、複合キーが発明されているものです。 たとえば、簡単なテーブルを作成します。 コンポジットキー。 構文を表示するには:
テーブルテストを作成する(field_1 int、field_2 text、field_3 bigint、主キー(field_1、field_3))。
上記の例では、2つのフィールドが複合キーに組み合わされ、テーブル内にはこれらの同一のフィールドでは記録されません。
これはすべてkeysの懸念です SQL。 これは、単一のデータベースを構成するようにテーブルを組み合わせる方法を詳細に考慮した記事のための手動の準備です。
それは: SQL Server(2016年から)Base. sQLデータ SQL AzureParallelデータウェアハウスAzureDARALLAlデータ
SQL Server Management StudioまたはTransact-SQL環境を使用して、SQL Server 2016の主キーを決定できます。 主キーを作成するには、自動的に適切な一意のクラスタ化されたインデックスまたは非ロックインデックスを作成します。
このセクションで
仕事を始める前に、次の手順に従ってください。
制限事項
安全性
以下の主キーを作成する
水曜日のSQL Server Management Studio.
制限事項
テーブルには1つの主キー制限が1つだけです。
すべての主キー制限列にはNOT NULL記号が必要です。 NULL値の許容許容範囲が指定されていない場合は、主キーの制限を持つすべての列に対して、NOT NULL機能がインストールされています。
安全性
権限
生き物 新しい表 主キーには、データベース内のCREATE TABLEの解像度と、テーブルが作成されている回路のALTER PERMISSIOSSが必要です。
既存の表に主キーを作成するには、テーブルへの変更許可が必要です。
主キーを作成する
オブジェクトブラウザで、をクリックします 右クリック 一意性制限を追加する必要があるマウステーブル、および選択 コンストラクタ.
に デザイナーテーブルデータベース列のRow Selectorをクリックして主キーとして決定します。 複数の列を選択するには、Ctrlキーを押しながら、残りの列のロウセレクタをクリックします。
列行選択ツールを右クリックしてコマンドを選択します。 主キーを設定します.
キーソース列は、対応する行セレクタの主キーシンボルによって識別されます。
主キーが複数の列で構成されている場合、1つの列には重複した値がある場合がありますが、主キーのすべての列の値のすべての組み合わせは一意である必要があります。
複合キーを決定するとき、主キーの列の順序は、表に示されている列の順序と一致します。 ただし、主キーを作成した後は、列の順序を変更できます。 詳細については、セクションを参照してください。
既存のテーブルに主キーを作成する
に オブジェクトブラウザ
クエリを作成します.
演奏する。 この例では、TransactionID列に主キーを作成します。
AdventureWorks2012を使用してください。 行く。 ALTER TABLE PRODUCTIONS.TRANSActionHistoryArchive Add Constraint PK_TransactionHistoryArchive_TransactionID主キークラスタ化(TransactionID)。 行く。
新しいテーブルで主キーを作成します
に オブジェクトブラウザデータベースエンジンコンポーネントのコンポーネントインスタンスに接続します。
標準パネルで、項目を選択します クエリを作成します.
次の例をクエリウィンドウにコピーしてをクリックします。 演奏する。 この例では、テーブルが作成され、TransactionID列の主キーが決定されます。
AdventureWorks2012を使用してください。 行く。 Table Production.TransactionHistoryArchive1を作成する(transactionID int Not NULL、制約PK_TransactionHistoryArchive_TransactionID主キークラスタ化(TransactionID))。 行く。
詳細については、セクションを参照してください。