Actually it's Chris, but thanks anyway!
"Two tables storing redundant data about the same entity should break the first normal form, correct or not?"
Incorrect!
A table is in 1NF if it meets the following conditions:
- There's no top-to-bottom ordering to the rows.
- There's no left-to-right ordering to the columns.
- There are no duplicate rows.
- Every row-and-column intersection contains exactly one value from the applicable domain (and nothing else).
- All columns are regular
These are all about a single table. Nothing stated about duplicating columns in a second table.
https://en.wikipedia.org/wiki/First_normal_form I agree having one place as a master copy of the data is a good idea. Given that you have the master database to stop duplication, why do you have separate databases at all? Why can't you have just one?
The solution I'm proposing is:
All tables exist in one schema - DATA_OWNER.
All applications connect with their own user - APP_USER_1, APP_USER_2, etc.
Each app user only has privileges on the tables in DATA_OWNER they have permissions on.
So now you have a choice:
Stick with one table, EMPLOYEES. Then use Virtual Private Database to mask the sensitive columns from the apps that shouldn't have access. You need to be on EE to do this.
OR
Split the table into two as you've suggested: EMPLOYEES and EMPLOYEES_SECURE. "Everyone" has access to EMPLOYEES. But only some apps have access to EMPLOYEES_SECURE.
So to be explicit:
Splitting the table for security is an option. But there are also other ways to achieve the same goal (other than views).