2012-04-02 93 views
1

我正在爲我家的家裝業務設計工作估算軟件,並且對如何最好地組織我的數據有點疑惑。當然,會有一個用於存儲作業名稱,地址,說明等的「作業」的數據庫表。爲此數據組織我的MySQL數據表的最佳方式是什麼?

每個作業都有一系列與其關聯的度量,這些度量將繼續用於生成估算(發送給潛在客戶)和一張裝載表(用於確定要送到工作現場的材料)。

我的問題是,測量不是全部一致的。這裏有一些代碼用於測試這個概念 - 注意一些測量需要多個陣列(請參閱:水槽&百葉窗),並且許多項目需要的不僅僅是標準鍵(數量,unit_of_measure,description,price)。

這不是什麼祕密,我不是編碼專家,但我在這裏學習。 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 
    ) 
); 
?> 

回答

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 
+0

好的答案! +1 – 2012-04-02 22:32:32

+0

謝謝[克里斯蒂安安東森](http://stackoverflow.com/users/453331/kristian-antonsen)。我決定留意你的建議,並深入MongoDB進行這個項目。到目前爲止,這很好。你是對的 - 它非常適合這個項目。我目前處於僵局,雖然,http://stackoverflow.com/questions/10620716/is-it-possible-to-define-the-key-when-inserting-into-mongodb再次感謝! – Ryan 2012-05-16 17:47:38

0

我的建議是在Drupal 7中使用Views 3和節點關係和節點引用模塊構建網站來完成報告。這就是你想要做的。您創建工作內容類型和項目內容類型。

項目內容類型將包括:

  1. 你的項目名稱(結題)
  2. 描述(節點的身體,如果你想使用說明在所有)
  3. 一個數量字段
  4. 長度的測量字段,寬度的測量字段和深度的測量字段
  5. 測量類型(英尺,米,英寸等使其成爲下拉選擇列表)
  6. 價格每個項目領域(所以如果你有3個門,每個3英尺乘5英尺,每個售價2美元,那麼它可以計算總成本爲6美元(在視圖中使用自定義字段)。

然後,您確保在作業內容類型中有一個節點關係字段,其中可以有無限制的條目(內容類型)。這樣你可以添加任何你想做計算的項目。您可以快速構建包含視圖的報告,估算值,頁面等。您甚至可以爲您的客戶提供一個登錄界面以查看估算值。

查看Drupal.org和drupalize.me。那裏有很多很棒的視頻,文章和資源。此外,如果你能想到它,那麼有人可能已經寫了一個模塊來做到這一點,並在Drupal.org上免費列出來擴展你的網站。

Drupal會照顧數據庫模式。這使您可以將網頁應用程序構建起來。從themeforest.net獲得一些很棒的設計,我建議使用歐米茄960gs基本主題來幫助你走。

+0

我很欣賞周到的回覆,但不用表示感謝。我過去曾使用過drupal進行過類似的項目,花費了整整一年的時間和數千美元來嘗試按照自己的意願去做,我決定從頭開始,在codeigniter的幫助下構建應用程序。我不回頭。 – Ryan 2012-04-02 23:20:17

+0

你必須有一些非常有趣的需求,它不會爲你工作。我們已經使它適用於一些非常複雜的網站。儘管如此,學習使用CodeIgniter或其他框架構建網站(Zend功能也非常強大)是一種有助於使您成爲優秀程序員的經驗。學會一切努力,當你學會簡單的方法時,你會在大多數不瞭解的層面上理解它。 – pthurmond 2012-04-04 17:57:35

+0

我繼續發佈第二個答案,爲您提供更多的想法/幫助。我意識到你已經選擇了一個答案,但我仍然希望有所幫助。 – pthurmond 2012-04-04 18:00:35

0

MySQL是大多數工作的標準工具。實際上谷歌使用它的一個高度修改版本他們稱BigTable允許他們做他們的超快搜索。至於這個項目,使用一些連接表。

這是我推薦的。您有這些表:項目,project_items,measurement_types,item_types

項目表包含項目名稱,項目ID以及整個項目的任何其他有用的項目詳細信息。

project_items表列出了您在上面給出的所有訂單項。它包含以下列:項目名稱,項目描述,數量,重量,長度,寬度,高度,價格,measurement_type_id(指的是measurement_types表),item_type_id

measurement_types表包含測量類型的名稱,描述(如果你需要的話),類型id(自動分配的主鍵)。該表格既用於數據分類,也用於確定從保存的測量中使用哪種計算。這些計算(公式)可以保存在此表的另一列或直接放入您的代碼中。

item_types表具有像水槽,百葉窗,門,絕緣等項目的類型。您需要一個id列和一個名稱列。該表主要用於數據的分類。

您使用這種方法是創建一個項目關聯所有項目,然後將項目添加到它。每件商品都有其尺寸,名稱,描述,數量,類型和價格。根據您選擇的類型,您可以讓javascript在輸入表單上顯示/隱藏正確的測量字段。然後,當您稍後進行計算時,可以使用此類型來了解每個項目使用的公式。

您也可以使用它生成一些好的報告。對於價格,項目故障等。

相關問題