2016-09-23 37 views
1

首先請讓我在我的問題非常精確:自動MySQL表創建[用戶控制]

基本上我學習PHP和MySQL等等工作的一個小項目爲我自己。我正在爲我和我的朋友創建一個網站,在那裏我們可以跟蹤我們欠對方的錢。特別是對於需要在幾個月內返還的大筆款項。因此,我們任何人都可以創建一個「記錄」,以便他們爲此記錄命名,例如'汽車費用',然後他們可以在每次從該大筆借款人收回任何回款時將交易添加到該記錄中。這個「汽車開支」記錄將有一些明顯的欄目,包括交易ID,退貨金額和日期等(稍後回來)。

我知道我一定會需要兩張表: 1)用戶名 - 用戶名和電子郵件地址爲我們所有人存儲; 2)記錄 - 其中保存了我們所有記錄的摘要(但不包括與任何記錄相關的交易詳情)記錄標題,記錄說明,創建時間,上次更新時間,涉及的當事方名稱等。

但是,問題是我不確定系統的第三部分如何工作詳細記錄特定記錄以顯示記錄中的所有交易,例如已經支付了多少錢以及在什麼日期等。

我正在考慮爲用戶創建的每個單獨記錄創建一個新表。 在這張表中,我將擁有交易編號,交易日期,存入/取出,註釋和編輯/刪除任何交易的控制。

在我看來,這種方法的問題(每次創建一個新表)都是爲每個新創建的表創建一個用戶定義的名稱將是一個挑戰,並且執行一個自動查詢來爲每個廣泛的記錄可能非常困難。

請告知,實施系統第三部分的最佳方法是什麼,或者對我的網站的整體數據庫設計有什麼更好的想法。首先十分感謝。

+0

您不需要爲每個記錄創建一個新表,而是爲引用用戶標識和記錄標識的所有記錄創建一個表。 – aynber

+0

謝謝aynber,我認爲從同一個表內的一條記錄中挑選交易會很複雜,並向他們展示哪裏會有如此多的來自所有人的交易 – Ros

+0

只要您使用user_ids和record_ids正確設計表並使用正確的索引,這將不難追蹤。事實上,如果您想要顯示帶有每條記錄鏈接的全部交易,可能會更容易。 – aynber

回答

0

一般來說,你永遠不想在數據庫中有太多的表,當然也不是用戶定義的表。它不僅佔用空間,而且幾乎不可能從中查詢。

您應該做的是爲所有與您列出的列交易創建一個單獨的表,但是附加列保存該交易所屬用戶的ID。這使您可以通過JOIN命令輕鬆進行查詢。

+0

感謝Hex37,我想如果將來有越來越多的用戶(家人和朋友都知道),那麼一張桌子可能會達到它的限制,每個人都有這麼多的交易。 – Ros

+0

您幾乎從不需要擔心SQL的問題;用該腳本語言進行表搜索非常有效。這幾乎是編碼語言的重點。至多,對於數十萬行較大的表,您需要爲最舊的條目創建單獨的歸檔表。 – Hex37

+0

謝謝你的精心製作。 那麼,如何知道表何時已經達到極限,並且應該在歸檔表中進行劃分,我們仍然可以從歸檔表中查詢相同的方式嗎? – Ros

0

您需要創建一個簡單,一致的模式來表示系統中的所有不同元素:用戶和交換。挑選名稱可能會非常棘手,因爲您通常希望避免使用「交易」等保留關鍵字。

爲每次交換貨幣創建一個新表格是絕對錯誤的。關係數據庫的要點是在同一個表中存儲大量記錄,這些記錄可能與其他記錄具有簡單的關係。例如,交易所通過各自的「用戶」記錄標識符引用發件人和收件人。

簡單來說:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, 
    name VARCHAR(255), 
    created_at DATETIME 
); 

CREATE TABLE exchanges (
    id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, 
    amount NUMERIC(12,2) NOT NULL, 
    sender_user_id INT, 
    recipient_user_id INT, 
    created_at DATETIME 
); 

這是一個非常簡單的方法。一個更強大的解決方案使用ledger structure,其中交易所分解爲兩個賬戶之間相關但獨立的轉賬。

現在,如果你想知道的餘額欠款:

SELECT sender_user_id, SUM(amount) FROM exchanges 
    WHERE recipient_user_id=? 
    GROUP BY sender_user_id 

會告訴你在每個收件人的基礎上他們欠了多少錢。只要您將「退款」表示爲發送的負數,那麼這些值應該爲零。分類賬可以更好地完成這項工作。

+0

真的很感謝這樣一個詳細的回覆隊友,你可能會像15-20分鐘完成這個LOL我已經花了數週時間了。我想添加第三個「記錄」(摘要)表的原因是,在用戶的儀表板上,我想向他們展示他們所屬的所有記錄(可能在小卡片上)。 – Ros

+0

作爲一名開發人員,在您的職業生涯中,您將被要求多次創建這樣的分類帳系統。到第十次,它變得日常。第一次非常令人頭暈目眩。簡要記錄通常不同步,對於少量數據,快速SUM()比不可靠簡要記錄更好。 – tadman

+0

不錯的一個!肯定會看到分類帳系統,再次感謝你的時間和恥辱,我不能贊成任何職位作爲新手。 – Ros

相關問題