Magento offers great flexibility when it comes to setup, configure or design your shop. But with great flexibility often also comes great confusion. Especially when Magento's built-in interfaces are ambiguous and sometimes not easy to understand and to use.
In this blog post you'll learn what websites, store (groups) and store (views) are, how they are connected to each other and which data ist connected to those. In addition you'll find my new module "Aoe_ManageStores" that offers a much more intuitive interface for managing your shop structure.
If you login to your Magento backend and go to System > Manage Modules you'll find this interface:

There you'll find the terms "Website", "Store" and "Store view". This is really confusing as soon as you start digging into the code because there those terms are mapped to "Website", "Store Group" and "Store View":
| Backend Label | Website | Store | Store View |
|---|---|---|---|
| Model Class | Mage_Core_Model_Website | Mage_Core_Model_Store_Group | Mage_Core_Model_Store |
| Database Table | core_website | core_store_group | core_store |
To always be clear I'll stick to the terms "Website", "Store Group" and "Store View".
In addition to these configurable layers there is also the "default" scope. This makes four layer where stuff can be configured. But note that you can't do everything in all scopes.
Here's a matrix of what features are supported by which layer/scope:
| Default | Website | Store Group | Store View | |
| Product settings | X | X | ||
| Product prices | X | X | ||
| Product tax class | X | X | ||
| Base currency | X | X | ||
| (Default) display currency | X | X | ||
| Category settings | X | X | ||
| System configuration settings | X | X | X | |
| Root category configuration | X | |||
| Orders | X | |||
| Customers | X | X |

The table and class structure is not very clean: There is some redundant data. Also note that the website has an own flag describing if it is the default website or not, while store group's and store view's default status will be managed by their respective parent objects.
The store view is the only entity of those that can be in an deactivated state.
Magento always runs in a specific store. If noone is explictly set (e.g. by server variable MAGE_RUN_CODE or by get paremter in the url) the default store in the default store group of the default website will be displayed.
The store groups feel somehow superfluous as their own purpose seems to be defining the root category the stores attached to it.
Basically websites, store groups and store views build an hierarchic structure. Too bad this isn't reflected by Magento's default interface for managing those.
And this is why I created the module "Aoe_ManageStores". It replaces the "Manage Stores" interface in "System > Manage Stores".

It shows everything in a structured way and adds additional data:
Checkout Aoe_ManageStores on GitHub or download the latest version directly from there:
Recent Comments