“tables do not have first-class references”—yes, traditionally, foreign-key relationships have been up to the query author to interpret manually via joins. There’s no reason those references can’t be first-class though, other than tradition. The reason I’m pushing back is because I’m hard-pressed to think of a real-world scenario that’s better modeled using nested data rather than some form of normalized table structure that represents the same relationship graph. Back from my web-dev days, I can count on a single hand the number of times I used the JSON cell type in Postgres—it was always some unusual use case. The problem with a nested data model is that the nesting necessarily prioritizes one side of the relationship. Consider the classic example of “Users” and “Posts”. In a nested model, you’d nest the posts under users; but that means to get all the posts to filter, sort, etc, you necessarily have to look at all the users! In pseudocode: map each user to users.posts, flatten the lists, then filter. Normalized tables let you treat both Users and Posts as first class entities: you can query each without necessarily having to route through the other.