我有3個不同的事務表,它們看起來非常相似,但略有不同。這是因爲有3種不同的交易類型。取決於交易類型的列更改,所以爲了讓他們在3NF我需要在單獨的表中(右?)。超過3個表的棘手的SQL語句
舉個例子:
T1: 日期,用戶量
T2: 日期,用戶,誰,量
T3: 日期,用戶,內容,金額
現在我需要一個查詢誰將會讓我在同一個用戶的每個表中的所有交易,如
select * from t1,t2,t3 where user ='me'; (這當然不起作用)。
我正在學習JOIN語句,但還沒有找到正確的方法來做到這一點。謝謝。
編輯:其實我需要那麼從每個表中的所有列,不只是誰是相同的。編輯#2:是的,有transaction_type不會打破3NF,當然 - 所以也許我的設計是完全錯誤的。這是真正發生的事情(這是一個替代貨幣系統):
- 交易是在用戶之間進行的,例如互信。所以單位在用戶之間交換。
- 發明物是帶入系統的物理材料;一個用戶得到這個單位。
- 消費是物質消耗;用戶必須爲此支付單位。
|--------------------------------------------------------------------------| | type | transactions | inventarizations | consumations | |--------------------------------------------------------------------------| | columns | date | date | date | | | creditor(FK user) | creditor(FK user) | | | | debitor(FK user) | | debitor(FK user) | | | service(FK service)| | | | | | asset(FK asset) | asset(FK asset) | | | amount | amount | amount | | | | | price | |--------------------------------------------------------------------------|
(注意「量」是在不同的單元;這些是條目和計算上的那些量外製成的範圍來解釋爲什麼,但這些是字段)。
因此,問題變成「可以/應該在一個表格中還是多個表格(就像我現在所擁有的那樣)?」 我需要先前描述的SQL語句來顯示運行餘額。
(這個現在應該成爲一個新的問題,還是可以編輯?)。
編輯#3:由於編輯#2實際上將此轉換爲新問題,我還決定發佈a new question。 (我希望這是好的?)。
NULL作爲列佔位符更安全,因爲如果存在值,則列輸出必須是相同的數據類型。 – 2009-09-12 02:58:51
我應用了這種方法,它迄今爲止工作正常。現在我嘗試了一個帶有transaction_type的「master」事務表,它引用了3個獨立表中的附加信息。我懷疑它,但可以通過設置一個外鍵取決於transaction_type並因此指向3個表中的一個來獲得引用完整性嗎? – faboolous 2009-09-13 10:48:48