2016-12-27 12 views
-1

私はSQLテーブルを持っている:外部キーIDに値を自動的に置き換えますか?

TestResult 
- id 
- test_result 
- test_name 

すべてのテストは、TestResultテーブルに約1000の記録を作成し、一つのセッションを行い、私は今ここTEST_NAME重複の多くを持っていることがわかりました。

重複を避けるにはどうしたらよいですか?

TestName 
- name (Primary Key) 

TestResult 
- id (Primary Key) 
- result 
- name_id (Foreign Key) 

しかし、どのように私は、自動的に(テスト名テーブルからID)1に例えば「TEST_1」を置き換えることができます。

私はそれが正しいことだと思う2つのテーブルを作成しますか?

私の1000回のテストサイクルの各ステップでこれを行う必要がありますか? 1.存在する場合はname_idを取得してください。 2.存在しない場合は を作成します。3.以前のIDを使用してTestResultにレコードを追加します。

私はそれが遅すぎると愚かだと思う。ここで良い練習は何ですか?それともそれをそのままにするのは良い考えですか?その後、

+0

、この場合 – Alex

答えて

0

セットアップテーブルが、test_idとともにTEST_NAME列を維持(新FK)、:あなたはまだ複製されているので

UPDATE T SET 
    T.name_id = tn.name 
FROM TestResult T 
INNER JOIN TestName TN on 
    T.test_name = TN.name 
+0

正規化はどんな意味がありません...下記答える見ます 代わりに、私はTestNameを持っていました。(ID intはnullではなく、主キーのIDはname varchar(xxxx)not nullです) TestResultは外部キーとしてIDを持っています。 – Alex

+0

どのように自動的に関連付けますか? – themis

+0

あなたはそうでない場合もあります。このようなケースがありました。まず、あなたのケースでは名前が名前テーブルに存在するかどうかをチェックし、真であれば名前が一致するsidを取得し、testresultそれ以外の場合は、testnameテーブルに新しいテスト名を挿入し、生成されたIDを取得してからtestresultに挿入します。 – Alex

関連する問題