aboutsummaryrefslogtreecommitdiffstats
path: root/lib/schema.ml
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/schema.ml21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/schema.ml b/lib/schema.ml
new file mode 100644
index 0000000..e17f7a5
--- /dev/null
+++ b/lib/schema.ml
@@ -0,0 +1,21 @@
+(** Schema: maps attribute names to domain/type names.
+
+ A schema defines the structure of a relation by listing each attribute
+ and its associated domain (type). This is used for:
+ - Hashing relations (schema is part of the relation identity)
+ - Validation (checking tuple membership)
+ - Persistence (storing and loading relations with their structure) *)
+
+type t = (string * string) list
+
+let empty : t = []
+
+let add name domain_name (schema : t) : t =
+ (name, domain_name) :: schema
+
+let attributes (schema : t) =
+ List.map fst schema
+
+let to_string schema =
+ List.map (fun (n, t) -> n ^ ":" ^ t) schema
+ |> String.concat ","