users vs user
The oldest naming debate in database land: should a table be named for the many rows it holds (users) or the one entity each row represents (user)? Here is the honest case for both sides.
The plural case
Team plural says…
A table is a collection of rows, so the name should be plural: users, orders, order_items. This is the default in Rails, Django and Laravel, and it is what most style guides and engineering standards documents prescribe. When your ORM maps a User class to a users table automatically, fighting the framework costs you configuration on every model. Plural also reads well in aggregate queries: SELECT COUNT(*) FROM orders counts orders — the plural feels right.
The singular case
Team singular says…
Each row represents one entity, and the table is the definition of that entity — so user, order, order_item. SQL-first teams like this because SELECT * FROM user WHERE id = 1 reads like plain language: "select from user where id is 1." It also matches the model class name exactly (User → user), which some developers find cleaner than the pluralization guessing game — no more arguing whether it is person → people or persons.
What the frameworks expect
Your framework's default is usually the right answer for your project. Rails inflects User → users, LineItem → line_items, even handling irregulars (Person → people). Django and Laravel follow the same plural convention. If you go singular against the grain, you will be writing explicit table-name mappings on every model — a tax that never stops. SQL-first codebases with no ORM are free to choose, and many pick singular for readability.
The verdict: consistency wins
Here is the part both camps agree on: a mixed schema is worse than either convention. A database with users, order and Product in it is a bug farm — every query becomes a guessing game, and every new hire trips over it. Pick plural or singular on day one, document it in five lines, and enforce it in code review. The convention you can keep is better than the convention you cannot.
Our table name generator has a one-click plural/singular toggle, so you can mint names in whichever convention your team chose. For the rest of the rulebook, see the table naming guide and table name examples.