在一次采访中,有人问我如何创建一个在尝试将重复值插入列中时抛出异常的表,但不应使用任何约束。这是在甲骨文中。
这可能是一个愚蠢的问题,但你如何做到这一点?
谢谢。
表上的唯一索引将强制唯一性要求而不创建约束(如果不存在合适的索引,创建唯一约束将创建索引)。但这很可能违背了问题的精神——这是一个有点微妙的区别。我希望调查候选人是否理解这种区别的面试官会选择比这更好的方式来提问。询问“唯一约束和唯一索引之间有什么区别”将是一个有用的对话启动器,它不需要候选人尝试解析愚蠢请求背后的意图。
这将是一个非常糟糕的主意,但您可以在表上编写一个触发器,通过适当的序列化或忽略多个会话可能同时插入重复行的可能性,如果存在重复行,则会引发异常。这将是一个非常糟糕的触发器使用,但它可以完成。
您还可以创建一个在提交时刷新并仅包含多次出现的键的物化视图,然后对物化视图使用约束或对物化视图使用触发器来引发异常。这可能比触发器解决方案更不合理(我可以争辩说具有约束的物化视图可能比触发器更可取)但它可以工作。