Frest: malleable software with a relational foundation

Just discovered this community.

I’ve been talking and writing about malleable software most of my adult life.

There are ways of making programming easier/more user friendly, etc, but I think the royal road to malleable software is to centre the relational model.

All business software frameworks should start out much like FileMaker or Access. And all business software should feel like a customised FileMaker — that relational layer should always be right there.

Querying should be Datalog. The reason we don’t have this vision I’m describing is the only relational query language anyone’s ever properly implemented is SQL, which is abominable. This single mistake has bent the software entirely out of shape.

The relational model would be tightly integrated with programming systems. Most of most business apps can actually be expressed within the relational model.

There is much more, including extensive discussion of automatic UI generation, APIs and composition, at frest.substack.com.

2 Likes

Thank you for sharing your project. I’m reading through the articles on Substack, and I resonate with many of the ideas. It’s fascinating you’ve decided on the relational model as foundation, not only of the data layer but the entire system. I’m trying to picture what that means, the implications of this approach.

I’m only superficially familiar with the term in relation to SQL and its origin in Codd’s A relational model of data for large shared data banks (1970). Rows, columns, tuples. Projection, selection, joins.

In the 1960s, Codd worked out his theories of data arrangement.. To his disappointment, IBM proved slow to exploit his suggestions until commercial rivals started implementing them. Initially, IBM refused to implement the relational model to preserve revenue from IMS/DB, a hierarchical database the company promoted in the 1970s.

I’m a big fan of the tree structure - for some years developing a tree-based template language and user interface design system; but I understand trees can be expressed as a subset of the relational model. I suppose that’s true of graphs and graph databases? The latter is described as a “post-relational” database model, which suggests that it has unique advantages for certain use cases. I think it helps me understand what the relational model is, by comparing it with other data models that are not relational, or based on different paradigms of relations.

IBM did not use Codd’s own Alpha language but created a non-relational one, SEQUEL. Even so, SEQUEL was so superior to pre-relational systems that in 1979 it was copied by Larry Ellison, based on pre-launch papers presented at conferences of Relational Software Inc, in his Oracle Database.

There was a fork in the road of history, and SQL was chosen. I wonder about this Alpha language, described by Codd in the following paper.

The ALPHA sublanguage is a language for manipulating relations. It possesses the following characteristics:

  1. The full power of the relational calculus - an applied predicate calculus with tuple variables;
  2. The capability of specifying any of the operations:
    1. fetch value or set of values
    2. change value or set of values
    3. insert element (i.e., tuple) or set thereof into a relation
    4. delete element (i.e., tuple) or set thereof from a relation
    5. declare a relation and its domains for inclusion in the established set of data base relations
    6. drop a relation from the data base.
  3. The capability (through RANGE statements) of delimiting the scope of interaction between a user or his program on the one hand and the data base on the other;
  4. A variable binding capability to permit use in either an interactive or batch environment.

The language is accordingly more than a query or search language. In this author’s opinion the frequent separation of query languages from other aspects of retrieval is usually artificial. The proposed language is intended to be a sublanguage (in a semantic rather than syntactic sense) of the languages used by all terminal users of a shared, formatted data base, except those users who have such narrow needs that their requirements can be more efficiently satisfied by a set of pre-structured (or canned) queries and/or updates.

It is also intended to be a sublanguage of such host programming languages as PL/I, Cobol and Fortran.

Interesting, it was meant to be a domain-specific sublanguage. I imagine some programming languages integrate database operations as part of the language specification, instead of a separate DSL/SQL or standard library.


I was curious about this FileMaker mentioned, and found a sweet article written by someone who was inspired by it early in their career as a business application developer.

It wasn’t just a database. It was a development environment that allowed you to design user interfaces intuitively, using drag-and-drop, without needing complex code. You could lay out forms, assign actions, and connect everything to a live database in just a few clicks.

..What made FileMaker even more revolutionary at the time was something called CDML (Claris Dynamic Markup Language). It allowed you to embed database fields directly into HTML-like code, and display or manipulate data in the browser.

But he laments the current state of affairs with “no code” app/UI builders.

The world is filled with no-code tools. .. And yet, none of these modern tools quite match the “satisfaction” I felt with FileMaker. The responsiveness, the seamless integration between UI and logic, the feeling that you’re “actually building something” — that’s still missing..

He still dreams of “a platform that would allow developers and non-developers alike to create fully functional web-based business tools visually and intuitively.”


Could you elaborate on this part, how the relational model can be used to “express” an application? It sounds like the application state/actions/interface is treated as a unified data model.

Thanks for taking the time to respond in such detail.

Many things I could say. Probably time I wrote another blog post. :slight_smile:

One thing worth pointing out to this audience is that a relational database is a restricted kind of logic programming — it’s basically the most expressive logic you can have that isn’t Turing Complete.

And this has the advantage that anything that is a consequence of the data and the rules is guaranteed to be computable in finite time.

Another way to think of it is that the relational model is the essence of the notion “declarative”.

Because SQL poisoned the well, we’ve missed the opportunity to express business logic in the richest possible declarative way. Instead, we represent business logic using TC languages, which gives us the fragility, security issues, and poor reusability that characterises the software industry.