Dimension -
A dimension table typically has two types of columns, primary keys to fact tables and textual\descreptive data.
Fact -
A  fact table typically has two types of columns, foreign keys to  dimension tables and measures those that contain numeric facts. A fact  table can contain fact’s data on detail or aggregated level.
Types of Dimensions -
Slowly Changing Dimensions:
 Attributes  of a dimension that would undergo changes over time. It depends on the  business requirement whether particular attribute history of changes  should be preserved in the data warehouse. This is called a Slowly  Changing Attribute and a dimension containing such an attribute is  called a Slowly Changing Dimension.
Rapidly Changing Dimensions: 
A  dimension attribute that changes frequently is a Rapidly Changing  Attribute. If you don’t need to track the changes, the Rapidly Changing  Attribute is no problem, but if you do need to track the changes, using a  standard Slowly Changing Dimension technique can result in a huge  inflation of the size of the dimension. One solution is to move the  attribute to its own dimension, with a separate foreign key in the fact  table. This new dimension is called a Rapidly Changing Dimension.
Junk Dimensions: 
A  junk dimension is a single table with a combination of different and  unrelated attributes to avoid having a large number of foreign keys in  the fact table. Junk dimensions are often created to manage the foreign  keys created by Rapidly Changing Dimensions.
Inferred Dimensions:
While  loading fact records, a dimension record may not yet be ready. One  solution is to generate an surrogate key with Null for all the other  attributes. This should technically be called an inferred member, but is  often called an inferred dimension.
Conformed Dimensions: 
A  Dimension that is used in multiple locations is called a conformed  dimension. A conformed dimension may be used with multiple fact tables  in a single database, or across multiple data marts or data warehouses.
Degenerate Dimensions:
 A  degenerate dimension is when the dimension attribute is stored as part  of fact table, and not in a separate dimension table. These are  essentially dimension keys for which there are no other attributes. In a  data warehouse, these are often used as the result of a drill through  query to analyze the source of an aggregated number in a report. You can  use these values to trace back to transactions in the OLTP system.
Role Playing Dimensions: 
A  role-playing dimension is one where the same dimension key — along with  its associated attributes — can be joined to more than one foreign key  in the fact table. For example, a fact table may include foreign keys  for both Ship Date and Delivery Date. But the same date dimension  attributes apply to each foreign key, so you can join the same dimension  table to both foreign keys. Here the date dimension is taking multiple  roles to map ship date as well as delivery date, and hence the name of  Role Playing dimension.
Shrunken Dimensions: 
A  shrunken dimension is a subset of another dimension. For example, the  Orders fact table may include a foreign key for Product, but the Target  fact table may include a foreign key only for ProductCategory, which is  in the Product table, but much less granular. Creating a smaller  dimension table, with ProductCategory as its primary key, is one way of  dealing with this situation of heterogeneous grain. If the Product  dimension is snowflaked, there is probably already a separate table for  ProductCategory, which can serve as the Shrunken Dimension.
Static Dimensions: 
Static  dimensions are not extracted from the original data source, but are  created within the context of the data warehouse. A static dimension can  be loaded manually — for example with Status codes — or it can be  generated by a procedure, such as a Date or Time dimension.
Types of Facts -
Additive:
Additive  facts are facts that can be summed up through all of the dimensions in  the fact table. A sales fact is a good example for additive fact.
Semi-Additive:
Semi-additive facts are facts that can be summed up for some of the dimensions in the fact table, but not the others.
Eg: Daily balances fact can be summed up through the customers dimension but not through the time dimension.
Non-Additive:
Non-additive facts are facts that cannot be summed up for any of the dimensions present in the fact table.
Eg: Facts which have percentages, ratios calculated.
Factless Fact Table:
 In  the real world, it is possible to have a fact table that contains no  measures or facts. These tables are called “Factless Fact tables”.
Eg:  A fact table which has only product key and date key is a factless  fact. There are no measures in this table. But still you can get the  number products sold over a period of time.
Based on the above classifications, fact tables are categorized into two:
Cumulative: 
This  type of fact table describes what has happened over a period of time.  For example, this fact table may describe the total sales by product by  store by day. The facts for this type of fact tables are mostly additive  facts. The first example presented here is a cumulative fact table.
Snapshot: 
This  type of fact table describes the state of things in a particular  instance of time, and usually includes more semi-additive and  non-additive facts. The second example presented here is a snapshot fact  table.