Does anyone have any good references to read regarding whether PostgreSQL conforms to all 12 of Codd's rules?
If not, are there any veteran PostgreSQL users that have an opinion on this topic?
Thank you.
Does anyone have any good references to read regarding whether PostgreSQL conforms to all 12 of Codd's rules?
If not, are there any veteran PostgreSQL users that have an opinion on this topic?
Thank you.
My answer is based on other answers via Google.
In 1986 was created a first ANSI standard of the SQL language. The last ANSI standard is ANSI SQL:2003. It's requirements are nevertheless implemented only in few RDBMSs. So far the most widespread RDBMSs respect ANSI SQL:1999, respectively older ANSI SQL:1992. PostgreSQL supports completely ANSI SQL:1999 and partly ANSI:2003.
If strictly speaking Codd's rules:
Codd's 12 rules aren't all that is to the relational model. In fact, he expanded these 12 to 40 rules in his 1.990 book _The_Relational_Model_for_Database_Management.
But furthermore, if you care to read Christopher J Date's 1.999 _An_Introduction_to_Database_Systems_ you will see that the relational model comprises some basic elements and some principles.
The basic element is the domain, or data type. PostgreSQL does not really enforces domains because it accepts NULL, which by definition is not part of any domain. Thus the triplet domain, name and value called attribute breaks down, and so the tuple -- because it represents a proposition, and a proposition with missing information is another proposition, not the one declared in the relation's header --, and so also the relation breaks down.
Furthermore, the relation is a set, not a bag. A bag accepts duplicates, but not a relation. So because PostgreSQL does not enforce the necessity of declaring a candidate key for each and every table, its tables are not necessarily relations, but quite possibly and commonly bags of not tuples as shown above, but simply rows.
Also, the first principle is The Information Principle, where all the database must be represented by data. Object IDs violate this, with serious consequences about data independence, which by the way is necessary to another relational model sine qua non, namely the separation between user, logical and physical schemas. Also not properly supported by PostgreSQL.