Canonical wine, offer and listing
The three-layer model that keeps wine data clean — why one wine, many offers, many listings.
Canonical wine, offer and listing
The single most important idea in Wine2You: three things that never duplicate each other.
The three layers
| Layer | Is… | Owned by | Key fields |
|---|---|---|---|
| Wine | a fact about the world | the register | producer, vintage, appellation, grapes… |
| Offer | one Originator's willingness to sell | Originator | stock, seller_price, permissions |
| Listing | a Seller's shelf entry | Seller | shelf_price, channel_id |
┌──────────────┐
│ WINE │ descriptive · canonical · one per wine
└──────┬───────┘
│ 1..n
┌──────┴───────┐
│ OFFER │ supply · price · permissions (per Originator)
└──────┬───────┘
│ 1..n
┌──────┴───────┐
│ LISTING │ shelf price (per Seller, per channel)
└──────────────┘
Why this matters
- One wine — no per-supplier duplicates; matching is central, so enrichment and search stay clean.
- Many offers — ten merchants can offer the same wine at different prices without touching the wine record.
- Many listings — the same offer can sit on several shelves at different shelf prices.
- Inventory is separate — stock is a quantity of a variant at a location, decoupled from both.
What this buys you
- Your offer is never corrupted by another merchant's pricing.
- A wine's descriptive data is enriched once and shared.
- Deleting a listing never touches the wine; deleting an offer cascades to its listings only.