The point of a DMZ is to place any systems in there which must be reached by external systems directly but also require access to backend systems which must not be accessed directly by external systems.
A backend database used by a public-facing website is a perfect example of such a backend system which should not be placed in the DMZ but behind it.
Customers Internet
|
====Firewall====
| DMZ
Webserver
|
====Firewall====
| Internal network
DBserver--Employees
When you also want to isolate your database from the local LAN (to protect against internal attackers), you could set up a two-tier DMZ where an additional firewall shields backend-systems from the LAN so that only authorized employees may access them and may only access those services on the machine you want them to access.
Customers Internet
|
====Firewall====
| DMZ1
Webserver
|
====Firewall====
| DMZ2
DBserver
|
====Firewall====
| Internal network
Employees
But sometimes you don't want your employees to have any direct access the database server, even when they have personalized user accounts on it. Most database systems allow you to set user accounts with read- or write permissions to certain tables, but when you want to have fine-grained control over what data each user can and can't access, the build-in permission handling of your database might be insufficient. In that case you would have a separate application server between DBServer and employees which works as an abstraction layer between the employees client program and the database just like the webserver does for the customers. The application server might in fact be a webserver (an internal web interface).
Customers Internet
|
========Firewall========
| DMZ1
Webserver
|
========Firewall========
| DMZ2
DBserver--AppServer
|
========Firewall========
| Internal network
Employees
You might even go further and introduce a 3rd DMZ to place the internal application server in. This would protect the DBserver in the case that an employee totally compromises the application server and uses it to launch an attack which is not SQL-based against the DBserver. But that would already be a very paranoid level of security. However, there might be high-security organizations where such a level of paranoia is justified.
Which option you choose depends on the level of security you need. When you have a small team and you can trust them to not attempt any l337 h4x0r stuff on the database server, the simpler option 1 is sufficient. But when you have a very large internal network with hundreds to thousands of clients and you can not vouche for everyone to be trustworthy, you have to consider your LAN as just as dangerous as the internet and have to shield any internal-facing applications with an additional firewall and choose option 2 or 3.