yes, that is the correct structure.
yes, you would have 5 tables, on the confirm page, a recordset for each table, in each recordset, the where clause would use the cart weight, for example:
SELECT * FROM deliveryeurope WHERE DeliveryEuropeMin >= paramCartWeight AND DeliveryEuropeMax <= paramCartWeight2
variables:
name: paramCartWeight
type: Number
default value: -1
Run Time Value: $yourCart->TotalColumn("TotalWeight")
name: paramCartWeight2
type: Number
default value: -1
Run Time Value: $yourCart->TotalColumn("TotalWeight")
you would have 5 set session value behaviors to capture the amount from each recordset.
another set session value behavior to capture the selected ship type.
in each of the 5 rules, you would use the ship type session value as the trigger
and the ship amount session form the corresponding recordset as the flat rate value.