| CARVIEW |
project-m36: Relational Algebra Engine
A relational algebra engine which can be used to persist and query Haskell data types.
[Skip to Readme]
Modules
[Index] [Quick Jump]
- ProjectM36
- ProjectM36.AccessControl
- ProjectM36.AccessControlList
- ProjectM36.Arbitrary
- ProjectM36.Atom
- ProjectM36.AtomFunction
- ProjectM36.AtomFunctionBody
- ProjectM36.AtomFunctionError
- AtomFunctions
- ProjectM36.AtomType
- ProjectM36.Atomable
- ProjectM36.Attribute
- ProjectM36.AttributeExpr
- ProjectM36.AttributeNames
- ProjectM36.BTree
- ProjectM36.Base
- Cache
- ProjectM36.Client
- ProjectM36.DDLType
- ProjectM36.DataConstructorDef
- ProjectM36.DataFrame
- DataTypes
- ProjectM36.DataTypes.Basic
- ProjectM36.DataTypes.ByteString
- ProjectM36.DataTypes.DateTime
- ProjectM36.DataTypes.Day
- ProjectM36.DataTypes.Either
- ProjectM36.DataTypes.Interval
- ProjectM36.DataTypes.List
- ProjectM36.DataTypes.Maybe
- ProjectM36.DataTypes.NonEmptyList
- ProjectM36.DataTypes.Primitive
- SQL
- ProjectM36.DataTypes.Sorting
- ProjectM36.DatabaseContext
- ProjectM36.DatabaseContextExpr
- ProjectM36.DatabaseContextFunction
- ProjectM36.DatabaseContextFunctionUtils
- DatabaseContextFunctions
- ProjectM36.DateExamples
- ProjectM36.DisconnectedTransaction
- ProjectM36.Error
- ProjectM36.FSType
- ProjectM36.FileLock
- ProjectM36.Function
- ProjectM36.FunctionalDependency
- ProjectM36.GraphRefRelationalExpr
- ProjectM36.HashSecurely
- ProjectM36.InclusionDependency
- ProjectM36.IsomorphicSchema
- ProjectM36.Key
- ProjectM36.LoginRoles
- ProjectM36.MerkleHash
- ProjectM36.MiscUtils
- ProjectM36.NormalizeExpr
- ProjectM36.Notifications
- ProjectM36.Persist
- ProjectM36.PinnedRelationalExpr
- ProjectM36.PrettyBytes
- ProjectM36.ReferencedTransactionIds
- ProjectM36.RegisteredQuery
- ProjectM36.RelExprSize
- ProjectM36.Relation
- ProjectM36.RelationVariablesMentioned
- ProjectM36.RelationalExpression
- SQL
- ProjectM36.SQLDatabaseContext
- ProjectM36.ScriptSession
- Serialise
- ProjectM36.Server
- ProjectM36.Session
- ProjectM36.Sessions
- ProjectM36.Shortcuts
- ProjectM36.StaticOptimizer
- Streaming
- ProjectM36.SystemMemory
- ProjectM36.Trace
- ProjectM36.TransGraphRelationalExpression
- ProjectM36.Transaction
- ProjectM36.TransactionGraph
- ProjectM36.TransactionInfo
- ProjectM36.Tuple
- ProjectM36.TupleSet
- ProjectM36.Tupleable
- ProjectM36.TypeConstructor
- ProjectM36.TypeConstructorDef
- ProjectM36.ValueMarker
- ProjectM36.WCWidth
- ProjectM36.WithNameExpr
Flags
Manual Flags
| Name | Description | Default |
|---|---|---|
| profiler | Enable Haskell-specific profiling support | Disabled |
| stack | build with stack and stackage | Disabled |
| haskell-scripting | enables Haskell scripting which links against GHC as a library | Enabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- project-m36-1.2.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Readme for project-m36-1.2.0
[back to package description]Ξ Project:M36 Relational Algebra Engine
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
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
- TutorialD for SQL Developers
- ask in IRC channel for discount code to get free access
- Developer's Blog
- Mailing List/Discussion Group
- IRC Channel: irc.libera.chat #project-m36 -- Chat via Web Client
- Hackage
- Diogo Biazus' Project:M36 Video Tutorial
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
Advanced Features
- Role-Based Access Control
- Authentication
- 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
Development
Project:M36 is developed in Haskell and compiled with GHC 9.2 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
- Out of the Tarpit: a proposed software architecture which minimizes state and complexity. Project:M36 implements the requirements of this paper.
- Database Design & Relational Theory: Normal Forms and All That Jazz: mathematical foundations for the principles of the relational algebra
- Database Explorations: Essays on the Third Manifesto and Related Topics: additional essays and debates on practical approaches to relational algebra engine design
