on 127_hlint help sign in
project-m36/README.markdown
92 lines 4.7 kB history raw
1# Ξ Project:M36 Relational Algebra Engine
3[![Haskell Programming Language](https://img.shields.io/badge/language-Haskell-blue.svg)](https://www.haskell.org)
4[![Public Domain](https://img.shields.io/badge/license-Public%20Domain-brightgreen.svg)](http://unlicense.org)
5[![Hackage](https://img.shields.io/hackage/v/project-m36.svg)](http://hackage.haskell.org/package/project-m36)
6[![Hackage dependency status](https://img.shields.io/hackage-deps/v/project-m36.svg)](http://packdeps.haskellers.com/feed?needle=project-m36)
7[![Build status](https://travis-ci.org/agentm/project-m36.svg?branch=master)](https://travis-ci.org/agentm/project-m36)
9*Software can always be made faster, but rarely can it be made more correct.*
11## Introduction
13Project:M36 implements a relational algebra engine as inspired by the writings of Chris Date.
15## Description
17Unlike 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.
19Project:M36 can be used as an in-process or remote DBMS.
21Project:M36 is written entirely in the [Haskell programming language](https://www.haskell.org/).
23## Sample Session
25[![asciicast](https://asciinema.org/a/3syu35c8cydm403292a74l1n5.png)](https://asciinema.org/a/3syu35c8cydm403292a74l1n5)
27## Try It!
29You can experiment instantly with Project:M36 straight from your browser at [try.project-m36.io](https://try.project-m36.io)!
31## Use-Cases
33Project:M36 supports multiple frontends which target different audiences.
35* learn about the relational algebra via TutorialD
36* store and manipulate databases
37* use Project:M36 as a native Haskell database backend
39## Community
41* [Developer's Blog](https://agentm.github.io/project-m36/)
42* [Mailing List/Discussion Group](https://groups.google.com/d/forum/project-m36)
43* IRC Channel: chat.freenode.net #project-m36
44* [Hackage](https://hackage.haskell.org/package/project-m36)
46## Documentation
48### Introductory Materials
501. [Installation and Introduction to Project:M36](docs/introduction_to_projectm36.markdown)
511. [Introduction to the Relational Algebra](docs/introduction_to_the_relational_algebra.markdown)
521. [TutorialD Tutorial](docs/tutd_tutorial.markdown)
531. [15 Minute Tutorial](docs/15_minute_tutorial.markdown)
541. [Developer's Change Log](Changelog.markdown)
56### Database Comparisons
581. [ACID Database Properties](docs/acid_assessment.markdown)
591. [On NULL (in SQL)](docs/on_null.markdown)
601. [Reaching "Out of the Tarpit" with Project:M36](docs/reaching_out_of_the_tarpit.markdown)
62### Advanced Features
641. [Transaction Graph Operators](docs/transaction_graph_operators.markdown)
651. [ProjectM36.Client Library](docs/projectm36_client_library.markdown)
661. [Adding New Data Types](docs/new_datatypes.markdown)
671. [Database-Manipulating Functions](docs/database_context_functions.markdown)
681. [Serving Remote ProjectM36 Databases](docs/server_mode.markdown)
691. [Using Notifications](docs/using_notifications.markdown)
701. [Merge Transactions](docs/merge_transactions.markdown)
711. [WebSocket Server](docs/websocket_server.markdown)
721. [Atom (Value) Functions](docs/atomfunctions.markdown)
731. [Trans-Graph Relational Expressions](docs/transgraphrelationalexpr.markdown)
741. [Isomorphic Schemas](docs/isomorphic_schemas.markdown)
751. [Replication](docs/replication.markdown)
77## Development
79Project:M36 is developed in Haskell and compiled with GHC 7.10 or GHC 8.0.2 or later.
81## Related Projects
83* [The Third Manifesto](http://thethirdmanifesto.com/): the philosophical basis for relational algebra engines
84* [Rel](http://reldb.org/): a TutorialD implementation against a BerkeleyDB backend
85* [Andl](http://andl.org/): a new database language with SQLite and PostgreSQL backends
86* [Coddie](https://github.com/scvalencia/Coddie): a python-based relational algebra interpreter
88## Suggested Reading
90* [Out of the Tarpit](http://shaffner.us/cs/papers/tarpit.pdf): a proposed software architecture which minimizes state and complexity. Project:M36 implements the requirements of this paper.
91* [Database Design & Relational Theory: Normal Forms and All That Jazz](http://shop.oreilly.com/product/0636920025276.do): mathematical foundations for the principles of the relational algebra
92* [Database Explorations: Essays on the Third Manifesto and Related Topics](http://bookstore.trafford.com/Products/SKU-000177853/Database-Explorations.aspx): additional essays and debates on practical approaches to relational algebra engine design