A degenerate dimension can be modeled choosing one of these options:
- Use junk table
- Use dimension table
- Use fact table
Use Junk Table
Every degenerate dimension will be added to a junk table, referenced by the fact table using a surrogate key.
-- ---------------------------------------------------------------- -- Indyco Builder - Auto-Generated DDL Script -- -- ---------------------------------------------------------------- -- -- Project Name . . . . . . : docs -- + Exported Datamarts. . : Datamart Junk -- + Export Timestamp. . . : 2015-04-03 14:47:43 -- -- Selected Profile . . . . : Custom -- + Shared Hierarchies. . : Do not snowflake -- + Cross Dimensional Attr: Bridge table without surrogates -- + Degenerate Dimensions : Use junk table -- + Multiple Arcs . . . . : Bridge table without surrogates -- + Recursions. . . . . . : Use self-referencing keys -- -- Target DB. . . . . . . . : Oracle -- + Export Primary Keys . : True -- + Export Foreign Keys . : True -- -- ---------------------------------------------------------------- CREATE TABLE "FT_FACT" ( "ID_JT_FACT" NUMBER (9), "ID_CUSTOMER" NUMBER (9), "MEASURE" NUMBER (18,3) ); ALTER TABLE "FT_FACT" ADD CONSTRAINT "PK_FT_FACT" PRIMARY KEY ("ID_JT_FACT", "ID_CUSTOMER"); CREATE TABLE "JT_FACT" ( "ID_JT_FACT" NUMBER (9), "FLAG_B" CHAR(1), "FLAG_A" CHAR(1), "FLAG_C" CHAR(1), "FLAG_D" CHAR(1) ); ALTER TABLE "JT_FACT" ADD CONSTRAINT "PK_JT_FACT" PRIMARY KEY ("ID_JT_FACT"); CREATE TABLE "DT_CUSTOMER" ( "ID_CUSTOMER" NUMBER (9), "CUSTOMER" NVARCHAR2 (255), "COMPANY" NVARCHAR2 (255) ); ALTER TABLE "DT_CUSTOMER" ADD CONSTRAINT "PK_DT_CUSTOMER" PRIMARY KEY ("ID_CUSTOMER"); ALTER TABLE "FT_FACT" ADD CONSTRAINT "FK_FT_FACT_ID_JT_FACT_ID_JT_F" FOREIGN KEY ("ID_JT_FACT") REFERENCES "JT_FACT" ("ID_JT_FACT"); ALTER TABLE "FT_FACT" ADD CONSTRAINT "FK_FT_FACT_ID_CSTM_ID_CSTM" FOREIGN KEY ("ID_CUSTOMER") REFERENCES "DT_CUSTOMER" ("ID_CUSTOMER");
Use Dimension Table
For each degenerate dimension a dedicated dimension table will be added.
-- ---------------------------------------------------------------- -- Indyco Builder - Auto-Generated DDL Script -- -- ---------------------------------------------------------------- -- -- Project Name . . . . . . : docs -- + Exported Datamarts. . : Datamart Junk -- + Export Timestamp. . . : 2015-04-03 14:52:31 -- -- Selected Profile . . . . : Custom -- + Shared Hierarchies. . : Do not snowflake -- + Cross Dimensional Attr: Bridge table without surrogates -- + Degenerate Dimensions : Use dimension table -- + Multiple Arcs . . . . : Bridge table without surrogates -- + Recursions. . . . . . : Use self-referencing keys -- -- Target DB. . . . . . . . : Oracle -- + Export Primary Keys . : True -- + Export Foreign Keys . : True -- -- ---------------------------------------------------------------- CREATE TABLE "FT_FACT" ( "ID_FLAG_B" NUMBER (9), "ID_FLAG_A" NUMBER (9), "ID_FLAG_C" NUMBER (9), "ID_FLAG_D" NUMBER (9), "ID_CUSTOMER" NUMBER (9), "MEASURE" NUMBER (18,3) ); ALTER TABLE "FT_FACT" ADD CONSTRAINT "PK_FT_FACT" PRIMARY KEY ("ID_FLAG_B", "ID_FLAG_A", "ID_FLAG_C", "ID_FLAG_D", "ID_CUSTOMER"); CREATE TABLE "DT_FLAG_B" ( "ID_FLAG_B" NUMBER (9), "FLAG_B" CHAR(1) ); ALTER TABLE "DT_FLAG_B" ADD CONSTRAINT "PK_DT_FLAG_B" PRIMARY KEY ("ID_FLAG_B"); CREATE TABLE "DT_FLAG_A" ( "ID_FLAG_A" NUMBER (9), "FLAG_A" CHAR(1) ); ALTER TABLE "DT_FLAG_A" ADD CONSTRAINT "PK_DT_FLAG_A" PRIMARY KEY ("ID_FLAG_A"); CREATE TABLE "DT_FLAG_C" ( "ID_FLAG_C" NUMBER (9), "FLAG_C" CHAR(1) ); ALTER TABLE "DT_FLAG_C" ADD CONSTRAINT "PK_DT_FLAG_C" PRIMARY KEY ("ID_FLAG_C"); CREATE TABLE "DT_FLAG_D" ( "ID_FLAG_D" NUMBER (9), "FLAG_D" CHAR(1) ); ALTER TABLE "DT_FLAG_D" ADD CONSTRAINT "PK_DT_FLAG_D" PRIMARY KEY ("ID_FLAG_D"); CREATE TABLE "DT_CUSTOMER" ( "ID_CUSTOMER" NUMBER (9), "CUSTOMER" NVARCHAR2 (255), "COMPANY" NVARCHAR2 (255) ); ALTER TABLE "DT_CUSTOMER" ADD CONSTRAINT "PK_DT_CUSTOMER" PRIMARY KEY ("ID_CUSTOMER"); ALTER TABLE "FT_FACT" ADD CONSTRAINT "FK_FT_FACT_ID_FLAG_B_ID_FLAG" FOREIGN KEY ("ID_FLAG_B") REFERENCES "DT_FLAG_B" ("ID_FLAG_B"); ALTER TABLE "FT_FACT" ADD CONSTRAINT "FK_FT_FACT_ID_FLAG_A_ID_FLAG" FOREIGN KEY ("ID_FLAG_A") REFERENCES "DT_FLAG_A" ("ID_FLAG_A"); ALTER TABLE "FT_FACT" ADD CONSTRAINT "FK_FT_FACT_ID_FLAG_C_ID_FLAG" FOREIGN KEY ("ID_FLAG_C") REFERENCES "DT_FLAG_C" ("ID_FLAG_C"); ALTER TABLE "FT_FACT" ADD CONSTRAINT "FK_FT_FACT_ID_FLAG_D_ID_FLAG" FOREIGN KEY ("ID_FLAG_D") REFERENCES "DT_FLAG_D" ("ID_FLAG_D"); ALTER TABLE "FT_FACT" ADD CONSTRAINT "FK_FT_FACT_ID_CSTM_ID_CSTM" FOREIGN KEY ("ID_CUSTOMER") REFERENCES "DT_CUSTOMER" ("ID_CUSTOMER");
Use Fact Table
Each degenerate dimension will be added to the fact table as a new column.
-- ---------------------------------------------------------------- -- Indyco Builder - Auto-Generated DDL Script -- -- ---------------------------------------------------------------- -- -- Project Name . . . . . . : docs -- + Exported Datamarts. . : Datamart Junk -- + Export Timestamp. . . : 2015-04-03 14:41:39 -- -- Selected Profile . . . . : Custom -- + Shared Hierarchies. . : Do not snowflake -- + Cross Dimensional Attr: Bridge table without surrogates -- + Degenerate Dimensions : Use fact table -- + Multiple Arcs . . . . : Bridge table without surrogates -- + Recursions. . . . . . : Use self-referencing keys -- -- Target DB. . . . . . . . : Oracle -- + Export Primary Keys . : True -- + Export Foreign Keys . : True -- -- ---------------------------------------------------------------- CREATE TABLE "FT_FACT" ( "FLAG_B" CHAR(1), "FLAG_A" CHAR(1), "FLAG_C" CHAR(1), "FLAG_D" CHAR(1), "ID_CUSTOMER" NUMBER (9), "MEASURE" NUMBER (18,3) ); ALTER TABLE "FT_FACT" ADD CONSTRAINT "PK_FT_FACT" PRIMARY KEY ("FLAG_B", "FLAG_A", "FLAG_C", "FLAG_D", "ID_CUSTOMER"); CREATE TABLE "DT_CUSTOMER" ( "ID_CUSTOMER" NUMBER (9), "CUSTOMER" NVARCHAR2 (255), "COMPANY" NVARCHAR2 (255) ); ALTER TABLE "DT_CUSTOMER" ADD CONSTRAINT "PK_DT_CUSTOMER" PRIMARY KEY ("ID_CUSTOMER"); ALTER TABLE "FT_FACT" ADD CONSTRAINT "FK_FT_FACT_ID_CSTM_ID_CSTM" FOREIGN KEY ("ID_CUSTOMER") REFERENCES "DT_CUSTOMER" ("ID_CUSTOMER");