--- /dev/null
+
+CREATE TABLE actor.toolbar (
+ id BIGSERIAL PRIMARY KEY,
+ ws INT REFERENCES actor.workstation (id) ON DELETE CASCADE,
+ org INT REFERENCES actor.org_unit (id) ON DELETE CASCADE,
+ usr INT REFERENCES actor.usr (id) ON DELETE CASCADE,
+ label TEXT NOT NULL,
+ layout TEXT NOT NULL,
+ CONSTRAINT label_once_per_ws UNIQUE (ws, label) WHERE ws IS NOT NULL,
+ CONSTRAINT label_once_per_org UNIQUE (org, label) WHERE org IS NOT NULL,
+ CONSTRAINT label_once_per_usr UNIQUE (usr, label) WHERE usr IS NOT NULL,
+ CONSTRAINT only_one_type CHECK (
+ (ws IS NOT NULL AND COALESCE(org,usr) IS NULL) OR
+ (org IS NOT NULL AND COALESCE(ws,usr) IS NULL) OR
+ (usr IS NOT NULL AND COALESCE(org,ws) IS NULL)
+ ),
+ CONSTRAINT layout_must_be_json CHECK ( is_json(layout) )
+);
+