When designing a Supabase database, most developers start with tables. Tables store the actual application data. But sometimes you need a convenient way to combine or present existing data without creating another copy. That is where database views become useful.
What Is a Table?
A table stores data. For example: users orders products payments An order table might contain:
id user_id total status created_at This is your source data.
What Is a View?
A view is a saved database query that presents data from one or more tables. For example:
orders + users ↓ customer_orders view The view can present combined information without duplicating the underlying records.
Why Use a View?
Imagine your dashboard repeatedly needs: Customer Name Order Number Order Total Order Status Instead of writing the same JOIN query everywhere, you can create a view. Then your application can query the view.
Tables Store, Views Present
A simple way to remember it: Table = source data View = convenient representation of data This distinction helps keep your database organized.
Example Dashboard
Suppose your application has: users orders A dashboard might need: user_name order_count total_spent A view can combine those values into a convenient result.
Views Can Reduce Repeated Queries
If multiple parts of your application need the same complex query, a view can provide a reusable database interface. This can make application code easier to read.
Views Are Not Always Faster
A view does not automatically make a query faster. A normal view generally represents a query that PostgreSQL evaluates when accessed. If the underlying query is expensive, the view can still be expensive. For performance-sensitive workloads, a materialized view may be more appropriate.
Security Considerations
Views should also be reviewed carefully when your application uses Row Level Security. Ask: What data does the view expose? Who can query it? Does it reveal information users should not see? How does it interact with your access policies?
When to Use a Table
Use a table when you need to store actual application records. Examples: Users Products Orders Messages Payments
When to Use a View
Use a view when you need a reusable representation of existing data. Examples: Reporting Dashboards Joined datasets Read-only application data
Final Thoughts
Tables and views are not competing technologies. They solve different problems. Use tables to store your application's source data. Use views when you need a reusable way to query and present that data.
For growing Supabase applications, understanding this difference can make your database architecture much cleaner.