Naming Columns by Type

What good names look like for each data type, with example sets for a typical table.

Identity columns

Use id for a simple surrogate key, or <table>_id when joins should stay unambiguous. UUID keys read well as user_uuid. Whatever you choose, foreign keys referencing it must use the identical name.

Boolean columns

Prefix with is_, has_, or can_ so the name reads as a yes/no question: is_active, is_verified, has_children, can_edit, allow_notifications. A bare active or deleted forces every reader to check the type first.

Timestamp columns

The _at suffix marks instants: created_at, updated_at, published_at, expires_at, last_login_at. Calendar dates get _date: birth_date, start_date. The soft-delete standard is deleted_at with NULL meaning active.

Text and descriptive columns

Singular nouns, qualified only when needed: first_name, email, phone_number, description, notes, slug, locale. URLs get _url (avatar_url); codes get _code (country_code).

Numeric columns

Name the thing being measured: total_amount, unit_price, quantity, tax_rate, discount_pct, view_count, sort_order. Avoid bare total, value, amount — total of what?

A full example: an orders table

ColumnTypeWhy it works
order_idprimary keyUnambiguous in joins
customer_idforeign keyMatches the customers PK name
order_statustextQualified — not bare status
total_amountnumericSays what is summed
is_paidbooleanReads as yes/no
created_attimestampStandard _at suffix
deleted_attimestampSoft delete; NULL = active

Generate a set like this for your own table with the free database column name generator — enter the table name, pick Mixed, and curate the shortlist.