Hi Ravi - the MessageDefinition.table is high level and defines the schema or class that is associated with the data load. The level of information defined in the MessageDefinition.table is not specific to a partition (same goes for defining a class in AML, it's done at the variant level). Whereas the MessageConfiguration.table stores information that is partition specific including a pointer to the data source which is partition specific.
Take an example where you have a Variant with 2 partitions. Partition 1 is for the USA, Partition 2 is for Canada. Take the Supplier data load as an example. Both partitions require a data load for supplier referencing the Supplier class. The USA partition needs to load suppliers for USA user usage, and the same goes for the Canada partition. So in this case, the 2 data loads both reference the Supplier class in the MessageDefinition.table, which is why it's at the variant level. Both the data source reference needs to be distinct, and this is taken care of at the partition level MessageConfiguration.table.
That was very nice.Even Rules also follow the same logic which are defined in variant level.