How to organize such a "mess" (Your words, not mine
) would depend how i would approach the programming.
i usually come from a Database-Approach (as weird as it may sound) regarding Normalization.
If it's the full OOP-Approach (see Mark's Answer):
Using Mark's example, TBuilding would be a Master-Table to TFloor, with TFloor having a Foreign Key to TBuilding, and TFloor being a Master to TRoom, with TRoom having a Foreign Key to TFloor.
Then i would sort out, which Attributes belong to which "Table" and so on.
Then it's easy (at least for me) to "reverse engineer" those "tables" back to Classes/Objects, and how they connect to each other, and which Property and/or method goes where.
Going the "simple" way:
A simple "table" holding all the information. Think having JSON-Objects as "content" of fields.
e.g. you have such a simple table called "TBuilding", and each record in that table represents a Floor.
you would have a Field "FloorNumber" and so on.
and one Field would be a JSON-Object containing all the TRoom's, with all its attributes
Bottom line: I would first analyze how the data is laid out you want to process.
If you have that, and decided which approach, it becomes more or less self-explaining