2009-10-21 62 views
0

我有一個表說tb_load_files。 它包含字段 file_name,file_date,file_loc,file_status插入記錄基於標誌

現在,File_status甘蔗是x或y。 需求是可以爲 (file_name,file_date,file_loc)的組合的x狀態的多個記錄,但y狀態只有一個記錄。

例如

 
file_name file_date  file_loc status 
abc.txt  12-oct-07  NY   X 
abc.txt  12-oct-07  NY   X 
abc.txt  12-oct-07  NY   Y 

abc.txt  12-oct-07  NY   Y -- NOT ALLOWED 

什麼可能是設計這些表的最佳方式?
  a。在插入前選擇數據
  b。觸發檢查值是否存在
或任何其他。 請指教

+0

您可以在此澄清要求嗎?爲什麼最終記錄是'不允許的'?聽起來好像你在說任何給定的Y記錄必須是唯一的,但X記錄不必是唯一的。但是,如果這是真的,那麼你的例子就是令人困惑的。 – moleboy 2009-10-21 16:02:08

+0

不清楚爲什麼最後一行不被允許。 file_name,file_date和file_loc的組合與前兩行相同,但它們都可以嗎?也許對「地位」意味着什麼會有所幫助。 – 2009-10-21 16:02:40

回答

1

如果將會有成千上萬的條目,我建議不要通過使用具有相同數據的多行來浪費空間,而是添加COUNT列。這些數據可以是唯一的,如果需要,可以使用索引更好地進行優化。然後,要麼創建客戶端可調用的PL/SQL過程,要麼創建可更新視圖+ INSTEAD OF INSERT/UPDATE/DELETE觸發器(如果客戶端期望與表一起工作)。當狀態爲X時,內部代碼只會在現有記錄上增加COUNT,如果狀態爲Y,則會拋出錯誤。

+0

+1數據重複的有效點。 @Avinash,你可能要考慮增加Juraj建議的計數,或者可能會分裂/標準化你的表以避免重複。 – Preets 2009-10-22 12:26:37

+0

@Avinash,你目前索引的表是哪個字段? – Preets 2009-10-22 12:27:57