Ξ Project:M36 Relational Algebra Engine
![Github Workflow status](https://github.com/agentm/project-m36/workflows/CI/badge.svg)
Software can always be made faster, but rarely can it be made more correct.
Introduction
Project:M36 implements a relational algebra engine as inspired by the writings of Chris Date. Project:M36 supports both SQL and TutorialD interactive access.
Quick Install
Project:M36 can be downloaded and run via docker, which supports Windows 10+, macOS, and Linux.
Run docker run -it projectm36/project-m36 tutd
to start the TutorialD command line interface.
Run docker run -it projectm36/project-m36 sqlegacy
to start the SQLegacy (SQL dialect) command line interface.
Description
Unlike most database management systems (DBMS), Project:M36 is opinionated software which adheres strictly to the mathematics of the relational algebra. The purpose of this adherence is to prove that software which implements mathematically-sound design principles reaps benefits in the form of code clarity, consistency, performance, and future-proofing.
Project:M36 can be used as an in-process or remote DBMS.
Project:M36 is written entirely in the Haskell programming language.
Sample Session
![asciicast](https://asciinema.org/a/3syu35c8cydm403292a74l1n5.png)
Use-Cases
Project:M36 supports multiple frontends which target different audiences.
- learn about the relational algebra via TutorialD
- use SQLegacy to learn how SQL differs from the relational algebra
- store and manipulate databases
- use Project:M36 as a native Haskell database backend
Community
Documentation
Introductory Materials
- Installation and Introduction to Project:M36
- Introduction to the Relational Algebra
- TutorialD Cheatsheet
- TutorialD via Jupyter Notebook Walkthrough
- TutorialD Tutorial
- 15 Minute Tutorial
- Developer's Change Log
- Simple Client API
- CSV Import/Export
- Developer Setup
Database Comparisons
- ACID Database Properties
- On NULL (in SQL)
- Reaching "Out of the Tarpit" with Project:M36
- An Architecture for Data Independence'
SQL Support
- Why SQLegacy?
- SQLegacy Documentation
Advanced Features
- Transaction Graph Operators
- ProjectM36.Client Library
- Data Frames for Sorting
- Adding New Data Types
- Database-Manipulating Functions
- Serving Remote ProjectM36 Databases
- Using Notifications
- Merge Transactions
- Atom (Value) Functions
- Trans-Graph Relational Expressions
- Isomorphic Schemas
- Replication
- Basic Operator Benchmarks
- Merkle Transaction Hashes
- Handling DDL Changes
Integrations
- WebSocket Server
- Jupyter Notebook Kernel
- Persistent Driver
Development
Project:M36 is developed in Haskell and compiled with GHC 8.8 or later.
Related Projects
- The Third Manifesto: the philosophical basis for relational algebra engines
- Rel: a TutorialD implementation against a BerkeleyDB backend
- Andl: a new database language with SQLite and PostgreSQL backends
- Coddie: a python-based relational algebra interpreter
Suggested Reading