Micro-Concept 1: The Containment Hierarchy
Top-down, broadest to narrowest:
| Level | What it contains | Example |
| Organization | One or more accounts (cross-region, cross-cloud) | ACME_GLOBAL |
| Account | Users, roles, warehouses, databases, resource monitors, network policies | ACME_PROD_AWS_US_EAST_1 |
| Database | Schemas (and account-scoped objects only at this level — itself, plus shares) | SALES_DB |
| Schema | Database objects (the 12 — see Micro-Concept 2) | SALES_DB.PUBLIC |
| Object | The actual table, view, function, etc. | SALES_DB.PUBLIC.ORDERS |
Every database automatically gets two schemas at creation: PUBLIC (default for new objects) and INFORMATION_SCHEMA (Snowflake’s per-database metadata catalog). You can drop PUBLIC if you don’t want it; you can’t drop INFORMATION_SCHEMA.
Fully-qualified naming. When you want to be unambiguous, use database.schema.object. If you’ve already USE DATABASE sales_db; USE SCHEMA public;, then orders alone resolves correctly. But scripts and shared queries should always use the full three-part name to avoid surprises.