2014-02-22 26 views
1

我正在創建一個管理業務許多方面的項目,但我目前正在編寫發票,估算和信用部分。 我正在使用php和mysqli, 我的這一部分的前端正在進行中,但是在我陷入太深之前,我可以用一點輸入做一個洞。 例如我的發票,估算和信貸數據在我的數據庫中是分開的我有inv和invutes用於發票,est和est的表用於估算和信用和creditlines的信用,每個字段都是相同的,允許通過切換表取決於類型等 我的inv表存儲inv編號,客戶id,客戶詳細信息發票日期淨總額,增值金額和總金額等等,invim存儲invref,產品編號,產品說明,成本價格淨售價,增值稅率,數量等 在這種情況下我在這裏和那裏存儲計算值以確保英國的增值稅遵從。什麼是存儲和查詢發票數據和帳戶數據的最佳方式?

好的,所以當我到達測試階段時,我需要能夠生成報告,例如庫存變動,日常分析中按名義代碼(在循環表中)和利潤和損失(購買賬戶方未開始還是)等等

我覺得我的數據庫結構將允許我查詢和建立從我存儲的信息,但我的問題是我需要在發票點進一步細分這加速報告。例如在創建發票時,我是否也應該將收取的增值稅金額寫入增值稅控制表?如果我這樣做,我也應該寫股票移動到股票管制表,顯示何時,從哪裏等到哪裏等? 這可能會繼續在交易中雙重寫入所有內容。

作爲一個腳註,我的數據庫是爲多業務設計的,因爲每個表中的每行都有一個名爲coid的索引字段,它擁有對該公司唯一的引用,並且我的腳本檢查該公司是否只能訪問其自己的數據。

在此先感謝尼克

+0

你可以使用。 Mysql數據庫,如果你想要你可以備份在一個普通的txt文件 –

回答

0

第一:您永遠不應該將冗餘數據保存在數據庫中。如果可以從原始數據中輕鬆地檢索信息,爲什麼將它保存在緩存列中?這帶來了緩存值可能錯誤的問題!這是沒有人想要的。

記住這一點總是有例外的規則。有些值真的很難計算,因此可能需要緩存這些值。這很可能不是這種情況。

另一個例外是可以命名(有點透支)「數據倉庫」的東西。有例如法律要求長期保存發票。這些數據可能不會再發生變化(這是歷史,所以應該改變什麼?),並且可能需要能夠輸出過去任何時候的特定日期的數據。這個例外可能適用於您的案例!

如果這確實適用於您,我無法根據您提供的信息做出決定。你必須找出自己或提供詳細的信息(但這可能會超過SO問題的框架),但我希望我能給你一些方向想法。

+0

所以你所說的是,如果例如我想在2014年1月1日至2014年1月31日之間的增值稅發票報告,這將是可以接受的來查詢類似inv invat的inv vatamount,其中invdate BETWEEN $ date1 AND $ date2 AND coid = $這個公司id然後在while循環中添加thenm來給出總收益?,((見下一個)) – Nick

+0

好吧,我可以看到這將是有效的,因爲我已經將每個發票的計算值存儲在inv記錄中,但是當我需要通過檢查每行的在這些日期之間的每個發票(可能有數萬個),coid索引將有助於提高速度,但每個零件號碼都需要通過函數運行以匹配產品數據庫,以查看其存儲的零件或一個零件是否添加。儘管我發現mysql在速度上讓我感到驚訝。 – Nick

+0

對不起,但如果不知道你想要做什麼,並且沒有看到任何數據庫模式,就很難順着這裏......你對JOIN和索引有很好的理解嗎?大多數計算可以在關係數據庫中非常高效地完成!我會重複緩存的是應用的增值稅。那麼我就不需要跟蹤變化的增值稅,這是未來不會改變的。我不幸意識到你對股票走勢的看法。有什麼股票與發票或估計有關?不能這樣。 – GhostGambler

相關問題