首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于laravel 4电子商务应用的关系数据库设计建议

基于laravel 4电子商务应用的关系数据库设计建议
EN

Stack Overflow用户
提问于 2013-08-18 13:17:23
回答 5查看 2K关注 0票数 0

我用Laravel 4开发了一个电子商务应用程序,需要一些建议来解决我的数据库设计问题。

问题:

我的客户有多种不同选择的产品。例如:

Product1 =苹果Iphone 5

颜色选项:黑色

黑色Option1 :16 For

Option1股票: 15

Option1售价:900美元

  1. 黑色的Option2 :32 For Option2股票: 32 Option2售价:1.200美元

  1. 黑色Option3 :128 For Option3股票: 24 Option3售价:1.700美元

颜色选项:白色

  1. 白色Option1 :32 For Option1股票:9 Option1售价:930美元

  1. 白色Option2 :64 For Option2股票: 12 Option2售价:1.270美元

Product2 =摩托罗拉Xoom 9868AB壳

材料选项:皮革

  1. 皮革用Option1 :灰色 Option1股票: 90 Option1售价:12美元

  1. 皮革Option2 :粉红色 Option2股票: 12 Option2售价:12.70美元

材料选项:硬壳

  1. 用于硬壳的Option1 :黑色 Option1股票: 51 Option1售价:32.90美元

我的方法:

正如你在上面看到的,有许多不同类型的产品,股票,价格。我在belongsToMany()中尝试了如下方法:

表:产品

代码语言:javascript
复制
id 
name
created_at
updated_at

表:变体

代码语言:javascript
复制
id
title
parent
created_at
updated_at

表: product_variation

代码语言:javascript
复制
id
products_id
variations_id
stock 
purchase_price 
sales_price
created_at
updated_at

产品模型:

代码语言:javascript
复制
<?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()产品和变种。你将如何处理这个问题?

EN

回答 5

Stack Overflow用户

发布于 2013-08-24 07:27:08

选项表应该是带有Products表的hasAndBelongsToMany()。然后,每只股票,价格应该是hasAndBelongsToMany()到options表。

产品表:

代码语言:javascript
复制
id
product_name
created_at
updated_at

选项表:

代码语言:javascript
复制
id
option_name
created_at
updated_at

option_product表:

代码语言:javascript
复制
id (optional(
option_id
product_id
created_at
updated_at

股票表:

代码语言:javascript
复制
id
count
created_at
updated_at

option_stock表:

代码语言:javascript
复制
id (optional)
option_id
stock_id
created_at
updated_at

价目表:

代码语言:javascript
复制
id
price
created_at
updated_at

option_price表:

代码语言:javascript
复制
id (optional)
option_id
price_id
created_at
updated_at

这将使你有能力有一个选项颜色紫色,可以适用于许多不同的产品,许多不同的价格紫色。而且,查询也不会太糟糕,因为您将能够急切地加载选项和其他表(参见http://laravel.com/docs/eloquent#eager-loading)。

代码语言:javascript
复制
<?php
$products = Product::with(array(
   'options',
   'options.stock',
   'options.prices'
))
->get();

为站点创建产品的管理端可以很容易地完成,但这是一个不同的问题。

票数 1
EN

Stack Overflow用户

发布于 2013-08-21 17:59:09

每个具有多个值的属性都应该有自己的表,其中外键是基本项--例如,基表中可以有iPhone,其中的颜色、内存大小等都是它们自己的表。然后,定价表包含价格和完全描述项目的所有外键(白色,64 of,iPhone)。

您可能需要在进行“数据库规范化”时查找“数据库规范化”。

票数 0
EN

Stack Overflow用户

发布于 2013-08-27 11:33:30

我建议您看看noSQL数据库,比如http://www.couchbase.com/。在我的例子中,有些项目中的某些产品/服务也有类似的问题。Json / object存储帮助了我,我真的很高兴我决定搬到couchbase。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18299505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档