此产品数据库的最佳布局?

时间:2013-01-21 19:56:32

标签: mysql database product

我正在为一个拥有相当复杂的定价方案的客户建立一个电子商务网站。我选择使用foxycart,并且所有产品价格都动态地来自数据库。这样做的原因是每个客户对单个产品的产品和购买的不同数量的产品的价格不同。我正在努力建立最灵活的系统,但我不确定什么是最好的。

首先我会有一个customer_table 用:

id, name, city, state, country, zip, phone

接下来是我正在尝试决定如何构建东西的地方。目前,有18种左右的独特产品,其中一些产品具有不同的尺寸/体积,每种产品每个尺寸都有独特的价格断点。因此,一种产品的价格低于4,另一种低于10​​,另一种低于19,另一种高于20,同一产品的价格不同,但价格不同。这些价格突破点也不是所有产品的标准。有些可能在3,9,12处有价格突破,而其他可能有少于5和大于5.最好的方法可以考虑只是建立一个包含50列的表,列出所有这些。没有数据重复,因为它会根据cust_id而改变,所以它似乎正常化了我,但我想知道你们都在想什么。此表可能如下所示:

id, cust_id, product1_lt4, product1_lt20, product1_gt20, product2_lt6, product2_lt12, product2_lt60, product2_gt60, etc...

当lt和gt明显小于/大于。它变得如此巨大。

我试图尽可能多地分解表格,包括Category_table,Sub Category_table,product_table,size_table和price table,但我想不出任何输入数据的好方法而不需要加载空字段或50多个表。

如果这是有道理的,请告诉我。如果需要,我可以提供更多细节。我想我的主要问题是,选择1是不是一个坏主意?

3 个答案:

答案 0 :(得分:1)

完整的数据库应该是:

产品信息

categories 
categories_description 
product_type_layout * 
product_types * 
product_types_to_category * 
products * 
products_attributes * 
products_attributes_download * 
products_description * 
products_discount_quantity * 
products_options * 
products_options_types 
products_options_values * 
products_options_values_to_products_options * 
products_to_categories * 
manufacturers 
manufacturers_info 
meta_tags_products_description 
meta_tags_categories_description 
reviews * 
reviews_description * 

销售/特殊定价明细

featured 
salemaker_sales * 
specials * 

产品类型额外信息

media_clips 
media_manager 
media_to_products 
media_types 
music_genre 
product_music_extra * 
record_artists * 
record_artists_info * 
record_company * 
record_company_info * 

CMS /内容管理

ezpages 

客户信息

address_book 
customers 
customers_info 

客户存储购物车

customers_basket 
customers_basket_attributes 

客户互动

email_archive 
group_pricing 
products_notifications 

订单历史

files_uploaded 
orders * 
orders_products * 
orders_products_attributes * 
orders_products_download * 
orders_status_history 
orders_total * 

paypal * 
paypal_payment_status_history * 
paypal_session * 

贝™

paypal * 
paypal_payment_status 
paypal_payment_status_history * 
paypal_session * 
paypal_testing * 

管理审核跟踪

admin_activity_log 
authorizenet 
banners_history 
counter 
counter_history * 
coupon_email_track 
coupon_redeem_track 
email_archive 

优惠券和礼券配置/跟踪

coupon_email_track 
coupon_gv_customer 
coupon_gv_queue 
coupon_redeem_track 
coupon_restrict 
coupons 
coupons_description 

系统配置

admin 
address_format 
configuration * 
configuration_group 
layout_boxes 
template_select * 
currencies 
languages 

税/区配置

geo_zones 
tax_classes * 
tax_rates * 
zones_to_geo_zones * 
zones * 
countries 

其他

banners 
banners_history 
get_terms_to_filter 
newsletters 
project_version * 
project_version_history * 
query_builder * 
db_cache 
sessions * 
upgrade_exceptions * 
whos_online * 

了解更多信息,请参阅here

答案 1 :(得分:0)

“我想我的主要问题是,选择1是不是一个坏主意?”

是的,这是一个坏主意。您已将业务逻辑直接绑定到模式中,这意味着如果有人后来决定需要少于6个项目(例如)的价格中断,则必须手动修改模式和应用程序以支持它。

如果没有关于您的要求和数据结构的更多信息,很难为您建议架构,但作为一般指导原则,我建议您在产品表和定价表之间使用多对多链接。这样的结构允许您相对容易地添加新的价格类别,并避免选项1实现的脆弱模式。

答案 2 :(得分:0)

我可能会这样:

Customers
id,first_name,etc...

Categories
id,name,etc...

Sub_Categories
id,name

Category_Sub_Categories
category_id,sub_category_id

Product_Categories
product_id,category_id

Product_Sub_Categories
product_id,sub_category_id

Products
id,name

Customer_Product_Prices
customer_id,product_id,quantity,price

然后,您可以假设与产品相关的最低数量是任何小于的数量,并且最大数量价格是任何数量

我相信这将是构建具有您想要实现的复杂性的最灵活和可扩展的方式