-1

Customer と Orders の 2 つのテーブルを持つ SQLite でデータベースを作成したいと考えています。各顧客は多くの注文を持つことができます。(1 対多の関係であることは理解しています)。各注文には、クレジット カード情報、条件、および配送情報 (非住所タイプの情報) に加えて、多くの「品目」(品目とは「品目」の特定の注文) を含めることができます。特定の顧客のすべての注文を検索する機能が必要ですが、注文に基づいて顧客を検索する必要はありません。

これは、これまでの Customer テーブルの内容です。

[db executeUpdate:@"CREATE TABLE IF NOT EXISTS CustData ("
 "BUS_NAME TEXT PRIMARY KEY NOT NULL, "
 "EMAIL TEXT, "
 "PHONE TEXT, "
 "SHOP_NAME TEXT, "
 "SHOP_ADDR1 TEXT, "
 "SHOP_ADDR2 TEXT, "
 "SHOP_CITY_STATE TEXT, "
 "SHOP_ZIP TEXT, "
 "SHIP_NAME TEXT, "
 "SHIP_ADDR1 TEXT, "
 "SHIP_ADDR2 TEXT, "
 "SHIP_CITY_STATE TEXT, "
 "SHIP_ZIP TEXT, "
 "NOTES TEXT)"];

これは私が注文テーブルのために持っているものです:

[db executeUpdate:@"CREATE TABLE Orders ("
 "CUST_ID TEXT REFERENCES CustData, "
 "ORDER_NBR TEXT, "
 "SALES_NAME TEXT, "
 "CREDIT_CARD TEXT, "
 "EXP_DATE TEXT, "
 "CID TEXT, "
 "NOTES TEXT, "
 "PCS INTEGER, "
 "PATTERN TEXT, "
 "STYLE_NAME TEXT, "
 "PRICE DECIMAL)" ];

PCS、Pattern、Style_Name、および Price は「品目」と見なされます。

私の質問は次のとおりです。「項目」に関してこれらのテーブルを定義する正しい方法はありますか、それともより良い方法はありますか?

4

1 に答える 1

2

広告申込情報のデザインが正しくありません。

1 人の顧客が 1 つ以上の注文を持っているように、各注文には 1 つ以上の品目があると考えてください。したがって、注文自体用に 1 つのテーブルを用意し、品目用に別のテーブルを用意する必要があります。これらの 2 つのテーブル間で繰り返される列は、注文を一意に識別する列 (または複数の列) のみである必要があります。

あなたが示した設計では、これは、PCS、Pattern、Style_Name、および Price を、Order_Nbr (注文を識別するのに十分な場合) または Cust_ID および Order_Nbr のいずれかと一緒に明細項目テーブルに分割することを意味します。

また、1 人の顧客が異なる配送先住所の注文をしている可能性があること、配送先住所または請求先住所が時間の経過とともに変化する可能性があること、および配送先住所と請求先住所が実際には同じエンティティ (一種のもの) の単なるインスタンスであることを考慮してください。顧客にリンクされたアドレスを保持するために別のテーブルが必要になる場合があります。

他にも考慮すべき問題 (クレジット カード情報を保存することの妥当性など) はありますが、これで開始できます。

于 2012-05-22T01:57:47.203 に答える