自然主キーと代理主キーの戦いについて多くの記事を読みました。ユーザーがコンテンツを作成したテーブルのレコードを識別するために代理キーを使用することに同意します。
しかし、テーブルをサポートする場合、何を使用すればよいですか?
たとえば、架空のテーブル「orderStates」では。このテーブルの値は編集できません(ユーザーはこの値を挿入、変更、または削除できません)。
自然キーを使用する場合、次のデータがあります。
TABLE ORDERSTATES
{ID: "NEW", NAME: "New"}
{ID: "MANAGEMENT" NAME: "Management"}
{ID: "SHIPPED" NAME: "Shipped"}
代理キーを使用すると、次のデータが得られます。
TABLE ORDERSTATES
{ID: 1 CODE: "NEW", NAME: "New"}
{ID: 2 CODE: "MANAGEMENT" NAME: "Management"}
{ID: 3 CODE: "SHIPPED" NAME: "Shipped"}
次に例を見てみましょう。ユーザーが新しい注文を入力します。
自然キーを使用する場合、コードで次のように記述できます。
newOrder.StateOrderId = "NEW";
代わりに、追加の手順があるたびに代理キーを使用します。
stateOrderId_NEW = .... I retrieve the id corresponding to the recod code "NEW"
newOrder.StateOrderId = stateOrderId_NEW;
注文を新しいステータスに移動する必要があるたびに、同じことが起こります。
それで、この場合、一方のキータイプともう一方のキータイプを選択する理由は何ですか?