2015-05-11 62 views
0

我正在制作一个电子商务网络应用程序。以下是我计划的事情。如何构建电子商务应用程序的数据库?

  1. products表只包含几列, id,name,code,SKU_no
  2. meta_information_products表中包含列即, id,product_id [products表的外键],meta_title,meta_keywordsmeta_description
  3. measurement_product表中包含列即, idproduct_idwidthheightweightlength
  4. 而且同样相对于产品的其它表。

所以我的问题是:

  1. 我应当创造不同Model上述每个点和 然后创建products和 相关表One-To-One关系?或者,我应该只创建一个名为Product的模型,并将所有字段声明在一个表product中。
  2. 如果我为Product创建了不同的模型,应该为创建One-To-One关系声明方法的名称,以及与Product模型相同。

例如,请考虑以下几点:我已经创建了两个模型称为ProductMetaInformationProduct,我已经创建了两个表的关系。现在我该怎样name以下方法:

class Product extends Model { 
    ... 

    public function methodName() { 
     $this->belongsTo('App\Product'); 
    } 

    ... 
} 

而对于MetaInformationProduct

class MetaInformationProduct extends Model { 
    ... 

    public function methodName() { 
     $this->hasOne('App\Product'); 
    } 

    ... 
} 

回答

2

我猜Stack Overflow是不是要问这种问题的最佳场所,因为你的问题不必然有正确或错误的答案。关于构建应用程序的数据结构有多种可能的方式,最终归结为个人风格的编码。所以几乎每个开发者都会对你的问题有一个原始的“正确答案”。

这是我的想法。为什么你需要三个独立的表格来存储所有的数据?据我所知,所有三个表格都包含与一个产品相关的一对一数据。这意味着开发中更复杂的模型和关系,更多的资源和更长的生产执行时间。你可以避开所有,如果您创建一个products表具有以下栏目:idcodeSKU_nonametitledescriptionwidthheightlengthweight。这将显着简化您的模型并减少三折查询的次数。

此外,我想我可以在你的表结构中发现一个不好的做法。在您当前的meta_information_products表中,您有一列名为meta_keywords的列。我猜测该字段将包含产品的多个关键字。这否定了关系数据库结构的好处,并会让你头痛不已。相反,我会创建一个products表,如前面的段落中所述,然后创建另一个表,标题为keywords,其中包含以下列:id,keyword。最后,您需要一个关系表,标题为keyword_product,并附带以下列:id,keyword_id,product_id。这使您可以让一个产品具有多个关键字,并且可以将一个关键字分配给多个产品。这是众所周知的“多对多”关系,您可以在Laravel's official documentation中阅读更多关于它的内容。

通常,除了关系表之外,您应该为一个数据库表创建一个模型。所以如果你照我的意思做,那么你需要两种型号:ProductKeyword。对于其内容,最好参考前一段中的链接。

+0

好的..感谢您的输入先生。但为了给您提供信息,还有许多其他与产品相关的信息需要加以考虑。我刚刚展示了这些数据。会有更多的数据来到,比如产品的一般信息,税收,运输信息等等。我想避免每个表格有12列以上。 –

+0

我明白了,但一般的经验法则是,如果信息与产品具有“一对一”关系,则它属于“产品”表。如果关系不是“一对一”,就像关键字一样,并且我认为是“taxation”和“shipping_information”,那么您应该从这里创建一个可用的关系:http://laravel.com/。 docs/4.2/eloquent#relationship –

+1

我会在这里做一个修改:''keyword_product'不需要'id' - 只需将两个外键合并为一个复合外键即可。如果您希望从别处引用此桥表,则只需要单独的主键。 – halfer

相关问题