如何为电子商务应用程序构建数据库?

时间:2015-05-11 06:47:34

标签: php mysql laravel laravel-5

我正在制作电子商务网络应用程序。以下是我计划的事情。

  1. products表只包含几列。 idnamecodeSKU_no
  2. meta_information_products包含列的表格。 idproduct_id [[{1}}表格的外键],productsmeta_titlemeta_keywords
  3. meta_description包含列的表格。 measurement_productidproduct_idwidthheightweight
  4. 与产品相关的其他表格类似。
  5. 所以我的问题是:

    1. 我应该为上面的每个点创建不同的length 然后与ModelOne-To-One建立products关系 相关表?或者我应该只创建一个名为Product的模型,并在一个表product中声明所有字段。
    2. 如果我为Product创建了不同的模型,那么为了创建One-To-One关系而声明的方法的名称应该是什么,与Product模型相同。
    3. 例如,请考虑以下内容:我创建了两个名为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');
          }
      
          ...
      }
      

1 个答案:

答案 0 :(得分:2)

我认为Stack Overflow不是提出此类问题的最佳地点,因为您的问题不一定有正确或错误的答案。有多种可能的方法来构建应用程序的数据结构,最终归结为一个人的个人编码风格。因此,几乎每个开发人员都会对您的问题有一个原创的“正确答案”。

这就是我的想法。为什么这些数据需要三个单独的表?据我所知,所有三个表都包含与单个产品一对一的数据。这意味着更复杂的模型和开发关系,更多的资源和更长的生产执行时间。如果您使用以下列创建一个products表,则可以避免所有这些:idcodeSKU_nonametitledescriptionwidthheightlengthweight。这将显着简化您的模型并减少三分之一的查询数量。

另外,我认为我可以在你的表结构中发现一些不好的做法。在当前的meta_information_products表中,您有一个名为meta_keywords的列。我猜这个字段会包含产品的多个关键字。这否定了关系数据库结构的好处,并会让你头疼。相反,我会按照上一段中的描述创建一个products表,然后创建另一个标题为keywords的表,其中包含以下列:idkeyword。最后,您需要一个标题为keyword_product的关系表,其中包含以下列:idkeyword_idproduct_id。这使您可以让一个产品拥有多个关键字,并将一个关键字分配给多个产品。这是一个众所周知的“多对多”关系,您可以在Laravel's official documentation中阅读更多相关信息。

通常,您应该为一个数据库表创建一个模型,但关系表除外。因此,如果您按照我的意愿行事,则需要两个模型:ProductKeyword。对于其内容,最好参考前一段中的链接。