-- ######################################################
-- Tabela de strings
-- ######################################################
CREATE TABLE tbl_string
(
  id_string serial NOT NULL,
  ds_string text NOT NULL,
  CONSTRAINT tbl_string_pk PRIMARY KEY (id_string),
  CONSTRAINT tbl_string_un UNIQUE (ds_string)
)
WITH (
  OIDS=FALSE
);

-- ######################################################
-- Tabela de Tags
-- ######################################################
CREATE TABLE tbl_tags
(
  id_tag serial NOT NULL,
  tag_guid character varying(40) NOT NULL,
  ds_tagname text NOT NULL,
  CONSTRAINT tbl_tag_pk PRIMARY KEY (id_tag),
  CONSTRAINT tbl_tag_guid_un UNIQUE (tag_guid)
)
WITH (
  OIDS=FALSE
);

-- ######################################################
-- Tabelas de gerenciamento de usuários.
-- ######################################################
CREATE TABLE tbum_user
(
  id_user serial NOT NULL,
  ds_login text 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 serial NOT NULL,
  ds_groupname text 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 serial NOT NULL,
  ds_object text 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
);
