私はリムジン会社のデータベースを構築しようとしていますが、顧客、運転手、系列会社、受注に関連する住所の正規化の程度につきまとうことがあります。住所のデータベース正規化
基本的にはアフィリエイトやドライバのアドレスは次のようになります。 address_line_1、address_line_2、市、州、郵便番号、国
私の問題は、注文と顧客のアドレスから来ています。 address_line_1、address_line_2、市町村、州、郵便番号、国、address_type_1(自宅、ビジネス)、address_type_2(ピックアップ、ドロップオフ - これは注文にのみ含める必要があります)のようになります。
すべての4つのテーブルの間には、顧客と注文表が異なる2つのフィールドを除いて、アドレスフィールドに類似点があります。
すべてのレコードは一意のIDで識別されることに言及する必要があります。 例:
カスタマーID - 万 - 99,999
注文ID - 10万 - ノーリミット
ドライバーID - A1 - A999(多分)
アフィリエイトID - 千 - 9999
これは単なる例であり、理解するのに多くの時間を費やさないでください。
正常な正規化データベースを作成するには、いくつのアドレステーブルを使用する必要がありますか?
一つのアドレステーブルのすべてのフィールドが含まれてプラスアドレスのタイプ(顧客、注文、アフィリエイト、ドライバ)を記述し、余分な1:現時点で
は、私は私の心の中で3つのアイデアを持っています。これは本当に好きではありません。2つのアドレステーブル。 1つは運転手と系列会社、もう1つは顧客と受注です。 2番目のテーブルの場合、私は持っていて、フィールドは常に顧客のためにNULLになります。これも好きではありません。
3つのアドレステーブル。 1つは運転手および系列会社、1つは顧客、もう1つは注文です。未使用のフィールドは、これが他の2つのフィールドよりも良い選択肢であると思うようになります。
これらの3つのオプションに関するアドバイスはありますか?
ありがとうございます。
UPDATE:
は、テーブルのIDの番号制度についてはまだ気にしないでください。それはほんの一例でした。私はまだ最高のナンバリングシステムを理解する時間がなかった。一度私の住所の問題を整理してしまうと、そのことに気づくでしょう。
マットの答えから、私はドライバーを残して、住所を含むテーブルをアフィリエイトして、顧客と注文表を何とか並べ替えてしまいます。
お客様には、簡単なアクセスのためにプロファイルに保存したい複数のアドレス(家、ビジネス1、ビジネス2、好きな場所など)を持つことができるため、アドレステーブルが必要です。
問題の方程式を少し変えるかもしれない注文表について言及するのを忘れました。 ご注文の際には、PICK-UPとDROP-OFFの場所が必要です。しかし、これは住所(番地)または空港のいずれかになります。これは、番地に関連するフィールドが空港固有のフィールドと一致できないことを意味します。だから、テーブルの中に4つの実体(pu_address、pu_airpot、do_address、do_airport)を持つことは、私のスペースを浪費し、プログラミングの混乱を招くことになると確信しています。 例:ピックアップフィールドの場合は :Address_type、Address_line_1、...、州、国、空港、航空会社、Flt番号、... とピックアップと同じものが落ちます。
私はまだ進む方法についてわからないOrderテーブルにはまだ問題があります。余分なテーブルの有無にかかわらず、住所と空港のピックアップとドロップオフの両方の場所を含める必要があります。
更新 ありがとうございました。まず、別のフィールドにアドレスを格納します。問題はまだ注文のために残る。私はどのタイプのpuについての例を挙げ、リムジンサービスを利用します。住所:123 Main St、Chicago、Il、60640;空港:ORD、AA、123.これらのフィールドを何らかの形でテーブルに統合する必要があります。
オプション: 受注テーブル
ORDER_ID、空港やフィールドをアドレスの両方を持っている必要があります...、ピックアップフィールド、両方の空港アドレスフィールドとドロップオフフィールド。
このオプションはまだ正しいとは言えません。
次は2つの余分なテーブルを持つことです。 1つはアドレス(ピックアップまたはドロップオフを認識するためのフィールドを含む)用です。他の1つは空港のためのものです(puのフィールドまたはdoのフィールドもあります)。
注文記録のみの情報を取得するために2つのクエリを実行する必要があるため、このオプションも嫌いです。最初に注文情報を取得し、ピックアップとドロップオフのタイプ(空港または住所)を知った後、特定のピックアップとドロップオフ情報を取得するために別のクエリを実行します。
だから私は間違っていますか?私は何かが恋しいですか?
はい、確かにいくつかの検証システムを使用して、アドレスが正しいことを確認します。
マット - アドレスの使用方法と使用されているデータの量に基づいて、これを追加します。珍しいアドレスを別のテーブルに分割することをお勧めします。これにより、データベース内のレコードのページサイズに基づいてパフォーマンスが向上する可能性がありますが、これはパフォーマンス上の理由からですが、ここでは適用されません。 – tsells