If you'd like a code analogy:
Dimension Tables is a "Enum type definition". Every Dimension row is a variant of this "Enum".
E.g. a list of birds known to you.
Fact Table is the "Enum" variable holding a single value.
E.g. historical list of birds you have seen over time. Each occurrence references the bird type you've encountered.
The only difference with Enums you know is that in the code an Enum represents a fixed set of variants known beforehand.
But in case of databases those sets are not fixed and they can grow (or even shrink) over time.