2012-04-30 2 views
0

Oracle SQLの新機能であり、これは非常に単純な質問だと私は推測しますが、直接的な答えは見つかりません。私は自分のデータベースに従業員テーブルを持っています。列の1つは、従業員が居住する国を示す「emp_state」です。私はまた、「顧客」テーブルと「オフィス」テーブルを持っています。どちらも「州」フィールドを持っています。私のデータベースの冗長データの量を減らすために、対応するIDを持つすべての状態を持つ「状態」テーブルを作成しました。この表を他の表でも言及したいと思います。私のテーブルを設定するとき、関連するテーブルの外来キーとして何を定義すればよいですか?それは 'State_id'か 'State_name'か?ユーザーに無意味な状態IDではなく、実行されているすべてのクエリに状態名を表示します。Oracle SQLの外部キーを使用してテキスト・データを表示する

ありがとうございました!

答えて

2
  • state_idを使用してください。もしINT上のjoinよりもずっと速ければ、VARCHARである。
  • 名前が必要な場合は、JOINをテーブルに追加してください。
  • 状態名を更新する予定がある場合は、すべての関連テーブルを更新する必要があります。 IDがあれば、名前列を更新するだけです。
  • おそらく同じ状態名を2回も持っていないでしょう。しかし、もしあなたがすれば?それからあなたはそれを変更しなければならないか、または州の名前にいくつかの奇妙な番号を追加する必要があります。

だから、一番下の行:常に新しいSTATE_IDで既存の状態の列に置き換える

+1

IDを使用します。元のデータがどのように「汚れているか」に応じて、これは数回繰り返すことがあります。 – Randy

+0

真。しかし、varchar forenkeyの代わりにint idを持つことの利点は、不都合な価値がある – Arion

+1

ああ - 私は全く同意する...(したがってupvote)私はちょうどあなたが新しい(int)列を古い(varchar)col - 元の値を更新する前にID値を更新する... – Randy

関連する問題