私は少し初心者です。私はプライマリキーの周りを外来のキーとして捉えられません。私にとっては、外部キーはテーブルの2つの行を接続することを意味します。したがって、それは、picture
テーブルの外部キーとして、例えば、user
テーブルのusername
を使用するための論理的な意味になるだろう。これは、その行の画像が指定されたユーザーに属していることを意味します。しかし、一般的なプラクティスでは、無意味な数字をプライマリIDとして使用することが好まれます。さらに、外部キーは、主キーを参照する必要があり/参照する必要があります。プライマリキーがわからない場合は、別のユニークな列(この場合はusername
)を知っていますが、プライマリキーを別のMySQLステートメントから取得する方法、または外部キーポイントを非プライマリキーにする方法はありますか?MySQL非プライマリの外部キー
答えて
さらに外部キーが/主キーを参照してください必要があります。プライマリキーがわからないのですが、別のユニークな列(この場合はユーザー名)を知っていれば、別のMySQLステートメントからプライマリキーを取得する方法と、外部キーポイントを非プライマリキーにする方法はありますか?
CREATE TABLE user (userid INT NOT NULL , username VARCHAR(20) NOT NULL --- other fields , PRIMARY KEY (userid) , UNIQUE KEY (username) ) ENGINE = InnoDB ; CREATE TABLE picture (pictureid INT NOT NULL , username VARCHAR(20) --- other fields , PRIMARY KEY (pictureid) , FOREIGN KEY (username) REFERENCES user(username) ) ENGINE = InnoDB ;
をそして他のテーブル内のすべての外部キーがこのユニークなキー(
username
)を参照している場合は、何がある:
はいあなたは別の一意のキーを持っている場合、あなたはそれを参照する外部キーを持つことはできません意味のないIDを持つことを指す。それをドロップしてusername
のテーブルのPRIMARY KEY
にすることができます。
(編集:) が最初のプライマリまたはユニークなインデックスは、デフォルトでは、テーブルのクラスタ化インデックスを作られているので、それを基準として使用されていない場合でも、InnoDBテーブルの自動インクリメントの主キーを持ついくつかのポイントがあります。プライマリcharフィールドにはINSERT
とUPDATE
ステートメントのパフォーマンスの欠点がありますが、SELECT
クエリではパフォーマンスが向上します。何を使用するかに関する議論については
、サロゲート(意味のない、自動生成)、または自然キー、および対象の異なるビューが、これを読んで: surrogate-vs-natural-business-keys
あなたは主キーに「意味のない」値を使用する理由は、「意味のある」の値は随時変更する傾向があるということです。ユーザーの場合は
の名前が変更され、あなたが行くと、他のテーブルに多くの行を変更する必要がありますする必要はありません。これは、意味のないID(通常は自動インクリメント)を与えるのが通常の方法です。を、私は、この情報に感謝しますが、可能性がありおそらくプライマリIDを外部キーとして使用する方法を追加しますか? – puk
私が最初にそれらの列で作成したインデックスがある場合は、任意の列(または列)への外部キーポイントを持つことができると思います。
は
CREATE INDEX user_username_idx ON user(username);
を実行してから外部キーが動作するはず作成してみてください。
私はこれを試しましたが、うまくいきませんでした。だれかがインデックスを追加して外部キーとして参照しようとしましたか? – Rajesh
- 1. doctrineのプライマリ/外部キーの関係
- 2. ステートメント/プライマリと外部キーの結合
- 3. プライマリと外部キーについて
- 4. CakePHPヘルプ:変数とプライマリ/外部キー
- 5. mysql外部キー
- 6. 別のテーブルの外部キーであるプライマリ・キー列を削除
- 7. mysqlの外部キー
- 8. のMySQL:外部キー
- 9. mySQLの外部キー
- 10. 外部キーmysql php
- 11. 外部キーのmysqlの
- 12. MySQLワークベンチの外部キー
- 13. 外部キーの問題MySQL
- 14. MySQLの外部キー関係
- 15. のmySQL:エラー外部キー
- 16. Mysqlデータベース間の外部キー
- 17. プライマリ/外部キーの追加と他のテーブルの参照
- 18. ノーマライズとプライマリ/外部キーのSQL Server 2008 R2の
- 19. ビューとテーブル間のプライマリと外部キーのマッピング
- 20. Azure AppサービスのEasy Tableのプライマリ/外部キー
- 21. プライマリに1つの一意の外部キーを許可する
- 22. クエリのパフォーマンスとプライマリと外部キーの比較
- 23. 外部複合キーのMysql複合キー
- 24. MS SQL Server 2012の自動インクリメント&プライマリ/外部キー
- 25. SQL Server 2008:テーブルのプライマリ/外部キーを確認しますか?
- 26. プライマリと外部キーに関するデータベーステーブルの作成
- 27. ERDでプライマリと外部のキーを取得するには
- 28. エンティティコアFluentAPI - プライマリおよび外部キーとしてのID
- 29. MySQLドロップフィールド。外部キーerrorno 150
- 30. 外部キーとMySQLエラー
私はダミーのプライマリキーを持っている唯一の理由は、誰もがそれが素晴らしいアイデアだと言っているからです。ただし、外部キーとして使用する主キーを見つけて検索する必要があるため、挿入が非常に面倒です。 – puk