我目前正在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>
提前致谢。
答案 0 :(得分:1)
通过协会来看问题可能会有所帮助。订单has many
订单,而产品has one
订单。从那里你可以看出哪些字段应该是你的外键。如果您决定使用ORM(good SO discussion),它将更容易与上述关联进行交互,但是存在与ORM相关的学习曲线。
就选择大小而言,您可能希望保留第三个“查找”表,其中只包含大小信息。例如,有一个包含id
和size
的表,其中id是行ID,大小是“sm”,“med”,“large”等。从那里,有一个产品{{1你有一个大小的id的列。您可能还希望拥有一个将订购商品与订单相关联的表格。因此,您会找到一张包含size
(当然),id
,order_id
,product_id
的表格,如果为每个订购的商品存储尺寸, count
。这样,您可以存储每个订购商品的大小,并知道订单中的哪些商品已设置,哪些商品不符合以下查询:size
。假设MySQL(或我相信的SQLite3),该查询将返回订单ID为?的所有订购商品。 (无论你的标准是什么),计数是有序的,没有设定的大小。您当然希望将ordered_items SELECT product_id from ordered_items WHERE size = '' AND order_id = ?
列设置为可为空。
很抱歉这个漫无边际的答案,如果其中任何一个不清楚,请告诉我,我会在必要时对其进行改进。
在编辑我的答案时,Luke Pittman充实了我试图解释的表格的模型/架构。
回复下面的评论:我从未在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)
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编程来执行此操作。
我不确定这是你想知道的,希望无论如何都有帮助