为订单表设置数据库

时间:2012-06-18 18:32:40

标签: php database structure

我目前正在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智能化? / p>

提前致谢。

3 个答案:

答案 0 :(得分:1)

通过协会来看问题可能会有所帮助。订单has many订单,而产品has one订单。从那里你可以看出哪些字段应该是你的外键。如果您决定使用ORM(good SO discussion),它将更容易与上述关联进行交互,但是存在与ORM相关的学习曲线。

就选择大小而言,您可能希望保留第三个“查找”表,其中只包含大小信息。例如,有一个包含idsize的表,其中id是行ID,大小是“sm”,“med”,“large”等。从那里,有一个产品{{1你有一个大小的id的列。您可能还希望拥有一个将订购商品与订单相关联的表格。因此,您会找到一张包含size(当然),idorder_idproduct_id的表格,如果为每个订购的商品存储尺寸, count。这样,您可以存储每个订购商品的大小,并知道订单中的哪些商品已设置,哪些商品不符合以下查询:size。假设MySQL(或我相信的SQLite3),该查询将返回订单ID为?的所有订购商品。 (无论你的标准是什么),计数是有序的,没有设定的大小。您当然希望将ordered_items SELECT product_id from ordered_items WHERE size = '' AND order_id = ?列设置为可为空。

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

更新

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

更新2:

回复下面的评论:我从未在IOS上使用sqlite3,但是从this post with an example sqlite3 IOS 5 application开始,在设置数据库连接之后,您只需发出直接的sqlite命令。因此size的create table命令看起来像这样:

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) ) id,则可以通过将大小列更改为size来添加另一个外键到大小表,并添加FK:size_id INTEGER

注意:

您需要阅读SQLite3 Foreign Key Constraints,例如第4.3节FOREIGN KEY(size_id) REFERENCES sizes(id)ON UPDATE。这些约束可以帮助您保持数据同步,以便,例如,如果您删除了产品但现有的order_items引用了该product_id,则可以删除它们或将它们设置为默认值。您可能会或可能不希望这取决于您的目的,但熟悉外键及其可用约束是个好主意。

答案 1 :(得分:1)

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

order_item_id
order_id
product_id
ordered_size
ordered_quantity
ordered_price
...

这有帮助/有意义吗?

答案 2 :(得分:1)

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

id
product_number  
product_name    
product_size    
product_color   
product_description 
..
product_group
product_amount_available

对于具有不同颜色的相同T恤,您将有两个不同的记录(例如)。当买家购买东西时,需要选择产品,以及他需要的尺寸和他喜欢的颜色。我刚刚添加(但不知道你是否需要它)'product_amount_available'字段,它跟踪你拥有的项目数量(所以你可以说“这个产品不可用”)和'product_group'字段,跟踪所有类似的项目(仅根据您的大小,颜色或您认为的任何内容而变化的项目)

订单表看起来不错。

当它到达系统时,它将收到订单,检查ID并从产品表中检索信息(可能会减少'product_amount_available'的值,以反映某些产品已被购买),然后创建一个列表,其中包含按该顺序购买的商品,其查询类似于:

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

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

说到用户界面,您可以只显示同一组中的一个,这样用户就会知道该项目有变化。您可以使用“select distinct”查询或某些PHP编程来执行此操作。

我不确定这是你想知道的,希望无论如何都有帮助