I had to think about the database design of ProcessWire (PHP CMS).<p>It uses one table for identifiers and field tables for all data connected to the identifier.
To store a user with a username, a password and an email address it uses 3 tables. One for the username (identifier), one for the password and one for the email address.<p>The only safe way to insert a user is by using transactions.