5 ms·
Codd's paper is not that hard. [0] is a PDF copy. One of the pros to reading primary sources is you then know "the whole story": what if anything is missing fro
by pjungwir 5y ago
Codd's paper is not that hard. [0] is a PDF copy. One of the pros to reading primary sources is you then know "the whole story": what if anything is missing from popular explanations, and what is changed.
A striking bit of trivia (but OT to SQL) is that in Turing's "On Computable Numbers" [1] he treats a Turing Machine that halts as having a problem, whereas in basically every popular treatment a machine that halts is one that gives you an answer, and a machine that doesn't halt is one with a bug, like it entered an infinite loop. But his paper is the opposite (and doesn't use the word "halt" at all!):
If a computing machine never writes down more than a finite number of symbols
of the first kind it will be called circular. Otherwise it is said to be circle-free.
A machine will be circular if it reaches a configuration from which there is no possible
move, or if it goes on moving, and possibly printing symbols of the second kind,
but cannot print any more symbols of the first kind.
More relevantly, Codd's paper from ten years later [2] is even more interesting than the first one. Everyone focuses on the first half (discussing NULLs and outer joins) but the second half is way more interesting, and has never been implemented anywhere AFAIK. It sounds a lot like graph databases and queries that dynamically change structure based on querying the data catalog.
Re relations containing relations, I was very surprised that C.J. Date is apparently okay with them. He is a perfect example of the disciple who is more zealous than the master, and has spent his career trying to remove NULLs and non-unique rows. But in page 17-18 of [3] he writes:
To repeat, any type whatsoever---apart from the two exceptions noted in the
section "Types" earlier---can be used as the basis for defining attributes of
relations. In particular, relation types can be used for this purpose. (So too can
tuple types.) Thus, attributes can be *relation valued*, meaning we can have relations
with attributes whose values are relations in turn.
Wow! Part of me wonders if he is really just compromising because relations-inside-relations is so useful for his goals in that book. I had to re-read that passage over and over to convince myself I wasn't misunderstanding.
[0] https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf
[1] https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf
[2] https://gertjans.home.xs4all.nl/usenet/microsoft.public.sqlserver.programming/codd1979.pdf https://gertjans.home.xs4all.nl/usenet/microsoft.public.sqls...
[3] C.J. Date et al, Time and Relational Theory
- pjungwir 5y agoI looked up Date's two exceptions. The first is uninteresting---databases cannot contain pointers---but the second is sort of relevant: > If a relation r has heading H, then no attribute of r can be defined in terms of a relation or tuple type that has the same heading H, at any level of nesting. In other words, relations can nest, but not recurse.
- mmarx 5y ago> A striking bit of trivia (but OT to SQL) is that in Turing's "On Computable Numbers" [1] he treats a Turing Machine that halts as having a problem, whereas in basically every popular treatment a machine that halts is one that gives you an answer, and a machine that doesn't halt is one with a bug, like it entered an infinite loop. But his paper is the opposite (and doesn't use the word "halt" at all!): Note that his machines compute real numbers, which always have a an infinitely long binary representation (with possibly infinitely many trailing zeroes), whereas usually one considers Turing machines computing natural numbers, which always have a finite binary representation.
- pjungwir 5y agoYes, it makes sense. But it sure took me by surprise when I finally read the original paper.