Magento CE 2.1.3 database diagram

About a year ago I released the Magento CE database diagram and since then, also with the increasing popularity of Magento 2, there have been requests for a Magento 2 database diagram.

This is the database diagram of a fresh CE 2.1.3 installation.

Some statistics (because I love numbers):

  • Magento CE 2.1.3 consists of 315 tables (that’s 18 tables less compared to Magento CE
  • 1 table starts with core_* (compared to 19 tables in M1)
  • 38 tables start with sales_* (compared to 47 tables in M1)
  • 76 tables start with catalog_* (compared to 84 tables in M1)

What’s new?

These are the changes I found so far:


  • core_resource can was renamed to setup_module
  • the core_* prefix was removed: core_layout_link is now layout_link, core_layout_update is now layout_update
  • sales_flat_*/sales_* was removed as prefix. For example sales_flat_order is now sales_order.
  • setup_module (former core_resource)
  • authorization_role (former admin_role)
  • authorization_rule (former admin_rule)

New tables:

  • admin_system_messages
  • customer_grid_flat
  • design_change
  • design_config_grid_flat
  • eav_attribute_option_swatch
  • googleoptimizer_code
  • password_reset_request_event (part of the Security module)
  • quote_id_mask
  • reporting_* tables (for NewRelic Reporting)
  • sales_sequence_meta
  • sales_sequence_profile
  • sequence_order_0 (SalesSequence module manages sequences for next system entities and flows for order, invoice, shipment and credit memos)
  • sequence_order_1
  • sequence_invoice_0
  • sequence_invoice_1
  • sequence_shipment_0
  • sequence_shipment_0
  • sequence_creditmemo_0
  • sequence_creditmemo_1
  • theme
  • theme_file
  • ui_bookmark

Removed (=tables you won’t find in the M2 database diagram any more):

  • admin_assert
  • All api_* tables
  • core_email_queue
  • core_email_queue_recipients
  • permission_block
  • permission_variable
  • All tag_* tables (no more Mage_Tag!)
  • wee_discount

Database diagram

Here’s the DB diagram of a fresh Magento Community Edition 2.1.3.

I tried to keep at least the bigger parts of the DB diagram similar to the version of the CE db diagram to make it easier to understand what has changed.

The big yellow part on the left are the catalog tables, the big blue part on the right are the sales tables. Inbetween them there are the EAV tables and core tables. The smaller modules are on the bottom part of the db diagram.

If you like it, go an upvote my answer(s) on Magento Stackexchange:

Magento Community Edition 2.1.3 database diagram
Magento Community Edition 2.1.3 database diagram


Inofficial Magento 2 Roadmap

As there is no official Magento 2 Roadmap (yet), I initiated an official inofficial Magento 2 Roadmap. The idea is to have a single point where you can find new stuff that is planned for Magento 2. This should make it easier for everyone of us dealing with Magento 2 to plan ahead.

You can find it at

Contributions in form of Pull Requests are highly welcome to keep this list up to date. If you add a new item to the roadmap list, please provide a link to the source as well. Thanks!

Magento Report: Find out number of orders per day

Today I was curious to find out about the days where most of the orders were placed.

If you want to find out about the same, use this SQL query:

SELECT COUNT(*) as orders_per_day, date(created_at) as day
FROM sales_flat_order
GROUP BY date(created_at)
ORDER BY orders_per_day DESC

See also:

Upgrade to Ubuntu 16.04 and bringing Magento 2 back to life

I upgraded from Ubuntu 14.04 to Ubuntu 16.04 lately. This brings the joy of PHP 7.0.4 and Apache 2.4. As I run Magento 2 locally for testing purposes, I found it did not work anymore after the upgrade.

Actually I had 3 problems:

1.) Missing PHP extensions

I decided to start a new Magento 2.0.5 setup to check the requirements. From there I found out that I was missing some PHP extensions, so I installed them:

sudo apt-get install php-curl
sudo apt-get install php-intl
sudo apt-get install php-mbstring
sudo apt-get install php-zip

2.) MySQL

After reloading the Magento 2 front page, I got a strange SQL error on the fronted (sorry, I did not copy the error message). I found out that also MySQL workbench did not like to connect to my local MySQL server („[ERROR] Native table ‚performance_schema‘.’session_variables‘ has the wrong structure“ and some more). Somehow it seemed that also MySQL was not running, so I started and restarted MySQL and everything was fine again. Hm.

3.) Enable Apache 2.4 rewrites

The homepage came back on screen, but I was not able to open the admin login page or any other pages. I thought this would have been caused by a missing mod_rewrite, but this was in place.

Somehow I ended up on the devdocs where a solution for the Apache 2.4 rewrites was in place:

Just add the following piece to your 000-default.conf file:

sudo nano /etc/apache2/sites-available/000-default.conf
<Directory "/var/www/>
 AllowOverride All

Hope this helps anyone running into the same problems.

Oh, and btw: Make sure you run at least Magento 2.0.1 for PHP7 fun 🙂

The perfect Magento 2 setup for development

Please note: This article is work in progress!


I had the pleasure to attend MageUnconference again this year (thanks to Modulwerft – Simon Sprankel for the ticket btw!). As usual for an Unconference, we collected the topics for our daily programme in the morning. Out of some discussions I had with Matthias at the office regarding the easiest/best/most painless way to set up an environment for M2 module development, we decided to put this as a topic on the wall for voting and discussion with other attendees.

A few minutes and a lot of votes later, we’ve found ourselves in a packed room full of developers who wanted to hear and discuss with us about this topic as well.

Spoiler: You’re maybe not gonna find the perfect Magento 2 setup for module development in this article. This is a collection of things that can be useful for your setup and what we discussed during our session at MageUnconference.

Out of scope: This article is not about setting up a new project with Magento 2. I do only focus on the development of a single module here.


Various M2 module development methods

Seperate Repository

The first method I’d like to share here is the method of setting up a single repository for your new module: This can either be a local repository or a remote one on GitHub/Bitbucket.

Add this module to your composer.json just as any 3rd party module and you’re good to go.

    "require": { "avoelkl/mymodule": "*" },
    "repositories": [
            "type": "git",
            "url": ""


+ Easy way to start and set up

+ There’s only the need to add your module to composer.json, no additional registration/modification needed.


– You have to do a lot of git commits/push/pulls/composer updates for your changes to take effect

– You’ll generate a lot of unneccessary commits during development (especially if you’re new to M2 development and trying out some stuff)


Working in the vendor dir

This approach it pretty straight forward: Set up a new Git repository, add it to the composer.json and run composer update. You’ll find your module files in the vendor directory afterwards, where you can edit them.

While I personally do not prefer this method as it feels rather dirty to me, applying changes and developing directly in the vendor folder seems not to be so unusual among Magento developers present in the MageUnconference session.


+ no need to commit every change to test it


– It’s not very obvious where the extension development happens.

– When someone else/you decide to remove the vendor folder completely (which should not be a problem usually, as you can always get the recent packages via composer install/upadte), you will lose all your uncommitted changes.

At least composer warns you if you have got modified content in the vendor dir when running a „composer update“ so you don’t lose your changes without confirming before.

Symlink to your module

Another easy way, which requires no Git repo at all to get started (but seriously, who wants that?) is to create a symlink in app/code to your module files outside the Magento folder structure.


You could also be interested in including a local repo via composer path

    "repositories": [
            "type": "path",
            "url": "../../avoelkl/mymodule",
            "options": {
                "symlink": false

Folder Structure

From Magento 1 we’re used to work with our own folder structures and symlink them later via modman file.

Most of the current M1 modules I know either have the `app/` folder directly in their extension repo or a `src/` folder above them:

Version 1:

  • app/ modman

Version 2:

  • src/
  • src/app
  • test
  • modman

It seems to me (from what I can see in the official Magento 2 sample modules) that such a folder structure is not the default somewhat suggested, I think this is not very flexible.

  • .git
  • Block/
  • etc/
  • Model/
  • Observer/
  • view/
  • registration.php
  • composer.json

Different Ways of Setups

Fabian Schmengler (@fschmengler)

Fabian explained his current structure during the session.
The folder structure looks like this:

/var/www/m2.local/MyExt <= this folder also contains the .git dir

registration.php & Subfolders


Daniel Falke (@flyingmana)

David Verholen (@david_verholen)

Max Pronko

Max wrote a Blogpost about how to develop a Magento 2 module with modman

Präsentation beim 15. Magento Stammtisch Wien

Beim 15. Magento Stammtisch in Wien habe ich eine modifzierte Form meines „Secure input and output handling“ Talks präsentiert. Nachdem die Teilnehmer des Magento Stammtisches nicht nur Entwickler, sondern auch Projektmanager, Händler und Agenturen sind, habe ich ihn etwas weniger technisch gestaltet 🙂

Updating PhpStorm Desktop/Launcher icon on Ubuntu

I keep forgetting how to edit my desktop entries after updating PhpStorm on my Ubuntu installation.

This is the file that needs to be edited: ~/.local/share/applications/jetbrains-phpstorm.desktop

Just update the paths for the Icon & Exec after the update:

cat ~/.local/share/applications/jetbrains-phpstorm.desktop
[Desktop Entry]
Exec=“/opt/PhpStorm-143.1184.87/bin/“ %f
Comment=Develop with pleasure!


Vierter MageStackDay am 15. und 16. Jänner 2016

MageStackDayNach zwei sehr erfolgreichen Online-Events und einer Pause im Herbst 2015 ist es im Jänner Zeit für eine neue Auflage des MageStackDays!

Am 15. und 16. Jänner treffen wir uns wieder online, um gemeinsam Fragen auf zu beantworten, zu schließen, zu verbessern, aufzuräumen und die Qualität dieser Plattform zu verbessern.

Abgesehen von der Plattform arbeiten wir derzeit an der neuen Version unserer Webseite, über die die Registrierung möglich sein wird.

Als nettes Extra gibt es MageStackDay sticker, die entweder persönlich bei den Organisatoren des MageStackDays erhältlich sind (Sander Mangel, Anna Völkl, David Manners) oder online via StickerMule bestellt werden können.

500 dieser wunderbaren Sticker, die wir weltweit verteilen, verdanken wir dem Sponsoring der CopeX GmbH!

Zur Unterhaltung und Informationsaustausch verwenden wir unsere MageStackday Slack Team. Bitte kontaktiert mich, wenn ihr eine Einladung für die Gruppe möchtet.