1

住所、会社、連絡先を保持するデータベースの一部を設計しようとしています。私はそれの1つのデザインを持っていましたが、デザインが悪いために「クリーニング」する仕事をしました。

私はプログラミングの角度から来ているので、参照用にJoe CelkoのSQLプログラマースタイルのコピーを購入したので、結局は...

Addresses
street_1_adr varchar(80) primary key
street_2_adr varchar(80)
street_3_adr varchar(80)
zip_code varchar(10) foreign key/primary key > Regions.zip_code

重複を防ぐために、すべてのアドレスが一意であることを確認するためのチェックを行います。

Regions
city varchar(80)
region varchar(80)
zip_code varchar(10) primary key
country_nbr integer foreign key/primary key > Countries.country_nbr

重複を防ぐために、すべてのリージョンが一意であることを確認するためのチェックを行います。

Countries
country_nbr integer primary key
country_nm varchar(80)
country_code char(3)

すべての情報に対して1つのレコードのみが存在することを確認するためのチェックを使用します。

Companies
company_nm varchar(80) primary key
street_1_adr varchar(80) foreign key > Addresses.street_1_adr
zip_code varchar(10) foreign key > Addresses.zip_code
Extra information

指定されたアドレスにその名前の会社が1つだけ存在できることを確認するためのチェック付き

Contacts
company_nm varchar(80) primary key/foreign key > Companies.company_nm
first_nm varchar(80) primary key
last_nm varchar(80) primary key
Extra information

ただし、これは、例として、連絡先に注文をフックする場合、3つのフィールドでそれを行う必要があることを意味します。

これは正しく見えますか、それとも私は完全に要点を見逃しましたか?

4

3 に答える 3

1

まず、主キーに整数値を使用することをお勧めします (mysql の auto_increment の使用も便利な機能である場合)。

別のテーブルで PK (主キー) を FK (外部キー) として使用する場合は、同じデータ型を使用し、名前を保存しないでください。会社の ID を保存し、結合選択を介して名前を取得することもできますが、「連絡先」に company_name を保存しているようです。

あなたの場合、名前は主キー(varchar)であるため問題ありませんが、同じ会社名を2回取得するとどうなりますか(たとえば、マクドナルドには複数の場所があります)

ERP システムは、ほとんどの場合、次のような構造を展開します。

会社 (ID と名前) サイト (ID、名前、FK 会社、住所などの追加情報)

アドレス (ほとんどの場合、サイトで直接参照され、サイトの一部である場合もあります)

地域+国(それらはすべて「基本」データであり、住所テーブルのIDで参照されます)

company テーブルは、ほとんどの場合、会社の ID と名前のみを保存します。サイトテーブル(会社への外部キー関係を持つ)は、「会社」にその住所、法的情報などを与えます。

于 2012-08-01T15:19:57.390 に答える
0

いくつかの考え:

まず、郵便番号は同じ州の複数の都市/町を表すことができます。また、1つの都市に複数の郵便番号を設定できます。

通常、エンティティとは別のアドレステーブルは見つかりません。言い換えれば、あなたの会社のテーブルは完全なアドレスを持っているべきです。

テーブルの主キーは通常、実際の名前とは別の一意の識別子または自動インクリメント番号です。そうすれば、会社や連絡先が名前を変更したり、タイプミスを入力して修正したりした場合でも、変更を他のテーブルにカスケードする必要はありません。

于 2012-08-01T15:14:28.213 に答える
0

多くの住所や連絡先を会社に追加できるようにすることで、設計の将来性を保証したい場合があります。ジャンクション テーブル(http://en.wikipedia.org/wiki/Junction_table)を使用して、多対多の関係を作成します。

Company
--------------
CompanyID (PK)
...

Address
--------------
AddressID (PK)
...

CompanyAddress
--------------
CompanyID (PK)
AddressID (PK)

CompanyAddress テーブルを使用すると、会社ごとに複数の住所を持つことができます。連絡先が会社または住所に関連付けられているかどうかに応じて、連絡先に対しても同じことができます。以下は、多対多の関係を作成する方法について説明している別のリンクです。

http://www.tomjewett.com/dbdesign/dbdesign.php?page=manymany.php

于 2013-08-12T17:47:42.853 に答える