Project:M36 Relational Algebra Engine
Introduction
Project:M36 implements a relational algebra engine as inspired by the writings of Chris Date.
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.
Use-Cases
Project:M36 supports multiple frontends which target different audiences.
- learn about the relational algebra via TutorialD
- store and manipulate databases
- use Project:M36 as a native Haskell database backend
Documentation
- Installation and Introduction to Project:M36
- Introduction to the Relational Algebra
- TutorialD Tutorial
- Transaction Graph Operators
- On NULL (in SQL)
- Persistent Library Driver
- ProjectM36.Client Library
- Adding New Data Types
- ACID Database Properties
Development
Project:M36 is developed in Haskell and compiled with GHC.
Important modules:
- Relation - represents a relation in the relational algebra and implements the relational operators
- Relational Expressions - represents a composable abstract syntax tree for the relational algebra
- Tutorial D Interpreter - one available frontend to evaluate relational expressions
- ProjectM36.Client- user-facing native Haskell library
Other modules include:
- displaying a relation as HTML
- displaying a relation in the terminal
- displaying a relation using gnuplot
- relational expression static optimizer
- relational expression cost-based optimizer
- relational error enumeration
- import of CSV as a relation and export of a relation to CSV
- import of TutorialD from files