1

我正在使用Symfony2Doctrine2开发应用程序。我有许多存储月度数据的表。一般来说,我这样定义实体:

class Entity {
    private $atribute1;
    // ...
    private $atributeN;

    private $year;
    private $month;
    private $value;
}

我有一些场景,其中一个实体存储与另一个实体相关的每月数据。例如:产品 - 订单关联:

class Product {
    private $name;
    // ...
}

class Order {
    /**
     * ORM\ManyToOne(TargetEntity="Product")
     * ...
     */
    private $product;

    private $year;
    private $month;
    private $value;
}

在这些场景中,数据以表格形式输入,用户在其中为每个产品指定一年中 12 个月的相应值。

我的问题是:以下列方式非规范化设计值表(例如订单)不是更好:

class Order {
    /**
     * ORM\ManyToOne(TargetEntity="Product")
     * ...
     */
    private $product;

    private $year;

    // Value for january
    private $month1Value;

    // Value for february
    private $month2Value;

    //...

    // Value for december
    private $month12Value;
}

我们在一条记录(而不是多条记录)中指定产品值。我认为这种设计将简化价值的持久性,最重要的是产品价值的检索。否则,我将需要编写代码来进行转换以显示每个月的产品值。

一些注意事项:

  • 用户/利益相关者只对总值感兴趣(12 个月值的总和)
  • 无需按月间隔使用过滤器进行查询。
  • 产品值必须显示在带有标题的表格中:PRODUCT、JAN VALUE、FEB VALUE、... DEC VALUE。
  • 我知道规范化是基本的,但我也知道我们有时应该在必要时进行非规范化(出于性能原因、设计等)

我正在使用 Symfony2 和 Doctrine,但我的问题与这些框架无关。

4

0 回答 0