/* ----------------------------------------------------
   Generated by Enterprise Architect Version 15.2
   Title        : SO_create_00_DBFOsociology.sql
   Created On   : 25-JUN-2025 17:11:06
   DBMS         : MySql 8.0.30
   Workbench    : MySQLWorkbench 8.0.32
                  Monterey compatible. Dec 14. 2022
   Designed by  : Dr Hlaszny, Edit
   ----------------------------------------------------
*/

DROP DATABASE   IF EXISTS     DBFOsociology ;
CREATE DATABASE IF NOT EXISTS DBFOsociology ;

USE                           DBFOsociology ;

SET FOREIGN_KEY_CHECKS=1 ;
SET SQL_SAFE_UPDATES=0;

SET   TRANSACTION READ WRITE ;
START TRANSACTION ;

/*  Drop Tables
 */
DROP TABLE IF EXISTS BFO_TREE                     CASCADE ;
DROP TABLE IF EXISTS CLASS_ANNOTATIONS            CASCADE ;
DROP TABLE IF EXISTS DATA_PROPERTIES              CASCADE ;
DROP TABLE IF EXISTS DATA_PROPERTY_TREE           CASCADE ;
DROP TABLE IF EXISTS DISJOINT_OWL_CLASSES         CASCADE ;
DROP TABLE IF EXISTS HTML_HEADER                  CASCADE ;
DROP TABLE IF EXISTS HTML_TRAILER                 CASCADE ;
DROP TABLE IF EXISTS INVERSE_OBJECT_PROPERTIES    CASCADE ;
DROP TABLE IF EXISTS N_ARY_DATA_ASSERTIONS        CASCADE ;
DROP TABLE IF EXISTS N_ARY_PARTICIPANTS           CASCADE ;
DROP TABLE IF EXISTS N_ARY_RELATIONS              CASCADE ;
DROP TABLE IF EXISTS OBJECT_PROPERTIES            CASCADE ;
DROP TABLE IF EXISTS OBJECT_PROPERTY_TREE         CASCADE ;
DROP TABLE IF EXISTS ONTOLOGY_HEADER              CASCADE ;
DROP TABLE IF EXISTS ONTOLOGY_HEADER_ANNOTATIONS  CASCADE ;
DROP TABLE IF EXISTS ONTOLOGY_TRAILER             CASCADE ;
DROP TABLE IF EXISTS OWL_CLASSES                  CASCADE ;
DROP TABLE IF EXISTS SKOS_ANNOTATIONS             CASCADE ;
DROP TABLE IF EXISTS SO_TREE                      CASCADE ;
DROP TABLE IF EXISTS SUPER_OBJECT_PROPERTIES      CASCADE ;

/*  Create Tables
 */
CREATE TABLE ONTOLOGY_HEADER  -- ----------------------------------------------
(
   hdr_id   INT          NOT NULL COMMENT 'Defines the sequence in the ontology header.',
   xml_cmd  VARCHAR(512) NOT NULL COMMENT 'XML command of an OWL^XML encoded ontology.',

   CONSTRAINT PK_ontologyHdr PRIMARY KEY (hdr_id ASC)
) ;
ALTER TABLE ONTOLOGY_HEADER MODIFY COLUMN hdr_id  INT AUTO_INCREMENT;

CREATE TABLE ONTOLOGY_HEADER_ANNOTATIONS  -- ----------------------------------
(
   hdrAnn_id      INT          NOT NULL  ,
   iri            VARCHAR(64)  NOT NULL  ,
   literal        VARCHAR(512) NOT NULL  ,

   CONSTRAINT PK_ontologyHdrAnnot PRIMARY KEY (hdrAnn_id ASC)
) ;
ALTER TABLE ONTOLOGY_HEADER_ANNOTATIONS MODIFY COLUMN hdrAnn_id INT AUTO_INCREMENT;


CREATE TABLE SKOS_ANNOTATIONS  -- ---------------------------------------------
(
   skosAnn_id      INT          NOT NULL  ,
   skos_annotation VARCHAR(512) NOT NULL  ,

   CONSTRAINT PK_skosAnnot PRIMARY KEY (skosAnn_id ASC)
) ;
ALTER TABLE SKOS_ANNOTATIONS MODIFY COLUMN skosAnn_id INT AUTO_INCREMENT;

CREATE TABLE OWL_CLASSES  -- --------------------------------------------------
(
    class_IRI              VARCHAR(255) NOT NULL COMMENT ' ',
    superclass_of_IRI      VARCHAR(255) NOT NULL COMMENT ' ',
    class_individual_count INT          NOT NULL DEFAULT 0  ,
    annotated              BOOL         NOT NULL DEFAULT false COMMENT 'There is annotation for this entity (in one or more languages).'
--
--    some OWL classes do have 2 superclasses: the SO and the BFO ones !
--
--    CONSTRAINT class_IRI PRIMARY KEY (class_IRI ASC)
) ;

CREATE TABLE DISJOINT_OWL_CLASSES  -- -----------------------------------------
(
   owl_class_IRI     VARCHAR(128) NOT NULL COMMENT 'Name of the active substance.',
   disjoint_group_id INT          NOT NULL COMMENT 'Group identifier.'

--   CONSTRAINT FK_disjoint_class_iri FOREIGN KEY (owl_class_IRI)
--              REFERENCES OWL_CLASSES(class_IRI)
)
COMMENT = 'Classified OWL classes being disjunct, which belong to disjoint group.
           Classes belonging to a group are considered as disjoint.' ;

CREATE TABLE CLASS_ANNOTATIONS  -- --------------------------------------------
(
   classAnn_id         INT           NOT NULL,

   class_IRI           VARCHAR(128)  NOT NULL,
   annotation_type_IRI VARCHAR(128)  NOT NULL,
   language            VARCHAR(32)   NOT NULL,
   annotation          VARCHAR(8192) NOT NULL,

   CONSTRAINT PK_CLASS_ANNOTATIONS PRIMARY KEY (classAnn_id ASC)

--   CONSTRAINT FK_class_iri FOREIGN KEY (class_IRI)
--              REFERENCES OWL_CLASSES(class_IRI)
) ;
ALTER TABLE CLASS_ANNOTATIONS MODIFY COLUMN classAnn_id  INT AUTO_INCREMENT;

CREATE TABLE ONTOLOGY_TRAILER  -- ---------------------------------------------
(
   trailer_id INT          NOT NULL COMMENT 'Defines the sequence in the ontology header.',
   xml_cmd    VARCHAR(512) NOT NULL COMMENT 'XML command of an OWL/XML encoded ontology.',

   CONSTRAINT PK_ontologyTrailer PRIMARY KEY (trailer_id ASC)
) ;
ALTER TABLE ONTOLOGY_TRAILER MODIFY COLUMN trailer_id  INT AUTO_INCREMENT;


CREATE TABLE HTML_HEADER  -- --------------------------------------------------
(
   line_num   INT           NOT NULL COMMENT 'line number providing the correct sequence',
   session_id INT           NOT NULL COMMENT 'session ID: identifies parts of html header',
   html_cmd   VARCHAR(2048) NOT NULL COMMENT 'html command',

   CONSTRAINT PK_header_id PRIMARY KEY (line_num ASC)
) ;
ALTER TABLE HTML_HEADER MODIFY COLUMN line_num INT AUTO_INCREMENT ;


CREATE TABLE HTML_TRAILER  -- -------------------------------------------------
(
   line_num   INT           NOT NULL COMMENT 'line number providing the correct sequence',
   html_cmd   VARCHAR(2048) NOT NULL COMMENT 'html command',

   CONSTRAINT PK_trailer_id PRIMARY KEY (line_num ASC)
) ;
ALTER TABLE HTML_TRAILER MODIFY COLUMN line_num INT AUTO_INCREMENT ;


CREATE TABLE BFO_TREE  -- -----------------------------------------------------
(
   line_num   INT           NOT NULL COMMENT 'line number providing the correct sequence',
   html_cmd   VARCHAR(2048) NOT NULL COMMENT 'html command',

   CONSTRAINT PK_BFO_tree_id PRIMARY KEY (line_num ASC)
) ;
ALTER TABLE BFO_TREE MODIFY COLUMN line_num INT AUTO_INCREMENT ;


CREATE TABLE OBJECT_PROPERTY_TREE  -- -----------------------------------------
(
   line_num   INT           NOT NULL COMMENT 'line number providing the correct sequence',
   html_cmd   VARCHAR(2048) NOT NULL COMMENT 'html command',

   CONSTRAINT PK_OBJPROP_tree_id PRIMARY KEY (line_num ASC)
) ;
ALTER TABLE OBJECT_PROPERTY_TREE MODIFY COLUMN line_num INT AUTO_INCREMENT ;


CREATE TABLE DATA_PROPERTY_TREE  -- -----------------------------------------
(
   line_num   INT           NOT NULL COMMENT 'line number providing the correct sequence',
   html_cmd   VARCHAR(2048) NOT NULL COMMENT 'html command',

   CONSTRAINT PK_OBJPROP_tree_id PRIMARY KEY (line_num ASC)
) ;
ALTER TABLE DATA_PROPERTY_TREE MODIFY COLUMN line_num INT AUTO_INCREMENT ;


CREATE TABLE SO_TREE  -- ------------------------------------------------------
(
   line_num   INT           NOT NULL COMMENT 'line number providing the correct sequence',
   html_cmd   VARCHAR(2048) NOT NULL COMMENT 'html command',

   CONSTRAINT PK_SO_tree_id PRIMARY KEY (line_num ASC)
) ;
ALTER TABLE SO_TREE MODIFY COLUMN line_num INT AUTO_INCREMENT ;


CREATE TABLE OBJECT_PROPERTIES  -- ----------------------------------------
(
    object_property_IRI   VARCHAR(255)  NOT NULL COMMENT 'FK to TRIPLETS',
    annotation_type_IRI   VARCHAR(128)  NOT NULL COMMENT 'typically skos:definition',
    language              VARCHAR(32)   NOT NULL COMMENT 'typically en',
    annotation            VARCHAR(2048) NOT NULL COMMENT 'annotation' ,
    funct                 boolean       NOT NULL COMMENT 'object property attribute' ,
    invFunct              boolean       NOT NULL COMMENT 'object property attribute' ,
    symm                  boolean       NOT NULL COMMENT 'object property attribute' ,
    aSymm                 boolean       NOT NULL COMMENT 'object property attribute' ,
    trans                 boolean       NOT NULL COMMENT 'object property attribute' ,
    refl                  boolean       NOT NULL COMMENT 'object property attribute' ,
    irRefl                boolean       NOT NULL COMMENT 'object property attribute' ,
/*
    CONSTRAINT PK_OBJECT_PROPERTY_ANNOTATIONS PRIMARY KEY (object_property_IRI,
                                                           annotation_type_IRI,
                                                           language  ASC) ,

    CONSTRAINT FK_obj_prop FOREIGN KEY (object_property_IRI)
               REFERENCES OBJECT_PROPERTIES(object_property_IRI)
*/
    CONSTRAINT PK_objectProp PRIMARY KEY (object_property_IRI ASC)
) ;

CREATE TABLE INVERSE_OBJECT_PROPERTIES  -- ----------------------------------------
(
    invObjProp_id                  INT          NOT NULL,

    object_property_IRI            VARCHAR(255) NOT NULL COMMENT 'FK to TRIPLETS',
    inverse_object_property_IRI    VARCHAR(255) NOT NULL COMMENT ' ',

    CONSTRAINT PK_inverseObjProp PRIMARY KEY (invObjProp_id ASC),

    CONSTRAINT FK_obj_prop_iri  FOREIGN KEY (object_property_IRI)
               REFERENCES OBJECT_PROPERTIES(object_property_IRI)
) ;
ALTER TABLE INVERSE_OBJECT_PROPERTIES MODIFY COLUMN invObjProp_id  INT AUTO_INCREMENT ;

CREATE TABLE SUPER_OBJECT_PROPERTIES  -- ----------------------------------------
(
    object_property_IRI            VARCHAR(255) NOT NULL COMMENT 'FK to TRIPLETS',
    super_object_property_IRI      VARCHAR(255) NOT NULL COMMENT ' ',

    CONSTRAINT PK_objectProp PRIMARY KEY (object_property_IRI ASC)
) ;

CREATE TABLE DATA_PROPERTIES  -- ----------------------------------------
(
    data_property_ID              INT           NOT NULL COMMENT 'data properties will be referred by data_property_IRI',
    data_property_IRI             VARCHAR(255)  NOT NULL,
    data_property_type            VARCHAR(128)  NOT NULL,
    data_property_annotationtype  VARCHAR(2047) NOT NULL,

    super_data_property_IRI       VARCHAR(255)  NOT NULL COMMENT 'always owl:topObjectProperty ',

    CONSTRAINT PK_dataProp     PRIMARY KEY (data_property_IRI    ASC)
--  CONSTRAINT PK_dataProperty PRIMARY KEY (data_property_ID ASC)

) ;


-- Core n-ary relation definition
CREATE TABLE N_ARY_RELATIONS
(
    n_ary_relation_id              INT           NOT NULL AUTO_INCREMENT,  -- PK
    predicate_IRI                  VARCHAR(255)  NOT NULL,
    relation_name                  VARCHAR(511)  NOT NULL,
    relation_annotation            VARCHAR(2047) NOT NULL,
    causal_event_individual        VARCHAR(128)  NOT NULL,  -- suffix-numbered, sequentially

    CONSTRAINT PK_n_ary_relations PRIMARY KEY (n_ary_relation_id)
--
--  it can be enabled later
--
--    CONSTRAINT FK_predicate FOREIGN KEY (predicate_IRI)
--        REFERENCES OBJECT_PROPERTIES(object_property_IRI)
);

-- Entities participating in n-ary relations (unified subjects/objects)
CREATE TABLE N_ARY_PARTICIPANTS
(
    participant_id                INT          NOT NULL AUTO_INCREMENT, -- PK
    n_ary_relation_id             INT          NOT NULL,
    individual_name               VARCHAR(128) NOT NULL, -- suffix-numbered, sequentially
    class_IRI                     VARCHAR(255) NOT NULL,
    role_type                     ENUM('SUBJECT', 'OBJECT') NOT NULL,

    CONSTRAINT PK_participants PRIMARY KEY (participant_id)

--    CONSTRAINT FK_n_ary_relation FOREIGN KEY (n_ary_relation_id)
--        REFERENCES N_ARY_RELATIONS(n_ary_relation_id) ON DELETE CASCADE

--
--    some OWL classes do have 2 superclasses: the SO and the BFO ones !
--    class_IRI cannot be index > consequence> ERROR CODE 1822
--
--    CONSTRAINT FK_participant_class FOREIGN KEY (class_iri)
--        REFERENCES OWL_CLASSES(class_IRI)
);

-- Data property assertions for participants
CREATE TABLE N_ARY_DATA_ASSERTIONS
(
    assertion_id                  INT          NOT NULL AUTO_INCREMENT, -- PK
    participant_id                INT          NOT NULL,
    data_property_IRI             VARCHAR(255) NOT NULL,
    data_property_value           VARCHAR(255) NOT NULL,

    CONSTRAINT PK_data_assertions PRIMARY KEY (assertion_id)
/*
    later can be enabled again :)

    CONSTRAINT FK_participant FOREIGN KEY (participant_id)
        REFERENCES N_ARY_PARTICIPANTS(participant_id) ON DELETE CASCADE,

    CONSTRAINT FK_data_property FOREIGN KEY (data_property_IRI)
        REFERENCES DATA_PROPERTIES(data_property_IRI)
*/
);

COMMIT ;

/*  end of SO_create_00_DBFOsociology.sql
 */
