我有许多表,其中包含有关系统中表和包的元数据。这旨在成为分析师和文档的资源,因此不用于创建数据。
其中一些表格中出现的一列显示了对象的用户或“所有者”。数据应该只包含数据库中的用户帐户,从元数据表到 sys.user$ 的外键约束似乎是一个很好的做法。
然而,我一直小心翼翼地接近 SYS 表,我惊讶地发现 SYS.USER$ 没有主键,只有 NAME 列上的唯一索引。
据我所知,我无法在 sys.all_users 上创建外键。或者我可以创建一个表作为从 all_users 中选择用户名、user_id,以便在插入时检查数据条目,但这一切看起来都很笨拙。
有没有更好的方法来访问具有主键和所有模式名称的表?
我最终添加了一个检查约束作为不会混淆系统文件的硬编码解决方案。我仍然认为应该有办法获得可用作外键约束的模式或“所有者”的列表。
@Phil,你为什么不发表你的评论作为答案?
我没有找到解决这个问题的优雅方法,但在元数据表的“所有者”列上添加检查约束实现了确保仅列出架构所有者的目标。如果添加了新的架构所有者,则必须更改所有检查约束,但这并不太繁重。
我向 Phil 致敬,因为他确认慢慢退出系统表是最好的方法,并希望他将此作为答案发布。