2009-10-14 31 views
1

創建一個小型的數據庫訪問的值的字段的查找查詢,我遇到了這個問題:構建使用另一場

爲背景,我有兩個表:

Table: Items  and Table: Actions 
ID(PK) Name    ID(PK) Name 
------------------   ---------------- 
1  Thing1   1  Move 
2  Thing2   2  Delete 
3  Thing3 

我創建一個查詢,列出了每個項目的可用操作:

Query: AvailableActions 
Item_ID Action_ID 
------------------------ 
1   2     //Thing1 can be deleted 
2   1     //Thing2 can be moved 
2   2     //Thing1 can be deleted 
(no more records) 

現在我想填充第三個表,列出對象的歷史

Table: History 
ID(PK) Item_ID Action_ID 
---------------------------------- 
1   1   2 
2   1   2 
3   2   1 
4   2   2 

因此,我想爲Action_ID做一個查找字段,在那裏我只能選擇允許選擇的項目的值。但是,無論是在設計模式還是SQL模式下,我都無法獲得該字段的值。

你有什麼提示嗎?

+0

如果您正在創建「歷史記錄表」,那麼您需要一個日期字段來區分當前操作與以前的操作。只有當前操作與以前的操作不同時,您才需要將新數據追加到歷史記錄表中。沒有看到在歷史桌上有一個PK點 - 你有兩個3,所以不能以PK任何方式! – heferav 2009-10-15 09:26:41

+0

關於日期字段,我保持簡單的例子,省略了'timestamp'字段。而PK上的douple 3現在是一個錯誤的編排。 我使用在每個表上放置PK時,我做了SQL,這是否有什麼問題? – Lau 2009-10-16 14:05:25

回答

0

就像我在評論中所說的,我實現這一目標的唯一方法是在子項表單中添加一個子表單。 (無法僅用結構來指定它,因爲這些可用行爲是根據同一個歷史表計算的)

0

在你整理UI(拖地板......)之前,確保你在桌子上有所需的約束(...修正了漏洞),例如ANSI-92 Query Mode SQL DDL:

ALTER TABLE History ADD 
    CONSTRAINT fk__history__AvailableActions 
    FOREIGN KEY (Item_ID, Action_ID) 
    REFERENCES AvailableActions (Item_ID, Action_ID); 

...假設你已經有AvailableActions (Item_ID, Action_ID)所需的唯一約束。

+0

你好, 我混淆了混合GUI(代碼+設計器),但是對於這個歷史記錄表,Action字段是一個'Action'-ID。 問題在於可用操作(即查詢,而不是表)是根據先前操作(與工作流程過程相匹配)進行計算的。 在我看來,我不能完成這個結構的工作,我不得不建立一個專門的表單來將數據插入到歷史記錄中,爲選定的項目獲取可用的動作。 – Lau 2009-10-16 14:11:49

0

如果你想要一個可以應用到項目X的操作的列表,那麼你可以用產生這樣的:

SELECT Actions.ID, Actions.Name FROM Actions INNER JOIN AvailableActions 
    ON Actions.ID = AvailableActions.ActionID WHERE Actions.Item_ID = X 

當你談論刪除「物1」,你確實要刪除的記錄從表中還是記錄代理的其他內容(如磁盤文件)。如果你真的刪除了它,你將無法在Items和AvailableActions之間建立PK/FK關係,如果這是你的意圖。

+0

沒有關於刪除那裏的記錄,只是一個隨機動詞(取而代之的是你喜歡的:發送,Decoratad,...)。 對於查詢,我有我需要的所有數據可用: *一個項目表 *三個表代表工作流程(狀態,動作和動作類型) 然後我創建一個查詢來獲取最後一個動作每個項目(從項目上的歷史記錄的左連接,按Item.ID分組,並帶有一個字段Last(History.ID)。 我與Actions.State一起加入,所以我得到項目的實際狀態,然後加入工作流程查詢獲得AvailableActions 當我檢查AvailableActions, – Lau 2009-10-16 17:59:33

+0

中的記錄時,數據是正確的,所以結構或查詢沒有大的錯誤,我只想知道是否可以限制選擇動作到AvailableActions中,同時保留外鍵「History.Action是一個Action.ID」。 – Lau 2009-10-16 18:02:05