Eu tenho várias tabelas que contêm metadados sobre as tabelas e pacotes no sistema. Este destina-se a ser um recurso para analistas e documentação, portanto, não é usado para criar dados.
Uma das colunas que aparecem em algumas dessas tabelas mostra o usuário ou "Proprietário" do objeto. Os dados devem conter apenas contas de usuário no banco de dados e parece uma boa prática ter uma restrição de chave estrangeira das tabelas de metadados para sys.user$.
No entanto, sempre abordei tabelas SYS com cautela e fiquei surpreso ao ver que não há chave primária para SYS.USER$ apenas um índice exclusivo na coluna NAME.
Tanto quanto sei, não posso criar uma chave estrangeira em sys.all_users. Ou eu poderia criar uma tabela como Select username, user_id from all_users para que a entrada de dados seja verificada na inserção, mas tudo parece muito desajeitado.
Existe uma maneira melhor de acessar uma tabela que possui uma chave primária e os nomes de todos os esquemas?
Acabei adicionando uma restrição de verificação como uma solução codificada que não mexe com os arquivos do sistema. Ainda acho que deve haver uma maneira de obter uma lista dos esquemas ou "proprietários" que podem ser usados como uma restrição de chave estrangeira.
@Phil, por que você não publica seu comentário como resposta?
Não encontrei uma maneira elegante de resolver essa questão, mas adicionar uma restrição de verificação na coluna "Proprietário" das tabelas de metadados cumpriu o objetivo de garantir que apenas os proprietários do esquema fossem listados. Se um novo proprietário de esquema for adicionado, todas as restrições de verificação terão que ser alteradas, mas isso não é muito oneroso.
Eu tiro meu chapéu para Phil por confirmar que recuar lentamente das tabelas do sistema é a melhor abordagem e gostaria que ele tivesse postado isso como uma resposta.