Basically my aim is there are 5 dimensional tables that are created Student->s_id primary key,upn(unique pupil no),name Grade->g_id primary key,grade,exam_level,values Subject->sb_id primary key,subjectid,subname School->sc_id primary key,schoolno,school_name year->y_id primary key,year(like 2008) s_id,g_id,sb_id,sc_id,y_id are sequences Code (Text): select * from student; S_ID UPN FNAME COMMONNAME GENDER DOB ============================== 9062 1027 MELISSA ANNE f 13-OCT-81 ... 9000 rows selected Code (Text): select * from grade; G_ID GRADE E_LEVEL VALUE ---------- ---------- ---------- ---------- 73 A a 120 74 B a 100 75 C a 80 76 D a 60 77 E a 40 78 F a 20 79 U a 0 80 X a 0 ... 18 rows selected These are basically the dimensional views Now according to the specification given, need to create a fact table as facts_table which contains all the dim tables primary keys as foreign keys in it. The problem is when i say,I am going to consider a smaller example than the actual no of dimension tables 5 lets say there are 2 dim tables student,grade with s_id,g_id as p key. Code (Text): create materialized view facts_table(s_id,g_id) as select s.s_id,g.g_id from (select distinct s_id from student)s , (select distinct g_id from grade)g This results in massive duplication as there is no join between the two tables.But basically there are no common things between the two tables to join,how to solve it? Consider it when i do it for 5 tables the amount of duplication being involved, thats why there is not enough tablespace. I was hoping if there is no other way then create a fact table with just one column initially Code (Text): create materialized view facts_table(s_id) as select s_id from student; then Code (Text): alter materialized view facts_table add column g_id number; Then populate this g_id column by fetching all the g_id values from the grade table using some sort of loop even though we should not use pl/sql i dont know if this works? Any suggestions.