Great Articles!
"Any column in a version 3 database, except an INTEGER PRIMARY KEY column, may be used to store any type of value."
This is one of the features I like, especially for dynamic languages like lisp. Caveat, it's like a box of chocolates, you don't what you're going to get.
example
"CREATE TABLE MyTable (No int, FirstName char(64), LastName char(64), age int);"
"INSERT INTO MyTable VALUES (1, 'Donald', 'Luck ' , 99);"
"INSERT INTO MyTable VALUES (2, 'Mickey', 'Mouse' , 101);"
"INSERT INTO MyTable VALUES (3, 'Minni' , 'Mouse' , 'Never ask a lady how old she is;);"
Select * returns ( ("No" "FirstName" "LastName" "age")
(1 "Donald" "Luck " 99)
(2 "Mickey" "Mouse" 101)
(3 "Minni" "Mouse" "Never ask a lady how old she is"))
so...
select AVG(age) from MyTable;" would return an incorrect value as the 'Minni' record would return 0.
(("AVG(age)") (66.6667))
Just thinking out loud, it wouldn't be hard to wrap the stuff I have written for lisp for .net, it would eliminate the need for providers....