2012-12-27 98 views
1

這是有點難以解釋,所以請裸露在我身邊。在SQL連接交易表與不同種類的交易

我正在爲一家餐廳製作一個mysql數據庫。

我有一個表格叫做:*tbl_contents*,它存儲了用於準備不同菜單項目的所有內容。
現在我必須爲所有的支出維護一張桌子。這些支出可以是「購買內容」或一些經常性開支,如電費單或餐廳的租金。

如何將兩種支出存儲在同一張表中?

我有表tbl_fixed_expanditurestbl_contents。 如果我爲廚房買東西,它應該存儲在tbl_contents,如果我已經支付了電費,它將被保存在tbl_fixed_expenditures

enter image description here

+2

有什麼實際問題?您是否擔心規範化,因爲這兩類項目(固定資產和可變資產)具有不同的屬性/列? – theMarceloR

+1

是的,這是關於正常化(不要問我哪一個:P),但我不知道如何去做。我有這張表需要節省這兩種支出的表expenditures_tranx。 –

+1

我不確定我是否理解這個問題。如果你想把所有的支出都放在一張桌子上,但需要區分它們,那麼標誌(內容= y或n)就是要走的路。 – mikeY

回答

1

你基本上試圖在關係數據庫中表示繼承。

你有兩個「類」在某些方面是相似的,而在其他方面是不同的。我的建議是創建一個表,充當tbl_expanditurestbl_fixed_expanditures的父級。

這裏是我會做:

+------------------+ 
| tbl_expenditures | 
+------------------+ 
| id    | 
+------------------+ 

+------------------------+ 
| tbl_fixed_expenditures | 
+------------------------+ 
| id      | 
| expenditureId   | 
| ...     | 
+------------------------+ 

+---------------------------+ 
| tbl_variable_expenditures | 
+---------------------------+ 
| id      | 
| expenditureId    | 
| ...      | 
+---------------------------+ 

...其中tbl_fixed_expenditures.expenditureIdtbl_variable_expenditures.expenditureId都必須tbl_expenditures.id參考。

這樣,當您需要將它們簡稱爲「支出」(例如,在您的交易表中)時,您可以參考tbl_expenditures,並且當您需要固定或可變支出獨有的信息時,您可以參考「孩子」表。

這是關係數據庫的一個非常普遍的問題,並且有幾種處理方法,每種方法都有其優點和缺點。IBM有一個非常好的文章,概述這些選項,我強烈建議進一步閱讀:

http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/

1

嗯,這是一種很難給出一個合適的答案,但我可以給你根據什麼我目前瞭解一些模糊的猜測。

如果這兩種支出具有不同的屬性,但它們有一些共同的細節,則應對錶格進行歸一化。使用expenditures_tranx作爲中間表(就像OO術語中的頂級類),其餘表tbl_fixed_expanditurestbl_contents可以是「專用」表(同樣,以OO術語,將「繼承」屬性從父表中)將存儲更詳細的支出信息。這裏有一個簡單的模型實體關係草案來說明。

____________   ___________________  _______________________  
    |tbl_contents|-1----*-| expenditures_tranx|-*---1-|tbl_fixed_expenditures| 
    |exp_id:fk___|  |___________________|  |exp_id:fk_____________| 

下面是解釋這些概念的有趣文章: http://apps.topcoder.com/wiki/display/training/Entity+Relationship+Modeling

讓我知道你在想什麼。

+0

但這是否意味着桌子支出_tranx將有兩個FK?一旦從tbl_cnotents和一個來自tbl_fixed_expenditures? –

+1

如果這是你正在尋找的基數,是的,中間表將照顧外鍵,因爲它將成爲收集支出列表的入口點。 – theMarceloR

+0

但這似乎沒有規範化,以便在表中始終有一個空的控件。我的意思是如果我輸入一個內容支出,它將把固定支出的FK留空,反之亦然。 –