NAME

Muldis::DB::SeeAlso - External resources that you really ought to look at

DESCRIPTION

This document is a central location within the Muldis::DB distribution where any important recommendations of or links to external resources go. This includes both resources that were helpful in making Muldis::DB, as well as resources that are or could be related to Muldis::DB.

INFORMATION SOURCES

While making this project, the following resources were found to be particularly useful:

http://www.thethirdmanifesto.com/

This is the Hugh Darwen's and Christopher J. Date's home on the web for "The Third Manifesto" (TTM), their formal proposal for a solid foundation for data and database management systems (DBMSs); like Edgar F. Codd's original papers, TTM can be seen as an abstract blueprint for the design of a DBMS and the language interface to such a DBMS. It consists in essence of a rigorous set of principles, stated in the form of a series of prescriptions and proscriptions, that the authors require adherence to on the part of a hypothetical database programming language that they call D.

The proposal would avoid 'Object-Relational Impedance Mismatch' between object-oriented programming languages and RDBMSs by fully supporting all the capabilities of the relational model. The main objective of The Third Manifesto, besides being theoretically sound and avoiding arbitrary restrictions and pragmatic debasement of the relational model, is to make a simple, restricted and precise definition of the role of object orientation in database management systems emphasizing the few valid ideas from object modeling that are orthogonal to relational modeling.

Muldis::DB has officially incorporated this blueprint into its own design, and implements its principles without compromise, and so its API is a concrete language that qualifies as a D. The TTM web site contains various useful documents and links on the subject, some being specified further below.

Databases, Types, and The Relational Model: The Third Manifesto

Christopher J. Date, Hugh Darwen - "Databases, Types, and The Relational Model: The Third Manifesto, 3rd edition, Addison-Wesley, 2006 (ISBN: 0-321-39942-0)"; see http://www.aw-bc.com/catalog/academic/product/0,1144,0321399420,00.html.

This is the thicker, college level textbook about The Third Manifesto, and it is the most central of the authors' publications, able to stand alone and present nearly everything important. It includes an informal overview of both the relational model and a theory of types, a reference section with the Manifesto proper and a grammar for a teaching language based on its principles called Tutorial D, a larger section which explains and rationalizes the parts of the Manifesto, and sections that do likewise for type inheritance what the earlier sections do with the Manifesto proper.

Note that the web site for The Third Manifesto, mentioned above, has reproduced several chapters and appendices from this book. Chapter 4 (http://web.onetel.com/~hughdarwen/TheThirdManifesto/CHAP04.pdf) is the 15-page heart of the book and has the actual TTM definition, upon which the rest of the book expands on, rationalizes, and gives examples of. Chapter 5 (http://web.onetel.com/~hughdarwen/TheThirdManifesto/CHAP05.pdf) gives the the complete grammar of "Tutorial D", which is a computationally complete programming language with fully integrated database functionality, whose principal purpose is to serve as a teaching vehicle.

Database in Depth: Relational Theory for Practitioners

Christopher J. Date - "Database in Depth: Relational Theory for Practitioners, 1st edition, Oreilly, 2005 (ISBN: 0-596-10012-4)"; see http://www.oreilly.com/catalog/databaseid/.

This is the first printed book that Muldis::DB' author had read fully, which is related to The Third Manifesto, and it was their main introduction. It explains in an easy to follow matter just what the relational data model really is, a solid and provable logical system, and partially contrasts with SQL's distorted view of it. While being easy to follow, the book is written towards people that are already database professionals, and doesn't go into the basics that we should already know.

http://www.acm.org/classics/nov95/toc.html

Edgar F. Codd - "A Relational Model of Data for Large Shared Data Banks"

Reprinted from Communications of the ACM, Vol. 13, No. 6, June 1970, pp. 377-387. Copyright © 1970, Association for Computing Machinery, Inc.

This is the second famous 1969/1970 publication that first presented a relational model of data to the world, which is the basis for the modern database industry.

http://www.wiscorp.com/SQLStandards.html

This web page of Whitemarsh Information Systems Corporation, run by one of the people on the SQL standard drafting community, has copies of the official SQL:2003 and SQL:1999 specification documents, and other related helpful documents about SQL, in PDF format. For example, "an almost indistinguishable delta on the actual SQL 2003 database standard" is at http://www.wiscorp.com/sql/sql_2003_standard.zip (warning, large file).

http://www.unicode.org/standard/standard.html

Unicode Standard official documentation.

http://en.wikipedia.org/wiki/Relational_model

The Wikipedia article on the relational data model, and related topics.

http://en.wikipedia.org/wiki/Tuple_calculus

The Wikipedia article on Tuple calculus, a basis of the relational model.

Also, the vendor documentation for various relational and/or SQL databases such as MySQL and SQLite were regularly consulted, and various other sites.

SOME FULLY TTM/D RELATED DBMS PROJECTS

Besides the Muldis::DB framework, other projects exist which attempt to implement The Third Manifesto fully and without compromise (that lack anti-TTM features), though their current implementations may be incomplete and/or in development. None of these use 'SQL' as their native language.

Free and Open Source Software

These software projects are released under a free and open source license, as Muldis::DB is, so you have the freedom to use the software for any purpose, to examine the project source code, change it, and redistribute it:

Rel - http://dbappbuilder.sourceforge.net/Rel.html

Rel is a relational database server, written by Dave Voorhis (d.voorhis@derby.ac.uk), that implements Date and Darwen's "Tutorial D" language mainly "by the book". It is written in Java (version 1.5) and is operating-system independent. It is licensed under the GNU GPL.

Duro - http://duro.sourceforge.net/

Duro is a relational database library, written by René Hartmann (rhartmann@users.sourceforge.net). It is written in C (with a Tcl interface), is implemented on top of the Berkeley DB database library, and runs on all POSIX/Unix-like and 32-bit Windows operating systems. It is licensed under the GNU GPL.

Dee - http://www.quicksort.co.uk/

Dee is an implementation of D (built on the relational algebra operators) as an extension to Python, written by Greg Gaughan (gjgaughan@users.sourceforge.net). It is written in Python and is operating-system independent. It is licensed under the GNU GPL.

Shared Source Software

These software projects are released with access to the project source code but lack permissions on use, modification, or redistribution that are essential to qualify as free and open source software; some are available at zero cost:

FlipDB - http://www.flipdb.com/

FlipDB is a relational database management system written by Paul Mansour (paul@carlislegroup.com). Pending a full implementation of the relational algebra, FlipDB uses a simple but powerful query technique that simulates relation-valued attributes and obviates the need for outer join (or any explicit join). The author is using Date's and Darwen's work as a guide, and his intention is to not violate any of the principles set forth in TTM, if not to implement all of Tutorial D. It is written in Dyalog APL, in a functional style with no loops or control structures, and runs only on 32-bit Windows operating systems. It is available under a shared source agreement for personal use and study.

Closed Source Software

These software projects are released without access to the project source code or permission to change them, though some are available at zero cost:

Opus - http://ca.geocities.com/dcauz@rogers.com/opus/

Opus is a command-line relational database development system, written by David Cauz (dcauz@rogers.com) and Paul Church, that implements its own "Opus" language (that has the syntactic style of C). It is written in C and only runs on Windows.

Academic Design Projects

These project designs were made for academic purposes and don't include implementations:

Db ("D flat") - http://web.onetel.com/~hughdarwen/TheThirdManifesto/REAL.pdf

This is a final year project by UMIST student Peter Nicol.

SOME PARTIALLY TTM/D RELATED DBMS PROJECTS

Some DBMS exist which desire to support TTM principles but still justify themselves to provide features that are anti-TTM. They may or may not use a SQL dialect as their command language.

Free and Open Source Software

Genezzo - http://www.genezzo.com/

Genezzo is a micro kernel style enterprise-strength SQL database server, written mainly by Jeffrey Cohen (jcohen@cpan.org), currently under construction. It is written in a hybrid of C and Perl 5, and runs on any operating system. It is licensed under the GNU GPL.

Note: Genezzo sans its SQL interface is currently a front-line candidate for implementing a production / industrial strength Muldis::DB Engine.

Closed Source Software

Dataphor - http://www.alphora.com/

Dataphor is a TTM-inspired commercial database application development tool set, owned by Alphora (a division of Softwise, Inc.), that implements its own "D4" language. While TTM conformant in many other respects, Alphora found it necessary to support SQL-style nulls. It is written to the .Net platform and only runs on Windows. It is implemented using a federated server that employs various other database engines for storage.

Teradata - http://www.teradata.com/

Teradata is a commercial DBMS that, as far as the developers know, is the only SQL-DBMS that supports and/or defaults to set semantics. They also support, but don't encourage the use of, a mode that supports bag semantics. Bindings for many programming languages exist, including for Perl 5.

SOME SQL-BASED DBMS PROJECTS

Many DBMS exist which do not expressly support TTM principles and/or actively embrace anti-TTM features. Many of those use a SQL dialect as their primary or only interface; a relative few are listed here.

Free and Open Source Software

SQLite - http://www.sqlite.org/

SQLite is a small library that implements a fully transactional file-based SQL database engine, written mainly by D. Richard Hipp (Hwaci - Applied Software Research). It is written in C (with creator-bundled Tcl bindings) and runs on any operating system, being particularly suited for embedded devices. It is committed to the public domain and can be used in any other license of program. Bindings for many programming languages exist, including for Perl 5.

PostgreSQL - http://www.postgresql.org/

PostgreSQL is a powerful SQL database server, owned by the PostgreSQL Global Development Group. It is written in C and runs on any operating system. It is licensed under a BSD-like license, specifically the license of the University of California. Bindings for many programming languages exist, including for Perl 5.

MySQL - http://www.mysql.com/

MySQL is a multi-engine SQL database server, owned by MySQL AB. It is written in C and runs on any operating system. It is dual-licensed under the GNU GPL (at no cost) and under a proprietary license (for a fee). Bindings for many programming languages exist, including for Perl 5.

Firebird - http://www.firebirdsql.org/

Firebird is a mature SQL database server, forked from the open sources of InterBase by Inprise/Borland; portions are owned by Inprise/Borland and members of the Firbird Foundation. It is written in C++ (newer version) and runs on any operating system. Portions are licensed under various Mozilla-Public-like licenses, specifically the Interbase Public License and the Initial Developer's Public License. Bindings for many programming languages exist, including for Perl 5.

Closed Source Software

Oracle - http://www.oracle.com/database/
Sybase - http://www.sybase.com/
SQL Server - http://www.microsoft.com/sql/
Informix - http://www.ibm.com/software/data/informix/
DB2 - http://www.ibm.com/software/data/db2/
OpenBase - http://www.openbase.com/
FrontBase - http://www.frontbase.com/

SOME OTHER DBMS PROJECTS

Many DBMS exist that are neither TTM/D-based nor primarily SQL based; a relative few are listed here.

Free and Open Source Software

Berkeley DB - http://www.sleepycat.com/

Closed Source Software

FileMaker Pro - http://www.filemaker.com/
Valentina - http://www.paradigmasoft.com/

LIST OF PUBLIC Muldis::DB ENGINES

This documentation is pending.

Muldis::DB::Engine::Example.

PROSPECTIVE Muldis::DB EXTENSIONS

These are some theoretical examples of other Perl modules or documentation that could be created to work with Muldis::DB, but if so would most likely be distributed independently from it. The given package names are examples, and the examples in question could have other names if appropriate.

Muldis::DB::Cookbook(|::\w+)

Pod files with a potentially large collection of examples, tutorials, FAQs, and so on that help people learn how to employ Muldis::DB for the things they need to do. In particular, there should be a lot of help given for people migrating from other systems that use different paradigms than Muldis::DB does, for example SQL-using systems.

The Cookbook distro may also be the main repository of executing code that would otherwise go in the /examples directory of the Muldis::DB core distro.

Genezzo or Genezzo::Muldis::DB or Muldis::DB::Engine::Genezzo etc

A Muldis::DB Engine built around Jeffrey Cohen's Genezzo DBMS, or specifically the class that does Muldis::DB::Engine::Role, could conceivably have either of the above file or package names, depending on what its author prefers, or something else yet. A strong name influence could be whether Muldis::DB forms the sole public interface for Genezzo after its conversion to use it, or whether Genezzo would retain alternate public APIs that work without Muldis::DB being present on the system. If Muldis::DB is Genezzo's sole or primary interface, then simply Genezzo is probably best for branding.

Muldis::DB::AST::Refactor(|::\w+)

Utility modules that take Muldis::DB AST node objects as input and derive other nodes as output, such as with the purpose of refactoring them into canonical representations (such that users can then perform node value equality tests for potentially any type of node), or forms that are more efficient for particular uses but are still logically equivalent.

Presumably all of these would work using static analysis methods and not actually "execute" anything, so they are independent of any particular Engine environment. This isn't to say that we can't separately have modules that help implement a specific Engine and do AST optimization that knows the specific needs of that Engine's implementation environment.

Other words that could go in such module names are like Optimize or Canon, or whatever authors prefer.

Muldis::DB::AST::YAML and Muldis::DB::AST::XML etc

Utility modules that serialize Muldis::DB AST nodes to, or unserialize them from, logically equivalent YAML, XML, or other generic data interchange formats. This implementation should be native to the Muldis D language itself and not output any Perl-specific details that aren't in non-Perl languages, so that it is suitable for interchange, at the very least between Perl 5 and Perl 6.

Muldis::DB::AST::StringRepr

Utility module that parses the string representation format of Muldis D into its AST representation format, and also that generates the former from the latter. The 2 formats should basically have a 1:1 correspondence.

Muldis::DB::Shell

Implementation of a command-line user application over the Muldis::DB API that takes string-form Muldis D as input, compiles it and runs it, and nicely formats output for user display. This is analogous to DBI::Shell.

DBD::Muldis::DB

A wrapper over the Muldis::DB API that makes it work as a DBI driver module, should that be useful. Depending on what DBI itself permits or requires, this could take a variety of query definition formats, including either or both of AST form or string form (most likely) Muldis D.

Muldis::DB::AST::Translate::TutorialD etc

Utility module that parses the Tutorial D language into Muldis::DB AST nodes, and also that generates the former from the latter. Mainly this is just by-the-book using the grammar published by Darwen and Date, but it could also handle compatible extensions by other D language implementations. In addition, separate utility modules can be made which translate to and from other D languages that don't look like Tutorial D.

Muldis::DB::AST::Translate::SQL::Native

Utility module that parses a Muldis::DB-native variant of SQL into Muldis::DB AST nodes, and also that generates the former from the latter. This SQL variant is essentially a cleaned up subset of the SQL:2003 standard, with some misfeatures removed, some missing features added, and some alterations common in other SQL DBMSs substituted or added. Or alternately, it is like a subset of Muldis D made to look as much like SQL as possible. This Muldis::DB-native SQL variant always has distinct column names in rowsets, requires matching column names for inputs to union/intersect/etc, never stores or results in duplicate rows, always uses 2-valued logic (not (>=3)-valued logic), and has case-sensitive table/column/etc names and character strings. An application written to use this SQL dialect rather than some other dialect should behave more deterministically, and perform faster, than ones written to some other SQL dialect, since there is less indirection involved between what users query and what actually happens to implement it.

Muldis::DB::AST::Translate::SQL::\w+

Utility modules that parse other variants of SQL (or subsets thereof) into Muldis::DB AST nodes, and also that generate the former from the latter. Examples of these variants are the actual SQL:2003 standard, and the native dialects of each actual SQL DBMS.

Muldis::DB::AST::Translate::\w+

Utility modules that translate data (including code and declaratives) between representations that are Muldis::DB AST nodes and representations that aren't, or between 2 of the latter kind while using the former kind as an intermediate representation. Besides the aforementioned possibilities that deal with D languages or SQL, we can have utilities that translate to/from native Perl data structures, including native Perl routine definitions (PPI would probably be employed in the Perl 5 version), and including commonly used third party class' objects.

Muldis::DB::Proxy::(Server|Client|\w+)

Implementation(s) of a generic proxy server plus client for the Muldis::DB API, letting the normal Muldis::DB Engine and the user application reside in separate processes. The client module would do Muldis::DB::Engine::Role and the server would be an application or server-extending plugin that sits on top of the Muldis::DB API. Or whatever implementers want to do. This is analogous to proxying modules for DBI or other DBMSs.

Muldis::DB::Engine::(SQLite|Postgres|Oracle|\w+)

A default (but not mandatory) namespace for Muldis::DB Engines to go, that do Muldis::DB::Engine::Role(|::\w+). A lot of these would likely be implemented over existing DBMSs, which results in Muldis::DB being an alternative API for them.

DBIx::Class::Storage::Muldis::DB etc

An alternative plug-in storage engine for DBIx::Class that uses Muldis::DB rather than DBI. Analogous extensions can be added to other DBI wrappers modules such as Tangram or Rose::DB or what have you. In either case, said alternatives can either be bundled with the core distros of those other modules, or separately from them, as per their authors' preferences.

Muldis::DB::Emulator::(DBI|JDBC|OCI|\w+)

Emulations of other modules or APIs as wrappers over Muldis::DB. This is potentially the easiest way, short of the other modules themselves being appropriately updated, to permit migration for legacy apps to Muldis::DB while they have the fewest actual code changes. The emulators would likely employ SQL translator utilities internally.

Muldis::DBx::\w+

Unofficial extensions to Muldis::DB could be named in this space, though it doesn't have to be used if prior coordination happens between developers.

PUBLIC SOLUTIONS BUILT OVER Muldis::DB

This documentation is pending.

These Perl 5 applications and frameworks are, perhaps, at the front of the line to get Muldis::DB bindings: Jifty, Catalyst, Maypole, Bricolage, RT. Generally speaking, the more active the development or the more popular the project, the higher the priority to support it.

DBMS-RELATED PERL MODULES

This documentation is pending.

These other Perl 6 packages also work in the problem domain of managing data or data definitions or connections to databases:

Set::Relation, Set.

These other Perl 5 packages also work in the problem domain of managing data or data definitions or connections to databases (list not exhaustive):

DBI, Tangram, DBIx::Class, HDB, Class::DBI, Pixie, Alzabo, DBIx::SQLEngine, Rose::DB, SPOPS, Set::Object, Set::Scalar, Object::Relation, Oryx, DBM::Deep, DBIx::SearchBuilder, DBIx::RecordSet, DBIx::Abstract, DBIx::AnyDBD, DBIx::Browse, DBIx::DBH, MKDoc::SQL, Data::Transactional, DBIx::ModelUpdate, DBIx::ProcedureCall, DB::Ent, DBIx::Romani, DBIx::DBSchema, DBIx::Namespace, TripleStore, Data::Table, ORM, OOPS, Object::Transaction, Relations, DBIx::SimplePerl, DBIx::YAWM, Class::Entity, SQL::Statement, SQL::Parser, SQL::Translator, SQL::YASP, SQL::Generator, SQL::Schema, SQL::Abstract, SQL::Snippet, SQL::Catalog, DBIx::Perlish, Tao::DBI, NTuples, DBIx::CopyRecord.

AUTHOR

Darren Duncan (perl@DarrenDuncan.net)

LICENSE AND COPYRIGHT

This file is part of the Muldis::DB framework.

Muldis::DB is Copyright © 2002-2007, Darren Duncan.

See the LICENSE AND COPYRIGHT of Muldis::DB for details.

ACKNOWLEDGEMENTS

The ACKNOWLEDGEMENTS in Muldis::DB apply to this file too.