3

5つのテーブルとルックアップテーブルに正規化する必要がある1つの大きなアクセスデータベースがあります。私は正規化の背後にある理論を理解しており、すでにテーブルの外観をスケッチしていますが、データベースを正規化するためにテーブルを変換する方法に迷っています。テーブルアナライザーは、私が望む内訳を提供しません。

4

4 に答える 4

6

テーブルが 1 つしかない場合は、Autonumber フィールドを追加します。

次に、他のテーブルを作成し、元の単一テーブルの Autonumber 値を外部キーとして使用して、それらを元のデータに結合します。

tblPerson がある場合:

  tblPerson
  LastName, FirstName, WorkPhone, HomePhone

それを分解して、PersonID autonumber を追加し、電話テーブルを作成します。

  tblPhone
  PhoneID, PersonID, PhoneNumber, Type

次に、適切なフィールドに tblPerson からのデータを追加します。

  INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
  SELECT tblPerson.PersonID, tblPerson.WorkPhone, "Work"
  FROM tblPerson
  WHERE tblPerson.WorkPhone Is Not Null;

次に、自宅の電話に対して別のクエリを実行します。

  INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
  SELECT tblPerson.PersonID, tblPerson.HomePhone, "Home"
  FROM tblPerson
  WHERE tblPerson.HomePhone Is Not Null;

誰かが UNION クエリを提案しましたが、Jet SQL のサブセレクトとして UNION クエリを使用できないため、保存する必要があります。保存されたクエリは次のようになります。

  SELECT tblPerson.PersonID, tblPerson.WorkPhone, "Work" As Type
  FROM tblPerson
  WHERE tblPerson.WorkPhone Is Not Null
  UNION ALL 
  SELECT tblPerson.PersonID, tblPerson.HomePhone, "Home" As Type
  FROM tblPerson
  WHERE tblPerson.HomePhone Is Not Null;

それを qryPhones として保存した場合は、qryPhones に次の SQL を追加します。

  INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
  SELECT qryPhones.PersonID, qryPhones.WorkPhone, qryPhones.Type
  FROM qryPhones;

明らかに、これは最も単純な例です。すべてのフィールドに対して同じことを行います。重要なのは、すべての派生レコードを元のテーブルに結び付けるソース テーブルの PK 値を作成する必要があることです。

于 2008-11-10T02:50:03.467 に答える
0

クエリ、特にユニオンクエリは解決策を提供できますか?どこに問題がありますか?

于 2008-11-10T00:23:03.373 に答える
0

データベースは、他のデータベースと区別するための特別なことは何もない、非常に典型的なデータベースです。

データベースは、次の 1 つのテーブルで構成されます。

会社名、住所、電話番号など代表的な関連分野の担当者

これは基本的にマーケティング データベースとして機能し、イベントやビジネス上の通信などを追跡する必要があります。関係を維持する方法に迷っています。

于 2008-11-10T00:50:24.503 に答える
0

リレーションシップ ウィンドウでのリレーションシップのことですか? これらは簡単に再構築できます。それともキーフィールドなどのことですか?これは難しい場合があり、中間テーブルが必要になる場合があります。それぞれのケースは異なります。doofledorfer が言ったように、スキーマを投稿すると、より具体的なアドバイスが得られる可能性があります。

于 2008-11-10T01:02:57.973 に答える