# A clean schema and room for non-airport places (rian, 2026-09-15; decided the same day)

**The standing constraint.** Rian: *"I think a clean database is very important and also that we
plan as best as possible for scalability."* Applied to naming above all: **do not box the model in
with a noun that is narrower than the thing.** `locations` means airports today only because the
place's identity is an IATA code.

**What is coming, on his word:** cruise ports are *definite* ("we are definitely going to expand to
cruise ports", after the initial site; Adam's `cruise-ports` topic carries his port list and a Google
Doc), and other kinds of place (outlet malls were his example) are possible. The first non-airport
place is already in the database: the BorderShop at Puttgarden (code `SCA`, 1,806 listings), hidden
for want of anywhere to say where it is.

**Decided (15 Sep, at rian's request that the session decide for him):**
`.logs/planning/catalogue-model-decisions-2026-09-15.md` §2.11. A **place** becomes a row of any
kind (airport, cruise port, border shop, mall, ferry terminal, online), IATA an attribute; a
**shop** (today's `locations`) serves one primary place and may serve others; the comparison unit is
the shop counted once per primary place; places nest; the address shape stays per kind
(`/airports/...` as settled with Mark). Built after launch and before any non-airport shop is
collected; the BorderShop is the acceptance test. The analysis behind it stays in
`.logs/planning/places-and-shops-2026-09-15.md`. The words: `main/docs/VOCABULARY.md`.

See also [[database-map-artifact]].
