This is how the fact table and load dimension look like. Notice that I have the following dimensions in the design, and one surrogate key in the fact table for each one.
Dimensions:
Time_SK, Season_SK, Load_SK, Grower_SK, CropVar_SK, Supplier_SK, DestWarehouse_SK, Fieldsman_SK, Contract_SK
Load dimension:
CREATE TABLE [dbo].[DIMLoad] (
[Load_SK] [int] IDENTITY (1, 1) NOT NULL ,
[LoadNumber] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[LoadStatus] [varchar] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[LoadTypeDescription] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TicketNumber] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[ReceivingUOMCode] [varchar] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[ReceivedDate] [datetime] NULL ,
[TimeIn] [varchar] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TimeOut] [varchar] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[CertificateNumber] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[CarrierVendorNumber] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[RegistrationNumber] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[OriginLot] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[DestLot] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[DGLNumber] [numeric](18, 5) NULL ,
[LoaderNumber] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[DriverNumber] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TransportDistance] [numeric](18, 5) NULL ,
[TrailerNumber] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TruckCode] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TripCode] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TRDistance] [numeric](18, 5) NULL ,
[TRDistanceUOM] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TRRate] [numeric](18, 5) NULL ,
[TRRateUOM] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TRDesc] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[LoaderRate] [numeric](18, 5) NULL ,
[TRType] [varchar] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
Fact table:
CREATE TABLE [dbo].[FACTGrading] (
[Time_SK] [int] NOT NULL ,
[Season_SK] [int] NOT NULL ,
[Load_SK] [int] NOT NULL ,
[Grower_SK] [int] NOT NULL ,
[CropVar_SK] [int] NOT NULL ,
[Weighbridge_SK] [int] NOT NULL ,
[Supplier_SK] [int] NOT NULL ,
[DestWarehouse_SK] [int] NOT NULL ,
[Fieldsman_SK] [int] NOT NULL ,
[Contract_SK] [int] NOT NULL ,
[GrossWeight] [numeric](18, 5) NULL ,
[NetWeight] [numeric](18, 5) NULL ,
[TotalWeight] [numeric](18, 5) NULL ,
[TotalWeightSG] [numeric](18, 5) NULL ,
[AllocatedQty] [numeric](18, 5) NULL ,
[PaidWeight] [numeric](18, 5) NULL ,
[Quality1_W] [numeric](18, 5) NULL ,
[Quality1_P] [numeric](18, 5) NULL ,
[Quality2_W] [numeric](18, 5) NULL ,
[Quality2_P] [numeric](18, 5) NULL ,
................
[Quality20_W] [numeric](18, 5) NULL ,
[Quality20_P] [numeric](18, 5) NULL ,
) ON [PRIMARY]
GO