To make sure all foreign keys are valid, we will add one additional row to the dimension table, to which all fact rows refer to in case they do not have a proper foreign key value. For better readability, we use separate Embedded DataFlows for each such source and call those e.g. EDF_Oracle_.... or EDF_DefaultRow_.... depending on what the source actually is. Both sources are merged together using the Merge Transform to be finally loaded into the target table. In case it is absolutely impossible - for sure - guaranteed - the EDF_DefaultRow can be omitted. But still, for consistency, keep the source inside Embedded DataFlows.
The EDF_DefaultRow is built to add new artifical row(s). In many cases the Primary Key of this table will be just one column, so we need to add just one row - using Row_Generation Transform as source. Depending on the datatype, the value of this key is assigned from the $G_DEFAULT_xxx Global Variable.
However, if the Primary Key is a combined one, e.g. COMPANYID, COSTCENTERID, the DefaultRow DataFlow for the CostCenter will have the Dimension Table with all COMPANYIDs as the source, so that for each COMPANYID a unknown COSTCENTER does exist. This also means this dimension table has to be loaded first, and as said at Components, is therefore a requirement and the first object in the C_CostCenter Component.