Keep in mind that a data warehouse is a de-normalized structure, so it is normal for data to repeat in dimensions. The integrity should be provided in the operational system and the ETL process. Suppose, we have something like the model below.
![alt text](http://i.imgur.com/akoqY.png)
The business process that dispenses tools has to know which tool can be installed on which machine. Suppose a wrong tool is somehow installed on a machine. It is better to import data to match that fact and run a report that will discover a bug in the business process, than to break the ETL process because the tool and machine types do not match.
For example, a query (report) like this wold discover a mismatch and would prove quite useful.
select
'tool-machine mismatch' as alarm
, full_date
, machine_name
, machine_type
, tool_name
, matching_machine_type
, employee_full_name
from fact_installed_tools as f
join dim_machine as m on m.machine_key = f.machine_key
join dim_tool as t on t.tool_key = f.installed_tool_key
join dim_date as d on d.date_key = f.date_key
join dim_employee as e on e.employee_key = f.employee_key
where machine_type != matching_machine_type ;