2

順調に進んでいるのか教えてください。

Mobile Bill個人用のデータベーススキーマと、テーブル用のX定義方法を作成しようとしています。PKFKBill_Detail_Lines

前提条件は次のとおりです。

  1. すべての顧客には固有の関係番号があります。
  2. Bill_no毎月生成されるため、一意になります。
  3. X毎月同じ携帯電話に電話をかけることはできません。
  4. Account_noすべての携帯電話に関連付けられており、変更されません。

スキーマ:

table: Bill_Headers

Relationship_no    - int, NOT NULL , PK
Bill_no            - int, NOT NULL , PK
Bill_date          - varchar(255), NOT NULL
Bill_charges       - int, NOT NULL

table: Bill_Detail_Lines

Account_no    - int, NOT NULL
Bill_no       - int, NOT NULL , FK
Relationship_no - int, NOT NULL, FK
Phone_no      - int, NOT NULL
Total_charges  - int

table: Customers

Relationship_no    - int, NOT NULL, PK
Customer_name      - varchar(255)
Address_line_1     - varchar(255) 
Address_line_2     - varchar(255) 
Address_line_3     - varchar(255) 
City               - varchar(255)
State              - varchar(255)
Country            - varchar(255)
4

4 に答える 4

0

はい、私はすべてが良さそうです。

于 2011-07-13T11:34:07.210 に答える
0

いくつかの間違いがあります:

  1. Realtionship_noとBill_noはintです。エントリが整数の範囲内にあることを確認してください。それらをvarchar()またはchar()と見なす方がよい

  2. Bill_dateはデータ型Dateである必要があります

  3. テーブルBill_Detail_Linesでも、アカウント番号が長いため、Account_noをvarchar()またはchar()として指定することをお勧めします。そして、同じことがPhone_noにも当てはまります。

大きすぎる都市国家と国のvarchar()サイズを255としたことを除いて、Customersテーブルはすべて問題ありません。小さいサイズでも作業できます。

于 2011-07-13T11:47:36.060 に答える
0

私は反対しなければなりません、従われていないいくつかの「基準」があります。はい、デザインは問題ないように見えますが、命名規則は適切ではありません。

まず、テーブル名は単数である必要があります(多くの人がこれに同意しません)。

テーブルに単一のint、PKがある場合、標準ではそれを「ID」と呼びます。したがって、たとえば「SELECTCustomer.IDFROMCustomer」があります。次に、FK列を完全に修飾します。たとえば、Relationship_noではなくBill_HeadersのCustomerIDで、テーブル定義をチェックインして、関連するものを記憶する必要があります。

私も常に心に留めていることは、名前をわかりにくくすることなく、列ヘッダーをできるだけ明確かつ短くすることです。たとえば、Bill_Headersの「Bill_charges」は単に「Charges」である可能性があります。これは、すでにBill_Header(s)にいるためです(<-くそー's')、同じことがDateにも当てはまりますが、dateはもう少し説明的である可能性があります。 CreatedDate、LastUpdatedDateなど...

最後に、同じように、1つで十分な複数の列をハードコーディングすることに注意してください。具体的に私が話しているのは:

Address_line_1 --varchar(255)Address_line_2 --varchar(255)Address_line_3 --varchar(255)

これは後で頭痛につながります。SQLには改行文字を文字列に格納する機能があるため、それらを1つの「アドレス--varchar(8000)」に結合するのが最も簡単です。理想的には、これは別のテーブルにあり、特定の情報を入力できるint "CustomerID --intPKFK"列を使用してCustomer_Addressと呼びます。

誰もが従うべきデータベース設計の単一の方法はないので、これらは単なる提案であることを忘れないでください。これらはベストプラクティスであり、最終的にはあなたが決定します。

于 2011-07-13T11:47:39.337 に答える
0

の主キーを用意することをお勧めしBill_Detail_Linesます。各行が特定の番号に対して行われたすべての呼び出しの合計を表す場合、自然なPKは(Relationship_no, Bill_no, Phone_no)、または多分であるように見え(Relationship_no, Bill_no, Account_no)ます。

代わりに各行が単一の呼び出しを表す場合は、おそらくLine_no列を追加してPKを作成し(Relationship_no, Bill_no, Line_no)ます。

于 2011-07-13T12:55:07.957 に答える