2013-04-25 91 views
0

與大多數開發人員一樣,我認爲我一直在努力創建最優化的代碼和數據庫模式。PHP極客需要數據庫設計幫助

但是 - 我有感覺,我在工程我的數據庫架構,我想創建。

我有一個網絡應用程序,在很短的時間內,會有很多用戶。用戶以客戶,供應商和系統用戶的形式出現。它在一個可能快速增長的行業。

在之前的模式中,我將這些用戶分隔在不同的表中。

不過,我現在正在考慮讓一張叫做:PEOPLE的表走下去。

會有這些表:

人, 聯繫方式, 公寓

它們通過數據透視表,即相關: PivotContacts PivotResidences。

我的問題是這被認爲是好的/壞的設計。 我在想什麼,通過設計一個簡單的設置。

表格人員將成指數增長,並將保存大量數據 - 其他表格將與其相關。

我真的很歡迎意見。

我的設計可以擴展到10萬條記錄並保持適中的速度。 *最初將以1000條記錄開始,並可能在1年內增至約100,000條。

+0

有多少是「很多」?成千上萬的?數十萬?百萬?十億?您如何評估「好」和「壞」解決方案?你會申請什麼標準?人們投票結束你的問題,因爲你需要意見 - 重新提出問題以將其轉化爲事實問題,例如「我的設計可以擴展到1億條記錄嗎?」或者「我怎樣才能處理使用這種設計的模式變化?」你可能會得到更有用的答案。 – 2013-04-25 09:08:18

+0

將我的設計縮放到10萬記錄並保持適中的速度。 *最初將以1000條記錄開始,並可能在1年內增至約100,000條。 – user2007960 2013-04-25 09:21:26

+0

這個問題可能更適合http://programmers.stackexchange.com。 – 2013-04-25 10:00:35

回答

1

對於可以登錄並且可能被跟蹤(最後一次登錄,失敗的密碼重試)的用戶,最好有一個小表和可能用於寫入的單獨表(區分讀寫數據)。

任何與人有關的表都有收集大量字段的傾向。保留在不同表格中的功能區別保持數據整潔,在供應商表格上的索引更好/可能更優化,以及對供應商數據的更改。 SQL JOIN是可管理的,可以用SQL視圖完成。

因此,我會去一個瘦基表人和1:1表SupplierPeople,SystemUsingPeople等。並考慮發生了哪些變化:表更新,插入和讀取的頻率。

也考慮不得不修改數據庫方案,添加一個字段。

0

如果您只是擔心解決方案的可擴展性,100K記錄不是一個特別大的數字,但需要遵守一些(重要的)假設。

現代數據庫軟件(我假設你要使用MySQL,你說你是一個PHP手)在現代硬件上運行可以輕鬆地處理數據庫與數百萬條記錄,只要你有一個精心設計的表佈局,並可以使用索引。

你的設計 - 連接「人」到「聯繫人」和「住宅」可以使用主/外鍵的加入;這應該可以輕鬆擴展到您的要求。

雖然我猜你需要能夠按名稱,地址,城市或上次聯繫人搜索「人員」日期等這表明你可能需要free text searching - 一旦你得到大量的記錄,使用where name like '%Jones%'可能會很慢。

您可能還想考慮存檔/歷史策略 - 您是否需要存儲某人住所的歷史記錄(以便您可以在下訂單時找到他們居住的地方)?