私は従業員データベース、emp_personテーブル(名、国籍、性別、... .etc情報)とemp_contractテーブル(hiredate、contract type、salary ...)をビルドしています。プライマリキーを割り当てる場所が不思議でした。これはベストプラクティスですか?assign Pk and FK
答えて
デザインでは、Emp_Idという名前の代理キー(AutoNumber)を作成し、emp_personテーブルの主キーとして定義します。 emp_contractテーブルにデータを格納するときに、同じキーを使用します。
数値列に作成される主キーは、ネストの練習です。レコードを一意に識別できる列がない場合は、テーブルに代理キーを作成します。
私はルールのカップルに従ってください。
- 主キーは必要な限り小さくする必要があります。数値型は よりもはるかにコンパクトな形式で格納されているため、数値型 を使用することをお勧めします。これは、ほとんどの主キーが外国の のキーであり、複数のインデックスで使用されているためです。 キーを小さくするほど、インデックスは小さくなり、キャッシュ内のページは少なくなります。 を使用します。
- 主キーは決して変更しないでください。主キーを更新する場合は、常に である必要があります。これは、 が複数のインデックスで使用され、外部キーとして使用される可能性が最も高いためです。 単一プライマリキーを更新すると、変更の波及効果が発生する可能性があります。
サロゲートとナチュラルキーについては、上記のルールを参照してください。ナチュラルキーが小さくて決して変更されない場合、ナチュラルキーはプライマリキーとして使用できます。ナチュラルキーが大きいか、または変更される可能性が高い場合は、サロゲートキーを使用します。プライマリキーがない場合、私はまだサロゲートキーを作成しています。これは、スキーマにテーブルを追加し、pkを配置することを経験が示しているからです。
アマンダ、あなたのコメントのための
ソリューションは、「私の問題は、私はすでにnvarchar型のPK(SQL Server 2008の)古い従業員表を持っていると私は他の2つのテーブルを作成したいですが、数にPKを変更した後とそれは既にFKの関係を持つ多くのテーブルに接続されています。私はPK char(シリアル番号部分)から部分文字列を取り、それが一意で新しいテーブルのPKにすることを計画しています...しかし、同じユニークなシリアル番号で、プライマリキーを更新し、すべてのFKテーブルへの更新をカスケードしたいのですが... PRIMARY KEY制約のアイソレーションがあります。
新しいテーブルを作成するそれに古いものと新しいpkの値が入っています。今まで何も壊れていないことを確認するために、両方の列に一意の制約を置いてください。
このキーをPKまたはFKとして使用するすべてのテーブルの制約を無効にします。
すべてのテーブルに対して更新を実行して、古い値を新しい値に変更します。
PKを有効にしてから、FKを有効にします。
- 1. スカラーPKプロパティのないEF PK FKマッピング
- 2. ASP.NETメンバーシッププロバイダを拡張すると、PK == FK == OK?
- 3. PK/FKで特定のテーブルフィールドを新しいテーブルに移動
- 4. レガシーDBスキーマとコンポジットFKとPKを使用したHibernate
- 5. SQL Server PKとFKは常に等しい値
- 6. HQLを使用してPK/FK列に参加しない方法は?
- 7. PK FK関係の後、複数のテーブルから行を再帰的にコピー
- 8. VM-Assignロードバランシングアルゴリズム
- 9. FK
- 10. デリゲートの "assign"と "retain"
- 11. SQL ServerのPKの問題
- 12. データベースPK-FKは将来の有効期限のエントリ用に設計されていますか?
- 13. PHP "Assign by reference"奇妙
- 14. 休止状態:複数のFK関係
- 15. FK質問
- 16. 取得PK値
- 17. C#DataTableとPK
- 18. クエリオプティマイザとFK制約
- 19. FK制約は、MySQL
- 20. マッピングFK関係は
- 21. HibernateとPKなし
- 22. 化合物pkを使用した場合の化合物pk
- 23. lm()$ assign:それは何ですか?
- 24. C#Linq Assign GroupByの匿名タイプ
- 25. RSpec 2ビュー仕様のassignの使用
- 26. SELECT * FROMテーブル、FKの名前に置き換えます
- 27. データベース設計:FKはNULLです - 良いか悪いですか?
- 28. SubSonic "Or" AND "AND"
- 29. PowerDesigner(データベース設計) - 相互参照テーブルにPKを追加する
- 30. mySQL - WHERE AND AND OR
偉大な答え - 私は社会的セキュリティ番号/納税者IDのように、ユニークで変わらないものをプライマリキーとして使用しようとするアプリを見たことがありますが、間違ったSSNや誰かが間違って入力し、変更する必要があります。 – nvuono
この場合、autonumberフィールドとtimestampフィールドもあるため、2つのレコードを同じにすることはできません。 –
ありがとうございます4私の問題は、私はすでに古い従業員のテーブルをnvarchar PK(SQL Server 2008)と私は他の2つのテーブルを作成したいが、番号にPKを変更した後、それはすでにFG関係。私はそれがユニークであるPKのchar(シリアル番号部分)から部分文字列を取り、それを新しいテーブルのPKにするつもりです。私はほぼ12のレコードが同じユニークなシリアル番号と重複していると私はプライマリキーを更新し、すべてのFKテーブルに更新をカスケードしたい...しかし、私はプライマリキーの制約の孤立を持っています。助けてください – Amanda