Register now: AI in Financial Services: Unlocking insights with Graph RAG webinar - April 24th

14: Schemafull and schemaless14: Schemafull and schemaless
Surrealist Placeholder
Surrealist Placeholder
Back to Courses

14: Schemafull and schemaless

Our database now has two schemaless tables.

INFO FOR DB;
Response
{ accesses: {}, analyzers: {}, configs: {}, functions: {}, models: {}, params: {}, tables: { place: 'DEFINE TABLE place TYPE ANY SCHEMALESS PERMISSIONS NONE', town: 'DEFINE TABLE town TYPE ANY SCHEMALESS PERMISSIONS NONE' }, users: {} }

Schemaless means that the table is free to accept any sort of data that we give it. If the tables were SCHEMAFULL , they would have been much more strict. A schemafull table will ignore input for any field except id unless they are defined in advance.

DEFINE TABLE schemafull_town SCHEMAFULL; -- schemafull_town only has one defined field DEFINE FIELD population ON schemafull_town TYPE number; -- So the query succeeds, but 'name' data is ignored CREATE schemafull_town SET name = "Riverdale", population = 75000; REMOVE TABLE schemafull_town;
CREATE query output
[ { id: schemafull_town:q9olode057qz1vdzruuv, population: 75000 } ]

The INFO FOR command works for other items too, like tables.

INFO FOR TABLE place;
INFO FOR TABLE town;
Response
-------- Query -------- { events: {}, fields: {}, indexes: {}, lives: {}, tables: {} } -------- Query -------- { events: {}, fields: {}, indexes: {}, lives: {}, tables: {} }

The empty input shows that place and town are schemaless, without any defined fields. That means that we could create a town with a name that is a completely different type, like a number.

CREATE town SET name = 9999.999999;
Response
[ { id: town:x1hy1y4d21x5dlhndprc, name: 9999.999999f } ]

We don’t want people to create towns with names like 9999.999999, so we will create a schema on the next page to ensure that this won’t happen. Let’s first delete this unwanted town.

DELETE town WHERE name = 9999.999999 RETURN BEFORE;
Response
[ { id: town:2ciozta7zj7b8yvqfkpm, name: 9999.999999f } ]