タグ付けされた質問 「foreign-key」

RDBMSプラットフォームで使用される整合性制約の一種で、列の値が別のテーブルのキー値の範囲の1つと確実に一致するようにします。

5
カスケード(ON DELETE / UPDATE)動作の適切な説明
私は毎日スキーマを設計していませんが、そうするとき、私は管理を容易にするためにカスケード更新/削除を正しくセットアップしようとします。カスケードがどのように機能するかは理解していますが、どのテーブルがどのテーブルであるかを思い出すことはできません。 例えば、場合、私は2つのテーブルを持っている- ParentとChildの外部キーと- Childその参照Parentして持っているON DELETE CASCADEカスケードの引き金と記録しているが、カスケードによって削除されます記録し、?私の最初の推測はChild、ParentレコードはChildレコードに依存しているため、レコードが削除されるとレコードが削除されることですParentが、これON DELETEはあいまいです。それは、削除を意味することができParentたときに、レコードをChildレコードが削除されたか、削除意味するかもしれないChild時にレコードをParent削除されます。それでどちらですか? 構文がON PARENT DELETE, CASCADEであったON FOREIGN DELETE, CASCADEか、またはあいまいさを排除するために似たものがあればいいのにと思います。これを覚えているニーモニックはありますか?

3
外部キーを含む行を挿入するにはどうすればよいですか?
PostgreSQL v9.1を使用します。次の表があります。 CREATE TABLE foo ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, type VARCHAR(60) NOT NULL UNIQUE ); CREATE TABLE bar ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, description VARCHAR(40) NOT NULL UNIQUE, foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT ); 最初のテーブルfooが次のように設定されているとします: INSERT INTO foo (type) …

3
mysqlでのカスケードの削除とカスケードの更新の違い
MySQLデータベースに2つのテーブルがありますparent- child。親テーブルに基づいて、子テーブルに外部キー参照を追加しようとしています。間の有意差があるON UPDATE CASCADEとは、ON DELETE CASCADE 私の親テーブル CREATE TABLE parent ( id INT NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB; 私の質問は次のとおりです。次のSQLクエリの違いは何ですか。 ON DELETE CASCADE CREATE TABLE child ( id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ) ENGINE=INNODB; ON UPDATE CASCADE CREATE TABLE …

2
MySQL:テーブルに関連する外部キーを確認する方法
MySqlのテーブルに関連する外部キーを表示する方法は? 背景:外部キー制約を持つテーブルをMySqlにドロップしたかった。私がそれをするとき、私はこれを得る: Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails 他のテーブルを残すテーブルに関連する外部キーを削除するにはどうすればよいですか。

3
コンマで区切られた複数の外部キーを使用しているのは間違っていますか?
2つのテーブルがあります:DealとDealCategories。1つの取引に多くの取引カテゴリを含めることができます。 したがって、適切な方法はDealCategories、次の構造で呼び出されるテーブルを作成することです。 DealCategoryId (PK) DealId (FK) DealCategoryId (FK) ただし、アウトソースチームはDeal次の方法でテーブルに複数のカテゴリを保存しました。 DealId (PK) DealCategory -- In here they store multiple deal ids separated by commas like this: 18,25,32. 彼らがしたことは間違っているように感じますが、なぜこれが正しくないのかを明確に説明する方法がわかりません。 これが間違っていることをどのように説明すればよいですか?それとも私が間違っているのかもしれませんが、これは受け入れられますか?

1
外部キーのインデックスが必要
私はインデックス、プライマリキー、外部キーに苦労しています...そしてそれらすべてを持つ必要があります。 2つのテーブルがある場合、両方ともプライマリキーとして整数を持ちます。 最初のテーブルは、FKを介して2番目のテーブルの主キーを参照します。 両方のテーブルで、ID列に主キーインデックスがあります table1.ref_field2番目のテーブルのPKを参照するFK制約を作成しました(table2.id) にインデックスを追加しました table1.ref_field これは、これらのインデックス、プライマリキー、外部キーを整理する最良の方法ですか?


3
循環外部キー参照を持つことは許容できますか?
外部キーフィールドの2つのテーブル間で循環参照を使用することはできますか? そうでない場合、これらの状況をどのように回避できますか? もしそうなら、どのようにデータを挿入できますか? 以下は、(私の意見では)循環参照が受け入れられる場所の例です。 CREATE TABLE Account ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50) ) CREATE TABLE Contact ( ID INT PRIMARY KEY IDENTITY, Name VARCHAR(50), AccountID INT FOREIGN KEY REFERENCES Account(ID) ) ALTER TABLE Account ADD PrimaryContactID INT FOREIGN KEY REFERENCES Contact(ID)

2
「部分一致インデックス」とは何ですか?
SQL Server 2016で導入された「外部キー参照チェック」クエリプラン演算子について詳しく学習しようとしています。これに関する情報はあまり多くありません。マイクロソフトはここでそれを発表し、私はここでそれについてブログを書きました。new演算子は、254以上の着信外部キー参照を持つ親テーブルから行を削除することで確認できます:dbfiddle link。 オペレーターの詳細には、3つの異なるカウントが表示されます。 外部キー参照カウントは、着信外部キーの数です。 一致するインデックス数は、適切なインデックスのない着信外部キーの数です。更新または削除されたテーブルがその制約に違反しないことを確認するには、子テーブルのスキャンが必要です。 部分一致インデックスカウントが何を表すのかわかりません。 このコンテキストでの部分一致インデックスとは何ですか?次のいずれかを動作させることができませんでした。 フィルター選択されたインデックス 外部キー列をINCLUDEインデックスの列として配置する 2番目のキー列として外部キー列を持つインデックス 複数列の外部キーの単一列インデックス 複数の列の外部キーに対して「インデックス結合」プランを有効にするための複数のカバーインデックスの作成 Dan Guzmanは、インデックスキーの順序が外部キーの列と異なる場合でも、複数の列の外部キーがインデックスと一致する可能性があることを指摘しました。彼のコードは、誰かが部分一致インデックスについてさらに理解するための出発点としてそれを使用できる場合に備えてここにあります。

2
テーブルがそれ自体を参照するときにすべての循環参照を見つけるクエリを作成する方法は?
次のスキーマ(名前が変更されています)がありますが、変更することはできません。 CREATE TABLE MyTable ( Id INT NOT NULL PRIMARY KEY, ParentId INT NOT NULL ); ALTER TABLE MyTable ADD FOREIGN KEY (ParentId) REFERENCES MyTable(Id); つまり、各レコードは別のレコードの子です。レコードParentIdがに等しい場合、そのIdレコードはルートノードと見なされます。 すべての循環参照を検索するクエリを実行したい。たとえば、 INSERT INTO MyTable (Id, ParentId) VALUES (0, 0), (1, 0), (2, 4), (3, 2), (4, 3); クエリは返す必要があります Id | Cycle 2 | 2 …

2
MySQLで「ibfk」は何を表していますか?
phpmyadminでテーブル 'photos'の外部キー制約を作成すると、後で制約の名前が 'photos_ibfk_1'になり、次の制約が 'photos_ibfk_2'などと呼ばれることがわかります。これから、[tablename] _ibfk_constraintIndexがMySQLのDB制約の規則。これは正しいです?IBFKは何の略ですか?

3
特権のある子供と1対多の関係を築く方法は?
各親について、1人または0人の子供が「お気に入り」としてマークされる1対多の関係が必要です。ただし、すべての親が子供を持つわけではありません。(このサイトでは、両親を質問、子供を回答、お気に入りを受け入れられた回答と考えてください。)たとえば、 TableA Id INT PRIMARY KEY TableB Id INT PRIMARY KEY Parent INT NOT NULL FOREIGN KEY REFERENCES TableA.Id 私の見方では、TableAに次の列を追加できます。 FavoriteChild INT NULL FOREIGN KEY REFERENCES TableB.Id または、TableBの次の列: IsFavorite BIT NOT NULL 最初のアプローチの問題は、null許容の外部キーを導入することです。これは、正規化された形式ではないことを理解しています。2番目のアプローチの問題は、多くても1人の子供がお気に入りであることを確認するために、より多くの作業を行う必要があるということです。 どのアプローチを使用するかを決定するには、どのような基準を使用する必要がありますか?または、私が検討していない他のアプローチはありますか? SQL Server 2012を使用しています。

5
ビューを参照する外部キー(ベーステーブルだけでなく)を許可するDBMSはありますか?
Djangoモデリングの質問に触発されました:Djangoの複数の多対多リレーションを使用したデータベースモデリング。db-designは次のようなものです。 CREATE TABLE Book ( BookID INT NOT NULL , BookTitle VARCHAR(200) NOT NULL , PRIMARY KEY (BookID) ) ; CREATE TABLE Tag ( TagID INT NOT NULL , TagName VARCHAR(50) NOT NULL , PRIMARY KEY (TagID) ) ; CREATE TABLE BookTag ( BookID INT NOT NULL , TagID INT …

3
テーブルが主キーをそれ自体の外部キーとして使用する理由
データベースを調べてみると、主キーをそれ自体の外部キーとして使用するテーブルに出会いました。 テーブルは、階層構造を構築するためにそれ自体への外部キーを持つことができますが、主キーを参照するために別の列を使用します。 主キーは一意であるため、この状況では行は自分自身を指すことしかできませんか?これはトートロジーのリンクのようです。なぜなら、もし私が列をすでに持っているなら、列をすでに持っているからです。 これが行われる理由はありますか? 定義の両方の半分に同じテーブルと列が使用されているため、制約はそのように書かれています(ダイアグラムを見るだけではありません)。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.