8

I am trying to plan a framework for relational algebra using the Dataset capability of Mathematica 10.

In the work of Date and Darwen, there are two concepts known as TABLE_DEE and TABLE_DUM. TABLE_DEE is a relation with a (column) header but no rows, whereas TABLE_DUM is simply:

Dataset[{}]

How might I create a TABLE_DEE with Dataset--a table with headers, but no data? I feel this would allow a framework for performing orthodox relational database operations.

Eric Brown
  • 4,406
  • 1
  • 18
  • 36

2 Answers2

11

You have to use the undocumented (and subject-to-change) syntax for specifying a type or schema:

Needs["TypeSystem`"];
Dataset[
  {}, 
  Vector @ Struct[
    "field1" -> Atom[Integer], 
    "field2" -> Atom[String]
  ]
]

Replace the contents of the inner Struct as you see fit (you can always use TypeSystem`DeduceType on a chunk of data obeying your desired schema to see more examples of these type expressions).

Taliesin Beynon
  • 10,639
  • 44
  • 51
  • 2
    Your code produces an error message Dataset::data: Data does not conform to type <...> and does not produce "a table with headers, but no data" (citing the question). – Alexey Popkov Jul 12 '14 at 08:35
  • 4
    @AlexeyPopkov I'm sorry, you have to write Needs["TypeSystem"]` before evaluating my code. I've updated my answer. – Taliesin Beynon Jul 13 '14 at 00:34
  • 1
    @TaliesinBeynon Thanks for your reply. I gathered that you are the author of this code. I'm really happy about this functionality, especially the ability to have data sets inside of data sets (relations inside of relations). – Eric Brown Jul 13 '14 at 01:28
2

We can create a table with a header and no rows like this:

Dataset[{<|"header" -> 1|>}] @ Select[False &]

dataset screenshot

This uses only documented functionality.

WReach
  • 68,832
  • 4
  • 164
  • 269