Other People's Money

I was in third grade when I saw international currency for the first time. I hadn’t considered that money from other places might be different than the US Dollar, and it was a delightful shock when my mom showed me a French banknote. The style! The color! It was gorgeous.

Check out the Costa Rican money above. The design is wonderful, the printing intricate and precise. More details emerge the closer you look – check out the multicolored fibers in the paper to prevent counterfeiting!

I started collecting banknotes about fifteen years ago, focusing on defunct international currencies and hyperinflationary money. I now have well over a thousand notes from … a lot of countries? I’m not sure.

I need to build a catalog to figure that out.

Let’s build one!

What’s in a Banknote?

Banknotes seem pretty simple. Why would I need a fancy database to track a piece of paper from a particular country with a particular value?

Let’s get into it.

Costa Rica Obverse

The front of the bill contains a lot of info –

  • The name of the issuing bank (Banco Central de Costa Rica).
  • A portrait of Rafael Yglesias Castro and some neat flowers.
  • The denomination (five) and the currency (Colones).
  • The serial number (D56946137) and printing series (D).
  • A date (October 4, 1989) and some text (Acuerdo de junta directiva No 4).
  • A couple of signatures.

Costa Rica Reverse

The reverse also has some interesting parts –

  • A scene of bustling commerce titled “Alegoria. Teatro Nacional. J. Villa 1897”
  • The bank name, currency, and denomination again
  • The name of the company that printed the banknote (Thomas De La Rue & Company Limited)

Almost every data point above gets … complicated.

For example, the very idea that a banknote is from a country.

Banknotes have been issued by cities, states, and regional authorities. Countries come and go, governments rise and fall. I don’t want to recreate a taxonomy of geopolitical and economic boundaries – but I do want to capture the gist of what region and era a banknote is from.

To keep it simple, I’m running with the idea of a “region” that has a name and some other metadata to help us distinguish it – like notable dates or other information from Wikipedia.

Even so, identifying the region isn’t always easy. It’s simple enough for me to search for latin characters, but I have no idea what to do with འབྲུག་རྒྱལ་ཁབ or ኢትዮጵያ or Монгол Улс. I need a way to visually identify regions, so storing their names in the local language is also important.

(Those are Bhutanese, Ethiopian, and Cryllic alphabets if you were curious)

Making things a little more spicy are the security features in banknotes: watermarks, windows in polymer notes, mylar strips, holograms, color changing ink … modern banknotes are amazing pieces of tech.

Serial numbers and grading throw off the model again. If I have more than one of those Costa Rican notes, I want to catalog their individual serial numbers and conditions. There are also variations between individual notes that impact the interest and value – cancellation marks, specimens, even counterfeits!

Just to make things a little more spicy, there are banknotes that are overprinted – which means a bank took an existing banknote and stamped a new currency on the top of it! This is fairly common with hyperinflation banknotes, and another oddity that needs to be modeled.

Modeling the Beast

Taking all of the above into account makes for a somewhat complex set of relationships. At the top of the model is an individual Banknote, and the bottom is the Region table. Everything in-between represents the complexities of modeling international currencies.

I’m sure I’ve missed a few things, and I welcome feedback from folks who see opportunities to improve this schema!

erDiagram BANKNOTE }o--|| MASTER : "instance of" BANKNOTE { string serial string notes } MASTER }o--|| CURRENCY : "belongs to" MASTER { int denomination string obverse string reverse date printed_on } MASTER }o--o| CURRENCY : overprint CURRENCY { string name string symbol string issued_on string withdrawn_on string lapsed_on } CURRENCY }o--|| AUTHORITY : "belongs to" AUTHORITY { string name } AUTHORITY }o--|| REGION : "belongs to" REGION { string name string localized_name } BANKNOTE }o--o{ BANKNOTE-FEATURE : "has many" BANKNOTE-FEATURE { string name } MASTER }o--o{ MASTER-FEATURE : "has many" MASTER-FEATURE { string name } BANKNOTE }o--o| GRADE : "may have" GRADE { string name string description } MASTER }o--o| PRINTER : "may have" PRINTER { string name } MASTER }o--o| MATERIAL : "may have" MATERIAL { string name } PRINTER }o--o| REGION : "may have"


Building the catalog took a couple of evenings, and it’s open source if you’re interested in using and/or hacking on it.


I added a couple of my favorite high denomination banknotes to test it out, including the Hungarian Egymilliard Billionen Pengo – that’s one billion trillion Pengo! 1,000,000,000,000,000,000,000! 10e21! That’s a lot of Pengos. It was printed at the end of Hungary’s hyperinflation period in the 1940s, and is the largest denomination bill ever made.


We’ll nerd out on this later.

In the meantime, I’m always happy to get questions, feedback, and pull requests. Cheers!