2009-10-21 59 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