Thank you for the informative script.
I noticed that many of the fields are defined as SMALLINT, even those that would never go over a TINYINT value. These include DAY_OF_WEEK (max 7), MONTH (max 12), and QUARTER (max 4). Is there a reason you chose SMALLINT over TINYINT in these cases?
Also, the SQL_DATE column is defined as a DATETIME (8 bytes) rather than a DATE (3 bytes), even though it appears that only whole dates will be used.
Changing the values to the smallest datatype necessary to hold the values changes the row width from 263 bytes to 93 bytes (by my calculations). I expect that would result in better performance because of decreased page reads. How would using the larger datatypes be a benefit?