我用Laravel 4开发了一个电子商务应用程序,需要一些建议来解决我的数据库设计问题。
问题:
我的客户有多种不同选择的产品。例如:
Product1 =苹果Iphone 5
颜色选项:黑色
黑色Option1 :16 For
Option1股票: 15
Option1售价:900美元
颜色选项:白色
Product2 =摩托罗拉Xoom 9868AB壳
材料选项:皮革
材料选项:硬壳
我的方法:
正如你在上面看到的,有许多不同类型的产品,股票,价格。我在belongsToMany()中尝试了如下方法:
表:产品
id
name
created_at
updated_at表:变体
id
title
parent
created_at
updated_at表: product_variation
id
products_id
variations_id
stock
purchase_price
sales_price
created_at
updated_at产品模型:
<?php
class Products extends Eloquent {
protected $table = 'products';
protected $fillable = array('name');
public function variations() {
return $this->belongsToMany('Variations','product_variation')
->withPivot('purchase_price', 'stock', 'sales_price')
->withTimestamps();
}
}订单模型应该是怎样的?订单将是hasMany()产品和变种。你将如何处理这个问题?
发布于 2013-08-24 07:27:08
选项表应该是带有Products表的hasAndBelongsToMany()。然后,每只股票,价格应该是hasAndBelongsToMany()到options表。
产品表:
id
product_name
created_at
updated_at选项表:
id
option_name
created_at
updated_atoption_product表:
id (optional(
option_id
product_id
created_at
updated_at股票表:
id
count
created_at
updated_atoption_stock表:
id (optional)
option_id
stock_id
created_at
updated_at价目表:
id
price
created_at
updated_atoption_price表:
id (optional)
option_id
price_id
created_at
updated_at这将使你有能力有一个选项颜色紫色,可以适用于许多不同的产品,许多不同的价格紫色。而且,查询也不会太糟糕,因为您将能够急切地加载选项和其他表(参见http://laravel.com/docs/eloquent#eager-loading)。
<?php
$products = Product::with(array(
'options',
'options.stock',
'options.prices'
))
->get();为站点创建产品的管理端可以很容易地完成,但这是一个不同的问题。
发布于 2013-08-21 17:59:09
每个具有多个值的属性都应该有自己的表,其中外键是基本项--例如,基表中可以有iPhone,其中的颜色、内存大小等都是它们自己的表。然后,定价表包含价格和完全描述项目的所有外键(白色,64 of,iPhone)。
您可能需要在进行“数据库规范化”时查找“数据库规范化”。
发布于 2013-08-27 11:33:30
我建议您看看noSQL数据库,比如http://www.couchbase.com/。在我的例子中,有些项目中的某些产品/服务也有类似的问题。Json / object存储帮助了我,我真的很高兴我决定搬到couchbase。
https://stackoverflow.com/questions/18299505
复制相似问题