1

我目前正在开发一个 iPad 订购网络应用程序,其中包含不同的衣服。线表将像这样构建:

20-30 种不同的产品将以相同的形式展示。每种产品都有五种不同的尺寸可供选择,每种尺寸都有不同的数量,具体取决于买家想要订购的产品。

我有一个包含以下列的产品表:

id
product_number  
product_name    
product_size    
product_color   
product_description     
product_image   
product_title   
product_category    
product_composition     
product_price_wholesale_dkk     
product_price_wholesale_eur     
product_price_retail_dkk    
product_price_retail_eur    
product_active  
product_detail_one  
product_detail_two  
product_detail_three    
product_xsmall  (activate size for this product? is it avail.)
product_small (activate size for this product? is it avail.)
product_medium (activate size for this product? is it avail.)
product_large (activate size for this product? is it avail.)
product_xlarge (activate size for this product? is it avail.)

和一个包含以下列的订单表:

id 
order_store 
order_reference 
order_mail 
order_payment_details 
order_products 
order_value_total_wholesale_dkk 
order_value_total_retail_dkk 
order_value_total_wholesale_eur 
order_value_total_retail_eur 
order_date 
order_phone 
order_VAT 
order_address 
order_comments 
order_product_numbers 
order_product_pieces 
order_store_country

我的问题是我不知道应该如何设置数据库。当订单确认发送给买家时,每个产品都应该列出每个产品的具体尺寸数量,并且由于可能会或可能不会选择每种尺寸,因此需要确定选择了哪些尺寸以及特定尺寸的数量对于特定的产品。

在我的脚本中选择表格时,我如何才能让系统首先检查已订购了特定产品的所有尺寸,然后检查该尺寸的多少(数据库方面),然后是 PHP 方面的?

提前致谢。

4

3 回答 3

1

通过关联来看待这个问题可能会有所帮助。一个订单has many产品,一个产品has one订单。从那里您可以辨别哪些字段应该是您的外键。如果您决定使用 ORM(良好的 SO 讨论),它将使与上述关联的交互更容易,但与 ORM 相关的学习曲线。

就选择尺寸而言,您可能希望保留第三个“查找”表,其中仅包含尺寸信息。例如,有一个表,id其中sizeid 是行 id,大小是“sm”、“med”、“large”等。从那里,有一个产品size列,您将有一个 id 到一个大小。您可能还需要一个将订购商品与订单相关联的表格。因此,您将有一个带有id(当然)、order_idproduct_id、和的表格count,并且,如果为订购的每件商品存储一个尺寸是有意义的,则size. 这样,您可以存储每个订购项目的大小,并知道订单中的哪些项目已设置,哪些未设置,例如:SELECT product_id from ordered_items WHERE size = '' AND order_id = ?. 假设 MySQL(或者我相信是 SQLite3),该查询将返回所有订单 id 为 ? (无论您的标准是什么),订购的数量,并且没有设定大小。您当然希望将ordered_itemssize列设置为可为空。

很抱歉这个漫无边际的答案,如果有任何不清楚的地方,请告诉我,我会在必要时对其进行改进。

更新:

在编辑我的答案时,Luke Pittman 充实了我试图解释的表格的模型/模式。

更新 2:

回应您下面的评论:我从未在 IOS 上使用过 sqlite3,但是,从这篇带有示例 sqlite3 IOS 5 应用程序的帖子中,似乎在您设置数据库连接后,您只需发出直接的 sqlite 命令。所以创建表命令ordered_items可能看起来像这样:

CREATE TABLE ordered_items(
    id         INTEGER PRIMARY KEY,
    order_id   INTEGER NOT NULL,
    product_id INTEGER NOT NULL,
    quantity   INTEGER DEFAULT 0,
    size       TEXT,
    price      NUMERIC, DEFAULT 0.0,
    updated    DATETIME NOT NULL,
    created    DATETIME DEFAULT current_timestamp
    FOREIGN KEY(order_id) REFERENCES orders(id)
    FOREIGN KEY(product_id) REFERENCES products(id)
)

或者,如果您有一个包含idand的大小表size,您可以通过将大小列更改为:添加另一个外键到大小表中:size_id INTEGER并添加 FK FOREIGN KEY(size_id) REFERENCES sizes(id):。

笔记:

您将需要阅读SQLite3 外键约束,例如第 4.3 节ON UPDATEON DELETE. 这些约束可以帮助您保持数据同步,例如,如果您删除了一个产品,但现有的 order_items 引用了该 product_id,它可以删除它们或将它们设置为某个默认值。根据您的目的,您可能想要也可能不想要,但熟悉外键及其可用约束是个好主意。

于 2012-06-18T18:42:22.943 回答
1

我不确定我是否完全理解您的问题,但是根据我的经验,最好有多个表仅用于订购。例如,您已经有一个“orders”表 - 我将添加另一个表“order_items”并通过关联列链接它们,例如“order_id”。所以理论上你的“order_items”表可以有以下布局:

order_item_id
order_id
product_id
ordered_size
ordered_quantity
ordered_price
...

这有帮助/有意义吗?

于 2012-06-18T18:46:52.350 回答
1

嗯,首先要考虑每种尺寸生产不同的产品,您不需要在每种产品中存储每种尺寸/颜色/型号。如果您像这样设置 products_table:

id
product_number  
product_name    
product_size    
product_color   
product_description 
..
product_group
product_amount_available

对于同一件具有不同颜色的 T 恤,您将有两条不同的记录(例如)。买家在购买seomthing时,需要选择产品,以及他需要的尺寸和他喜欢的颜色。我刚刚添加(但不知道您是否需要)“product_amount_available”字段,它跟踪您拥有的商品数量(因此您可以说“该产品不可用”,以及“product_group”字段,其中跟踪所有相似的物品(仅因尺寸、颜色或您认为的任何东西而异的物品)

订单表看起来不错。

当它到达系统时,它将接收订单,检查 id 并从 products 表中检索信息(可能会减少 'product_amount_available' 的值,以反映已经购买了一些产品),然后创建一个列表使用按该顺序购买的物品,查询如下所示:

select * from products where id in (1, 2, 3, 5, 7)

其中数字是订单中给出的产品的 ID。

说到用户界面,您可以只显示同一组中的一个,以便用户知道该项目存在变化。您可以使用“选择不同”查询或通过一些 PHP 编程来执行此操作。

我不确定这是您想知道的,希望对您有所帮助

于 2012-06-18T18:58:59.017 回答