为这些数据组织MySQL数据表的最佳方法是什么?

时间:2012-04-02 22:09:41

标签: php mysql codeigniter database-design

我正在努力为我家的家居装修业务设计工作估算软件,并对如何最好地整理数据抱有一些难题。当然,对于“工作”来说,这将是一个数据库表。存储工作名称,地址,描述等。

每个作业都有一系列与之相关的测量值,这些测量值将用于生成估算值(发送给潜在客户)和装载单(用于确定要将哪些材料带到作业现场)

我的问题是测量结果并非一致。这里有一些我用来测试这个概念的代码 - 注意一些测量需要多个阵列(参见:gutters& shutters),并且许多项目需要的不仅仅是标准键(数量,unit_of_measure,描述,价格) )。

毫无疑问,我没有编码高手,但我在这里学习。 MySQL是否是这里工作的错误工具?我是否需要一个不同的工具,或者我是否应该完全放弃使用数据库的想法?如果MySQL是答案,我应该如何组织这些数据?

我认为JSON存储在数据库中,但似乎表现不佳。

<?php
    $gable_soffit = array(
    'qty'=>125,
    'uom'=>'ft',
    'desc'=>"Gable Soffit",
    'price'=>6.50,
    'os'=>12,           // inches
    'ss'=>12            // inches
); 

// qty, uom, desc, price, overhang size, soffit size 
$level_soffit = array(
    'qty'=>200,
    'uom'=>'ft',
    'desc'=>"Level Soffit",
    'price'=>6.50,
    'os'=>12,           // inches
    'ss'=>12            // inches
); 

// qty, uom, price,desc
$brick_mold = array(
    'qty'=>15,
    'uom'=>feet,
    'price'=>1.50,
    'desc'=>"Brick Mold"
);

$gable_vents = array(
    'qty'=>5,
    'uom'=>ea,
    'price'=>48.00,
    'desc'=>"Gable Vents"
);

$window_tops = array(
    'qty'=>2,
    'uom'=>ea,
    'price'=>10.00,
    'desc'=>"Window Tops"
);

$openings = array(
    'qty'=>2,
    'uom'=>ea,
    'price'=>50,
    'desc'=>"Openings Capped"
);

$garage_doors = array(
    'qty'=>1,
    'uom'=>ea,
    'price'=>100,
    'desc'=>"Garage Doors Capped"
);

$porch_ceiling = array(
    'qty'=>124,
    'uom'=>sqft,
    'price'=>2.00,
    'desc'=>"Porch Ceiling"
);

$porch_beam = array(
    'qty'=>36,
    'uom'=>ft,
    'price'=>3.60,
    'desc'=>"Porch Beam"
);

$siding = array(
    'qty'=>22,
    'uom'=>sq,
    'price'=>165.00,
    'desc'=>"Siding"
);

$insulation = array(
    'qty'=>22,
    'uom'=>"sq",
    'price'=>30.00,
    'desc'=>"Insulation"
);

$shutters = array(
    array(
        'type'=>'Louvered',
        'length'=>50,
        'width'=>12,
        'color'=>'Brick Red'
    ),
    array(
        'type'=>'Louvered',
        'length'=>50,
        'width'=>12,
        'color'=>'Brick Red'
    ),
    array(
        'type'=>'Raised Panel',
        'length'=>36,
        'width'=>12,
        'color'=>'Black'
    ),
    array(
        'type'=>'Raised Panel',
        'length'=>50,
        'width'=>12,
        'color'=>'Black'
    ),
);

$gutters = array(
    array(
        'qty'=>100,
        'type'=>"5-inch",
        'uom'=>"ft",
        'desc'=>"5-inch Gutter",
        'price'=>3.00
    ),
    array(
        'qty'=>50,
        'type'=>"6-inch",
        'uom'=>"ft",
        'desc'=>"6-inch Gutter",
        'price'=>4.00
    ),
    array(
        'qty'=>10,
        'type'=>"screen",
        'uom'=>"ft",
        'desc'=>"Gutter Screen",
        'price'=>2.00
    ),
    array(
        'qty'=>5,
        'type'=>"guard",
        'uom'=>"ft",
        'desc'=>"Gutter Guard",
        'price'=>5.00
    )
);
?>

3 个答案:

答案 0 :(得分:2)

有趣的答案:如果您想尝试新的东西,可以使用MongoDB - 它是一个面向文档的数据库,带有JSON样式的文档。它使用动态模式,提供简单性和强大功能。它应该完全符合您的需求。

无聊的答案:你可以使用MySQL来创建一个只包含所有产品通用的最基本字段的表。

Products
id    name         quantity   description   price
2     Level Soffit 200        Level Soffit  6.50
5     Porch Beam   36         Porch Beam    3.60

此外,您可以拥有一个包含属性的表格。

Attributes
id    attribute    value
2     Os           12
2     Ss           12
5     Color        Black
5     Color        Brown

答案 1 :(得分:0)

我的建议是在Drupal 7中使用Views 3和Node Relationship and Node Reference模块构建站点来进行报告。这就是你想要做的。您可以创建作业内容类型和项目内容类型。

项目内容类型将包含:

  1. 您的项目名称(节点标题)
  2. 描述(节点主体,如果你想使用描述)
  3. 数量字段
  4. 长度的测量字段,宽度的一个测量字段和深度的测量字段
  5. 测量类型(英尺,米,英寸等,使其成为下拉列表选择列表)
  6. 每件商品的价格字段(因此,如果您有3个门,每个3英尺乘5英尺,每个售价2美元,那么它可以计算总成本为6美元(使用视图中的自定义字段)。
  7. 然后确保在作业内容类型中它具有节点关系字段,该字段可以具有无限的项目条目(内容类型)。这样你可以添加你想要进行计算的任何项目。您可以使用视图快速构建报告,估计,页面等。您甚至可以为您的客户提供登录门户以查看估算值。

    查看Drupal.org和drupalize.me。有很多很棒的视频,文章和资源供你使用。此外,如果您能想到它,那么有人可能已经编写了一个模块来进行此操作并在Drupal.org上免费列出以扩展您的网站。

    Drupal将负责数据库架构。这使您可以自由地进行Web应用程序构建。从themeforest.net获得一些很棒的设计,我建议使用Omega 960gs基本主题来帮助您前进。

答案 2 :(得分:0)

MySQL是大多数工作的标准工具。实际上谷歌使用了一个高度修改的版本,他们称之为BigTable,允许他们进行超高速搜索。至于这个项目,使用一些连接表。

这是我推荐的。你有这些表:project,project_items,measurement_types,item_types

项目表包含项目名称,项目ID以及整个项目的任何其他有用项目详细信息。

project_items表列出了您上面提供的所有订单项。它包含以下列:项目名称,项目描述,数量,重量,长度,宽度,高度,价格,measurement_type_id(指的是measurement_types表),item_type_id

measurement_types表包含测量类型的名称,描述(如果需要),类型ID(自动分配的主键)。此表用于数据分类和用于确定从保存的测量中使用的计算类型。这些计算(公式)可以保存在此表的另一列中,也可以直接放入代码中。

item_types表包含排水沟,百叶窗,门,绝缘等物品类型。您需要一个id列和一个名称列。该表主要用于数据分类。

您使用此方法的方法是创建一个项目以将所有项目关联到,然后将项目添加到项目中。每个项目都有其测量,名称,描述,数量,类型和价格。根据您选择的类型,您可以在输入表单上显示/隐藏正确的测量字段。然后,当您稍后进行计算时,您可以使用此类型来了解每个项目使用的公式。

您还可以使用此生成一些好的报告。对于价格,项目细分等