Tables: Channels, Countries, Customers, Products, Promotions, Times

CREATE TABLE "SH"."PRODUCTS" (

"PROD_ID" NUMBER(6) NOT NULL,
"PROD_NAME" VARCHAR2(50 byte) NOT NULL,
"PROD_DESC" VARCHAR2(4000 byte) NOT NULL,
"PROD_SUBCATEGORY" VARCHAR2(50 byte) NOT NULL,
"PROD_SUBCAT_DESC" VARCHAR2(2000 byte) NOT NULL,
"PROD_CATEGORY" VARCHAR2(50 byte) NOT NULL,
"PROD_CAT_DESC" VARCHAR2(2000 byte) NOT NULL,   
"PROD_WEIGHT_CLASS" NUMBER(2), "PROD_UNIT_OF_MEASURE" VARCHAR2(20 byte),
"PROD_PACK_SIZE" VARCHAR2(30 byte),
"SUPPLIER_ID" NUMBER(6),
"PROD_STATUS" VARCHAR2(20 byte) NOT NULL,
"PROD_LIST_PRICE" NUMBER(8, 2) NOT NULL,
"PROD_MIN_PRICE" NUMBER(8, 2) NOT NULL,

 CONSTRAINT "PRODUCTS_PK" PRIMARY KEY("PROD_ID") );

bullet

"SH"."PRODUCTS" IS 'dimension table';

bullet

PROD_ID IS 'primary key';

bullet

PROD_NAME IS 'product name';

bullet

PROD_DESC IS 'product description';

bullet

 PROD_SUBCATEGORY IS 'product subcategory';

bullet

PROD_SUBCAT_DESC IS 'product subcategory description';

bullet

PROD_CATEGORY IS 'product category';

bullet

PROD_CAT_DESC IS 'product category description';

bullet

PROD_WEIGHT_CLASS IS 'product weight class';

bullet

PROD_UNIT_OF_MEASURE IS 'product unit of measure';

bullet

PROD_PACK_SIZE IS 'product package size';

bullet

SUPPLIER_ID IS 'this column';

bullet

PROD_STATUS IS 'product status';

bullet

PROD_LIST_PRICE IS 'product list price';

bullet

PROD_MIN_PRICE IS 'product minimum price'

Additional indices:

bullet

SH.PRODUCTS_PK,INDEX

bullet

SH.PRODUCTS_PROD_CAT_IX,INDEX

bullet

SH.PRODUCTS_PROD_STATUS_BIX,INDEX

bullet

SH.PRODUCTS_PROD_SUBCAT_IX,INDEX

Back to top

CREATE TABLE "SH"."CUSTOMERS" (

"CUST_ID" NUMBER NOT NULL,
"CUST_FIRST_NAME" VARCHAR2(20 byte) NOT NULL,
"CUST_LAST_NAME" VARCHAR2(40 byte) NOT NULL,
"CUST_GENDER" CHAR(1 byte),
"CUST_YEAR_OF_BIRTH" NUMBER(4),
"CUST_MARITAL_STATUS" VARCHAR2(20 byte),
"CUST_STREET_ADDRESS" VARCHAR2(40 byte) NOT NULL,
"CUST_POSTAL_CODE" VARCHAR2(10 byte) NOT NULL,
"CUST_CITY" VARCHAR2(30 byte) NOT NULL,
"CUST_STATE_PROVINCE" VARCHAR2(40 byte),
"COUNTRY_ID" CHAR(2 byte) NOT NULL,
"CUST_MAIN_PHONE_NUMBER" VARCHAR2(25 byte),
"CUST_INCOME_LEVEL" VARCHAR2(30 byte),
"CUST_CREDIT_LIMIT" NUMBER,
"CUST_EMAIL" VARCHAR2(30 byte),

CONSTRAINT "CUSTOMERS_COUNTRY_FK" FOREIGN KEY("COUNTRY_ID")
    REFERENCES "SH"."COUNTRIES"("COUNTRY_ID") DISABLE,
CONSTRAINT "CUSTOMERS_PK" PRIMARY KEY("CUST_ID"));
 

bullet

CUSTOMERS IS 'dimension table';

bullet

CUST_ID IS 'primary key';

bullet

CUST_FIRST_NAME IS 'first name of the customer';

bullet

CUST_LAST_NAME IS 'last name of the customer';

bullet

CUST_GENDER IS 'gender; low cardinality attribute';

bullet

CUST_YEAR_OF_BIRTH IS 'customer year of birth';

bullet

CUST_MARITAL_STATUS IS 'customer marital status; low cardinality attribute';

bullet

CUST_STREET_ADDRESS IS 'customer street address';

bullet

CUST_POSTAL_CODE IS 'postal code of the customer';

bullet

CUST_CITY IS 'city where the customer lives';

bullet

CUST_STATE_PROVINCE IS 'customer geography: state or province';

bullet

COUNTRY_ID IS 'foreign key to the countries table (snowflake)';

bullet

CUST_MAIN_PHONE_NUMBER IS 'customer main phone number';

bullet

CUST_INCOME_LEVEL" IS 'customer income level';

bullet

CUST_CREDIT_LIMIT" IS 'customer credit limit';

bullet

CUST_EMAIL IS 'customer 'email id'

 Additional indices:

bulletSH.CUSTOMERS_GENDER_BIX,INDEX
bulletSH.CUSTOMERS_MARITAL_BIX,INDEX
bulletSH.CUSTOMERS_PK,INDEX
bulletSH.CUSTOMERS_YOB_BIX,INDEX

Back to top

CREATE TABLE "SH"."CHANNELS" (

"CHANNEL_ID" CHAR(1 byte) NOT NULL,   
"CHANNEL_DESC" VARCHAR2(20 byte) NOT NULL,
"CHANNEL_CLASS" VARCHAR2(20 byte),     

CONSTRAINT "CHAN_PK" PRIMARY KEY("CHANNEL_ID") );

bullet"CHANNELS" IS 'small dimension table';
bulletCHANNEL_ID IS 'primary key  column';
bulletCHANNEL_DESC IS 'e.g.  telesales, internet, catalog';
bulletCHANNEL_CLASS IS 'e.g.  direct, indirect'

Back to top

CREATE TABLE "SH"."COUNTRIES" (

"COUNTRY_ID" CHAR(2 byte) NOT NULL,  
"COUNTRY_NAME" VARCHAR2(40 byte) NOT NULL,
"COUNTRY_SUBREGION" VARCHAR2(30 byte),
"COUNTRY_REGION" VARCHAR2(20 byte),

CONSTRAINT "COUNTRY_PK" PRIMARY KEY("COUNTRY_ID") );

bullet"SH"."COUNTRIES" IS 'country dimension table (snowflake)';
bulletCOUNTRY_ID IS 'primary key';
bulletCOUNTRY_NAME IS 'country name';
bulletCOUNTRY_SUBREGION IS 'e.g. Western Europe, to allow hierarchies';
bulletCOUNTRY_REGION IS 'e.g. Europe, Asia'

Back to top

CREATE TABLE "SH"."PROMOTIONS" (

"PROMO_ID" NUMBER(6) NOT NULL,
"PROMO_NAME" VARCHAR2(20 byte) NOT NULL,
"PROMO_SUBCATEGORY" VARCHAR2(30 byte) NOT NULL,
"PROMO_CATEGORY" VARCHAR2(30 byte) NOT NULL,
"PROMO_COST" NUMBER(10, 2) NOT NULL,
"PROMO_BEGIN_DATE" DATE NOT NULL,
"PROMO_END_DATE" DATE NOT NULL,
CONSTRAINT "PROMO_PK" PRIMARY KEY("PROMO_ID") );

bullet

TABLE "SH"."PROMOTIONS" IS 'dimension table without a PK-FK relationship with the facts table, to show outer join functionality';

bullet

PROMO_ID IS 'primary key column';

bullet

PROMO_NAME IS 'promotion description';

bullet

PROMO_SUBCATEGORY IS 'enables to investigate promotion hierarchies';

bullet

PROMO_CATEGORY IS 'promotion category';

bullet

PROMO_COST IS 'promotion cost, to do promotion effect calculations';

bullet

PROMO_BEGIN_DATE IS 'promotion begin day';

bullet

PROMO_END_DATE IS 'promotion end day'

Back to top

CREATE TABLE "SH"."TIMES" (

"TIME_ID" DATE NOT NULL,
"DAY_NAME" VARCHAR2(9 byte) NOT NULL,
"DAY_NUMBER_IN_WEEK" NUMBER(1) NOT NULL,
"DAY_NUMBER_IN_MONTH" NUMBER(2) NOT NULL,
"CALENDAR_WEEK_NUMBER" NUMBER(2) NOT NULL,
"FISCAL_WEEK_NUMBER" NUMBER(2) NOT NULL,
"WEEK_ENDING_DAY" DATE NOT NULL,
"CALENDAR_MONTH_NUMBER" NUMBER(2) NOT NULL,
"FISCAL_MONTH_NUMBER" NUMBER(2) NOT NULL,
"CALENDAR_MONTH_DESC" VARCHAR2(8 byte) NOT NULL,
"FISCAL_MONTH_DESC" VARCHAR2(8 byte) NOT NULL,
"DAYS_IN_CAL_MONTH" NUMBER NOT NULL,
"DAYS_IN_FIS_MONTH" NUMBER NOT NULL,
"END_OF_CAL_MONTH" DATE NOT NULL,
"END_OF_FIS_MONTH" DATE NOT NULL,
"CALENDAR_MONTH_NAME" VARCHAR2(9 byte) NOT NULL,
"FISCAL_MONTH_NAME" VARCHAR2(9 byte) NOT NULL,
"CALENDAR_QUARTER_DESC" CHAR(7 byte) NOT NULL,
"FISCAL_QUARTER_DESC" CHAR(7 byte) NOT NULL,
"DAYS_IN_CAL_QUARTER" NUMBER NOT NULL,
"DAYS_IN_FIS_QUARTER" NUMBER NOT NULL,
"END_OF_CAL_QUARTER" DATE NOT NULL,
"END_OF_FIS_QUARTER" DATE NOT NULL,
"CALENDAR_QUARTER_NUMBER" NUMBER(1) NOT NULL,
"FISCAL_QUARTER_NUMBER" NUMBER(1) NOT NULL,
"CALENDAR_YEAR" NUMBER(4) NOT NULL,
"FISCAL_YEAR"  NUMBER(4) NOT NULL,
"DAYS_IN_CAL_YEAR" NUMBER NOT NULL,
"DAYS_IN_FIS_YEAR" NUMBER NOT NULL,
"END_OF_CAL_YEAR" DATE NOT NULL,
"END_OF_FIS_YEAR" DATE NOT NULL,
CONSTRAINT "TIME_PK" PRIMARY KEY("TIME_ID"));

bullet

TABLE "SH"."TIMES" IS 'Time dimension table to support multiple hierarchies and materialized views';

bullet

TIME_ID IS 'primary key; day date, finest granularity, CORRECT ORDER';

bullet

DAY_NAME IS 'Monday to Sunday, repeating';

bullet

DAY_NUMBER_IN_WEEK IS '1 to 7, repeating';

bullet

DAY_NUMBER_IN_MONTH IS '1 to 31, repeating';

bullet

CALENDAR_WEEK_NUMBER IS '1 to 53, repeating';

bullet

FISCAL_WEEK_NUMBER IS '1 to 53, repeating';

bullet

WEEK_ENDING_DAY IS 'date of last day in week, CORRECT ORDER';

bullet

CALENDAR_MONTH_NUMBER IS '1 to 12, repeating';

bullet

FISCAL_MONTH_NUMBER IS '1 to 12, repeating';

bullet

CALENDAR_MONTH_DESC IS 'e.g. 1998-01, CORRECT ORDER';

bullet

FISCAL_MONTH_DESC IS 'e.g. 1998-01, CORRECT ORDER';

bullet

DAYS_IN_CAL_MONTH IS 'e.g. 28, 31, repeating';

bullet

DAYS_IN_FIS_MONTH IS 'e.g. 25, 32, repeating';

bullet

END_OF_CAL_MONTH IS 'last day of calendar month';

bullet

END_OF_FIS_MONTH IS 'last day of fiscal month';

bullet

CALENDAR_MONTH_NAME IS 'January to December, repeating';

bullet

FISCAL_MONTH_NAME IS 'January to December, repeating';

bullet

CALENDAR_QUARTER_DESC IS 'e.g. 1998-Q1, CORRECT ORDER';

bullet

FISCAL_QUARTER_DESC IS 'e.g. 1999-Q3, CORRECT ORDER';

bullet

DAYS_IN_CAL_QUARTER IS 'e.g. 88, 90, repeating';

bullet

DAYS_IN_FIS_QUARTER IS 'e.g. 88, 90, repeating';

bullet

END_OF_CAL_QUARTER IS 'last day of calendar quarter';

bullet

END_OF_FIS_QUARTER IS 'last day of fiscal quarter';

bullet

CALENDAR_QUARTER_NUMBER IS '1 to 4, repeating';

bullet

FISCAL_QUARTER_NUMBER IS '1 to 4, repeating';

bullet

CALENDAR_YEAR IS 'e.g. 1999, CORRECT ORDER';

bullet

FISCAL_YEAR IS 'e.g. 1999, CORRECT ORDER';

bullet

DAYS_IN_CAL_YEAR IS '365,366 repeating';

bullet

DAYS_IN_FIS_YEAR IS 'e.g. 355, 364, repeating';

bullet

END_OF_CAL_YEAR IS 'last day of cal year';

bullet

END_OF_FIS_YEAR IS 'last day of fiscal year'