-1

我想在 SQLite 中创建一个包含两个表的数据库:客户和订单。每个客户可以有多个订单;(我知道这是一对多的关系)。除了信用卡信息、条款和运输信息(非地址类型信息)之外,每个订单还可以有许多“行项目”(行项目是“项目”的特定订单)。我需要能够找到任何特定客户的所有订单,但不必根据订单找到客户。

到目前为止,这是我对 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)"];

这就是我的 Order 表:

[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

您的订单项设计不正确。

考虑就像一个客户有一个或多个订单一样,每个订单都有一个或多个订单项。因此,您应该有一个用于订单本身的表格和一个用于订单项的单独表格。这两个表之间唯一重复的列应该是唯一标识订单的列(或列)。

在您展示的设计中,这意味着将 PCS、Pattern、Style_Name 和 Price 与 Order_Nbr(如果仅此一项就足以识别订单)或 Cust_ID 和 Order_Nbr 一起拆分到行项目表中。

还要考虑一个客户可能有不同送货地址的订单,送货地址或帐单地址可能会随着时间而改变,送货地址和帐单地址实际上只是同一实体(某种事物)的简单实例,您可以看到您可能需要一个单独的表来保存链接到客户的地址。

您可能还需要考虑其他问题(例如存储信用卡信息的可取性),但这应该可以帮助您入门。

于 2012-05-22T01:57:47.203 回答