CREATE TABLE tbum_user
(
  id_user INT NOT NULL AUTO_INCREMENT,
  ds_login varchar(50) NOT NULL,
  ds_password text NOT NULL,
  ds_fullname text,
  op_blocked boolean NOT NULL DEFAULT false,
  CONSTRAINT tbum_users_pk PRIMARY KEY (id_user),
  CONSTRAINT tbum_users_un UNIQUE (ds_login)
);

CREATE TABLE tbum_group
(
  id_group INT NOT NULL AUTO_INCREMENT,
  ds_groupname varchar(50) NOT NULL,
  ds_groupdescription text,
  CONSTRAINT tbum_groups_pk PRIMARY KEY (id_group),
  CONSTRAINT tbum_groups_un UNIQUE (ds_groupname)
);

CREATE TABLE tbum_object
(
  id_object INT NOT NULL AUTO_INCREMENT,
  ds_object varchar(50) NOT NULL,
  ds_longdescription text,
  CONSTRAINT tbum_objects_pk PRIMARY KEY (id_object),
  CONSTRAINT tbum_objects_un UNIQUE (ds_object)
);

CREATE TABLE tbum_group_member
(
  cd_user integer NOT NULL,
  cd_group integer NOT NULL,
  CONSTRAINT tbum_group_member_pk PRIMARY KEY (cd_user, cd_group),
  CONSTRAINT tbum_group_member_group_fk FOREIGN KEY (cd_group)
      REFERENCES tbum_group (id_group) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT tbum_group_member_user_fk FOREIGN KEY (cd_user)
      REFERENCES tbum_user (id_user) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
);

CREATE TABLE tbum_permission
(
  id_permission serial NOT NULL,
  cd_user integer,
  cd_group integer,
  cd_object integer NOT NULL,
  CONSTRAINT tbum_permission_pk PRIMARY KEY (id_permission),
  CONSTRAINT tbum_permission_group_fk FOREIGN KEY (cd_group)
      REFERENCES tbum_group (id_group) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT tbum_permission_user_fk FOREIGN KEY (cd_user)
      REFERENCES tbum_user (id_user) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
);
