Think of the built in unique identifier of a Thing (Entity) as your PK, and any Things that you “put” in this Entity as FK’s.
Bubble references datatypes within datatypes via their unique id’s. For the comfort of the user (you) you can chose to display what are nothing more than FK’s as another more comprehensive field than the UID string. (What bubble calls said things’ “primary field”).
In other words, Bubble’s DB functions exactly in the same way as your traditional DB- in fact bubble leverages postgresql with a bit of makeup.
Here’s a very simplistic illustration - pardon the misuse of the UML arrows, but I hope you get the idea. I didn’t use intersection tables to keep things compact.