Annotation Database Entity Documentation: Difference between revisions

From MediaWiki
Jump to navigation Jump to search
No edit summary
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
This page contains database entity documentation generated from the production database by the script, [https://gitlab.com/rskelly/msea-rov-db/-/blob/main/model/db_extract_docs.py db_extract_docs.py].
The database is large, complex and relational with a lot of entities describing many facets of ROV operations, measurements and observations.
 
= Notes About Specific Entities =
 
These notes about specific entities complement the generated documentation below.
 
== [[#rov.dive|rov.dive]] and [[#rov.transect|rov.transect]] ==
 
Dives represent the span of time during which an ROV, submersible or drop camera is in the water, but may also represent the time during which the instruments are operating. In cases when the instrument data are contained entirely within the time span logged by the operator, the times are recorded unchanged. When the instrument data extend beyond the recorded times of the dive, they may be extended. Occasionally, the operator will record an erroneous time, or omit a time altogether. The instrument times can help to reconstruct this history. Dives also relate to important configuration information, objectives, crew and operational notes.
 
Transects are defined by their start and end times, contained entirely within dives and do not cross the boundaries between dives. They do not have any related entities and function mainly as accounting items. However, they are extremely important in the analysis of observations and measurements collected during the dive. For example, if one is calculating the density of a particular population of organisms, one must know the precise geographic extent of the region. Transects accomplish this and store objectives and operational notes.
 
In instances where the times of transects are not recorded, or lost, they can sometimes be reconstructed from status events in the observation record (e.g., a VideoMiner database may have transect start/end events). Otherwise, they are not recorded at all. Ideally, transect records are present and their start and end times are recorded without modification, so long as they are reasonable (i.e., the end time occurs after the start time).
 
= Generated Documentation =
 
Database entity documentation is generated from the production database by the script, [https://gitlab.com/rskelly/msea-rov-db/-/blob/main/utilities/maintenance/db_generate_docs.py db_generate_docs.py]. The script outputs a file whose contents can be copied into this page after the <!-- BEGIN GENERATED CONTENT --> tag.


The documentation is arranged into conceptual groupings with the following structure.  
The documentation is arranged into conceptual groupings with the following structure.  


* Grouping
* Schema
** Schema
** Table
*** Table
** Materialized View
*** Materialized View
** View
*** View


System and Django tables aren't included. The ID column of each table is also excluded.
System and Django tables aren't included. The ID column of each table is also excluded.
== Database Comments ==
Documentation resides in the database itself, in the form of comments on the relations and columns. Documentations can be created by executing SQL statements in the form,
    COMMENT ON SHCEMA [schema] IS 'This is a schema comment.'
    COMMENT ON TABLE [schema].[table name] IS 'This is a table comment.'
    COMMENT ON COLUMN [schema].[table name].[column name] IS 'This is a column comment.'
Comments are managed using DDL, as described on the [[Annotation_Database#Database_Upgrades|Database Upgrades]] page.
== Generated Entity Documentation ==
''Note: this page is auto-generated from the documentation comments in the actual database. Do not edit it directly.''


<!-- BEGIN GENERATED CONTENT -->
<!-- BEGIN GENERATED CONTENT -->
<markdown>
<span id="inaturalist"></span>
## Groups
 
== Schema: inaturalist ==
 
Stores data from the [https://www.inaturalist.org iNaturalist] taxonomy catalogue.
 
<span id="inaturalist.observation"></span>
=== Table: observation ===


Stores observations from the [https://www.inaturalist.org/projects/marine-life-of-the-northeast-pacific iNaturalist species guide]. TODO: This table isn't linked to the [[#shared.taxon|taxon]] table by a foreign key relation because the taxon ID is not unique in this table.


{| class="wikitable"
|+ Columns in "observation"
|-
! Name !! Type !! Nullable !! Documentation
|-
| captive_cultivated || boolean || YES || True, if the observation is of a captive or farmed organism.
|-
| common_name || character varying || YES || The common name of the organism.
|-
| coordinates_obscured || boolean || YES || Indicates whether the coordinate is obscured for the public.
|-
| created_at || timestamp with time zone || YES || The time of creation of the record.
|-
| description || text || YES || A description of the observation.
|-
| geoprivacy || character varying || YES || Set to private if the record is not public. TODO: Other values?
|-
| iconic_taxon_name || character varying || YES || Grouping by arbitrary taxonomic level.
|-
| image_url || text || YES || A URL for an image of the observation.
|-
| latitude || real || YES || The latitude of the observation.
|-
| license || character varying || YES || The license applied to the record.
|-
| longitude || real || YES || The longitude of the observation.
|-
| num_identification_agreements || smallint || YES || The number of votes for the identifaction.
|-
| num_identification_disagreements || smallint || YES || Number of votes against the identification.
|-
| oauth_application_id || character varying || YES || The ID of an OAUTH application used to modify the record.
|-
| observed_on || date || YES || The time of observation. Created by combining the observed_on and time_observed_at and time_zone fields.
|-
| place_guess || character varying || YES || The informal name of the site of the observation.
|-
| positional_accuracy || integer || YES || The positional accuracy of the observation position (m).
|-
| positioning_device || character varying || YES || The device used to collect the position.
|-
| positioning_method || character varying || YES || The positioning method.
|-
| public_positional_accuracy || integer || YES || The positional accuracy of the position showed to the public (m).
|-
| quality_grade || character varying || YES || The quality of the report. 'research' indicates that the record is authoritative.
|-
| scientific_name || character varying || YES || The scientific name given to the observation.
|-
| sound_url || text || YES || A URL for a sound file for the record.
|-
| species_guess || character varying || YES || A guess at the species name.
|-
| tag_list || jsonb || YES || A list of tags associated with the observation. Represented as a JSON list.
|-
| taxon_class_name || character varying || YES || The name of the taxon's class.
|-
| taxon_family_name || character varying || YES || The family of the taxon.
|-
| taxon_form_name || character varying || YES || The form of the taxon.
|-
| taxon_genus_name || character varying || YES || The genus of the taxon.
|-
| taxon_genushybrid_name || character varying || YES || The hybrid genus of the taxon.
|-
| taxon_geoprivacy || character varying || YES || The privacy setting of the taxon. 'open' or 'obscured'.
|-
| taxon_hybrid_name || character varying || YES || The hybrid name of the taxon.
|-
| taxon_id || integer || NO || The iNaturalist taxon ID.
|-
| taxon_kingdom_name || character varying || YES || The taxon' kingdom.
|-
| taxon_order_name || character varying || YES || The order of the taxon.
|-
| taxon_phylum_name || character varying || YES || The taxon phylum.
|-
| taxon_species_name || character varying || YES || The species of the taxon.
|-
| taxon_subclass_name || character varying || YES || The taxon's subclass.
|-
| taxon_subfamily_name || character varying || YES || The subfamily of the taxon.
|-
| taxon_suborder_name || character varying || YES || The suborder of a taxon.
|-
| taxon_subphylum_name || character varying || YES || The taxon subphylum.
|-
| taxon_subspecies_name || character varying || YES || The subspecies of the taxon.
|-
| taxon_subtribe_name || character varying || YES || The subtribe of the taxon.
|-
| taxon_superclass_name || character varying || YES || The taxon superclass.
|-
| taxon_superfamily_name || character varying || YES || The taxon's superfamily.
|-
| taxon_superorder_name || character varying || YES || The superorder of the taxon.
|-
| taxon_supertribe_name || character varying || YES || The supertribe of the taxon.
|-
| taxon_tribe_name || character varying || YES || The tribe of the taxon.
|-
| taxon_variety_name || character varying || YES || The variety name of the taxon.
|-
| updated_at || timestamp with time zone || YES || The time of update of the record.
|-
| url || text || YES || A URL pointing to the online record.
|-
| user_id || integer || YES || The ID of the iNaturalist user.
|-
| user_login || character varying || YES || The login name of the iNaturalist user.
|}


### Shared
<span id="intertidal"></span>
== Schema: intertidal ==


These are shared tables used by other tables in other schemas.
Stores data for the intertidal database. Contains information about UAS flights, surveys and other derivative data.


#### Schema: shared
<span id="intertidal.quadrat"></span>
{#ddd}
=== Table: quadrat ===
##### Table: db_version <a name="shared.db_version"></a>  


Stores the current database version so that upgrade scripts can perform migrations appropriately.
A record of observations within an intertidal quadrat.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "quadrat"
| revision | int4 | False | None | The revision number. |
|-
| updated_on | timestamp | False | None | The time the upgrade was performed. |
! Name !! Type !! Nullable !! Documentation
| version_major | int4 | False | None | The major version. |
|-
| version_minor | int4 | False | None | The minor version number. |
| centroid_height || real || YES || The elevation of the corner position in m (ellipsoidal).
|-
| centroid_lat || double precision || YES || The corner latitude.
|-
| centroid_lon || double precision || YES || The corner longitude.
|-
| corner_height1 || real || YES || The elevation of the corner position in m (ellipsoidal).
|-
| corner_height2 || real || YES || The elevation of the corner position in m (ellipsoidal).
|-
| corner_height3 || real || YES || The elevation of the corner position in m (ellipsoidal).
|-
| corner_height4 || real || YES || The elevation of the corner position in m (ellipsoidal).
|-
| corner_lat1 || double precision || YES || The corner latitude.
|-
| corner_lat2 || double precision || YES || The corner latitude.
|-
| corner_lat3 || double precision || YES || The corner latitude.
|-
| corner_lat4 || double precision || YES || The corner latitude.
|-
| corner_lon1 || double precision || YES || The corner longitude.
|-
| corner_lon2 || double precision || YES || The corner longitude.
|-
| corner_lon3 || double precision || YES || The corner longitude.
|-
| corner_lon4 || double precision || YES || The corner longitude.
|-
| created_on || timestamp without time zone || NO || created_on = models.DateTimeField(default = datetime.utcnow, null = False)
|-
| flag_number || character varying || NO || The number of the flag used to mark the quadrat. May be non-numeric if necessary.
|-
| geom || geometry || YES || A geometry representing either the corners of the quadrat (multipoint) or the centroid.
|-
| name || character varying || NO || A unique name for the quadrat.
|-
| note || text || YES || An optional note about the quadrat.
|-
| survey_id || integer || NO || A reference to the [[#intertidal.survey|intertidal suvey]].
|-
| time || timestamp without time zone || NO || The time of the quadrat (UTC).
|-
| transect || integer || NO || The transect number. This is an integer corresponding to whatever rubric was chosen for the survey.
|-
| zone || integer || NO || The zone number. This is an integer corresponding to whatever rubric was chosen for the survey.
|}


##### Table: file <a name="shared.file"></a>  
<span id="intertidal.quadrat_observation"></span>
=== Table: quadrat_observation ===


Stores a record of a file object and its location on disk, along with some metadata. This entity is used by all other entities in all schemas that refer to a file object. This should make it easier to audit file stores and e.g., find duplicates using the hash.
Records observations within [[#intertidal.quadrat|quadrats]]. The observation type enumeration is defined in the database export panel.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "quadrat_observation"
| blob_url | varchar | False | None | A URL referencing the file in online blob storage. This field is subject to change depending on where the files reside and will change if they're moved. |
|-
| created_on | timestamp | False | None | The creation time of the file record, not necessarily the file itself (this should be stored in metadata). |
! Name !! Type !! Nullable !! Documentation
| description | text | False | None | An optional description for the file. |
|-
| file_type_id | int4 | False | None | An optional reference to the [file type](#shared.file_type). |
| cell || integer || YES || The quadrat cell, typically from 0 - 100.
| hash | varchar | False | None | And MD5 hash of the file data. Used to compare files and search for identical versions. |
|-
| metadata | jsonb | False | None | A JSON dictionary containing metadata relating to the file. |
| count || integer || YES || The number of organisms observed.
| name | varchar | False | None | The name for the file. |
|-
| path | varchar | False | None | A path of the file, relative to the root directory where files are stored. |
| coverage || real || YES || The percent coverage by the organism, 0-100. TODO: Not part of the specification.
| updated_on | timestamp | False | None | The update time of the file record, not necessarily the file itself (this should be stored in metadata). |
|-
| length || real || YES || The measured length of an organism.
|-
| quadrat_id || integer || NO || A link to the [[#intertidal.quadrat|quadrat]].
|-
| surveytaxon_id || integer || NO || A link to the [[#intertidal.survey_taxon|survey taxon]].
|-
| type || integer || YES || The type of observation; one of quadrat_obs_type.
|}


##### Table: file_type <a name="shared.file_type"></a>  
<span id="intertidal.quadrat_substrate"></span>
=== Table: quadrat_substrate ===


A list of file types.
List substrates observed in intertidal quadrats.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "quadrat_substrate"
| name | varchar | False | None | The name of the file type. |
|-
| short_code | varchar | False | None | A short code for referencing the file type in import documents. |
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || The name of the substrate.
|}


##### Table: hart_taxon <a name="shared.hart_taxon"></a>  
<span id="intertidal.quadrat_substrate_coverage"></span>
=== Table: quadrat_substrate_coverage ===


Species from wherever the Hart codes are from? This table contains records loaded from the VideoMiner species table. This appears to be related to whatever the source of Hart codes is, but at this point VM is the only source. If the name needs to be changed in the future, so be it. Records in this table have a one-to-one relationship with records in the [taxon](#shared.taxon) table, and it serves as a metadata table for records stored there.
Associates [[#intertidal.quadrat_substrate|quadrat substrate]] coverages with [[#intertidal.quadrats|quadrats]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "quadrat_substrate_coverage"
| authority | text | False | None | The identification authority. |
|-
| common_name | varchar | False | None | The common name. |
! Name !! Type !! Nullable !! Documentation
| from_date | date | False | None | ? |
|-
| grouping_id | int4 | False | None | The grouping. * B - Bird * F - Fish * I - Invertebrate * M - Mammal * O - Object? * R - Reptile |
| coverage || real || NO || The coverage amount between 0% and 100%.
| latin_name | varchar | False | None | The Latin name of the item, which is distinct in this table from the scientific name. Appears to be informal, and not necessarily Latin. |
|-
| nodc_code_v7 | float4 | False | None | The NODC code, v7. |
| quadrat_id || integer || NO || A reference to the [[#intertidal.quadrat|quadrat]].
| nodc_code_v8 | int4 | False | None | The NODC code, V8. Identical to the ITIS ID. |
|-
| rank_id | int4 | False | None | A three-letter code indicating the taxonomic level. |
| substrate_id || integer || NO || A reference to the [[#intertidal.quadrat_substrate|substrate]].
| scientific_name | varchar | False | None | The scientific (e.g., Linnean) name. |
|}
| sp_species_code | varchar | False | None | Another species code whose purpose/origin is not known. |
| species_code | varchar | False | None | The species, or Hart, code. |
| species_prov_code | varchar | False | None | ? |
| taxa_reference | text | False | None | The reference for the identification. |
| to_date | date | False | None | ? |


##### Table: library <a name="shared.library"></a>  
<span id="intertidal.survey"></span>
=== Table: survey ===


This table stores a partial record of documents, books and papers that can be referenced by other entities. The ISBN and DOI fields are set to unique, but these may vary (in representation, at least) for a single document so care should be taken not to add duplicates. However, updated papers with the same title and author, but different date, are not disallowed.
Stores metadata about intertidal surveys.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "survey"
| abstract | text | False | None | The abstract of the entry. |
|-
| authors | jsonb | False | None | The (list of) author(s) of the document. This is a JSON list of objects containing whatever information is necessary. Authors should be listed with at least first_name and last_name, and any other relevant information, such as email or institution. |
! Name !! Type !! Nullable !! Documentation
| created_on | timestamp | False | None | The creation time of the file record, not necessarily the file itself (this should be stored in metadata). |
|-
| doi | varchar | False | None | The DOI of the document. |
| created_on || timestamp without time zone || NO || The time of creation of this record.
| file_id | int4 | False | None | An optional reference to a [file](#shared.file). |
|-
| institution | varchar | False | None | The name of the institution or publisher responsible for the document. |
| end_date || timestamp without time zone || YES || The end date of the survey.
| isbn | varchar | False | None | The ISBN of the book, if it is a book. |
|-
| issn | varchar | False | None | The ISSN of the entry. |
| name || character varying || NO || The name of the survey.
| keywords | jsonb | False | None | A list of keywords relating to the entry. |
|-
| mendeley_id | varchar | False | None | The ID of the record in Mendeley. |
| note || text || YES || Notes about the survey.
| publication | varchar | False | None | The name of the publication in which the document appeared. |
|-
| title | text | False | None | The title of the book, paper, or other document. |
| objective || text || YES || The survey objective.
| type | varchar | False | None | Describes the type of entry: book, article, etc. |
|-
| updated_on | timestamp | False | None | The update time of the file record, not necessarily the file itself (this should be stored in metadata). |
| site_id || integer || YES || Relates the survey to a [[#shared.site|site]] entity.
| year | varchar | False | None | The publishing date of the document. |
|-
| start_date || timestamp without time zone || NO || The start date of the survey.
|}


##### Table: mseauser <a name="shared.mseauser"></a>  
<span id="intertidal.survey_crew"></span>
=== Table: survey_crew ===


Represents an MSEA user and is linked to a single Django auth User. Stores extra application-related properties such as the Biigle API key.
Associates [[#intertidal.survey|intertidal survey]] crew members with [[#intertidal.survey_role|roles]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "survey_crew"
| biigle_api_key | varchar | False | None | The Biigle API key. |
|-
| biigle_username | varchar | False | None | The Biigle username. |
! Name !! Type !! Nullable !! Documentation
| pg_role | varchar | False | None | The name of the PostgreSQL role that the user will use to log in directly to the database. |
|-
| user_id | int4 | False | None | A reference to the [Django user](#public.auth_user). |
| note || text || YES || An optional note about the survey role.
|-
| person_id || integer || NO || A reference to the person with this [[#shared.person|role]].
|-
| role_id || integer || NO || A reference to the [[#intertidal.survey_role|role]].
|-
| survey_id || integer || NO || A reference to the [[#intertidal.survey|survey]].
|}


##### Table: mseauser_restriction <a name="shared.mseauser_restriction"></a>  
<span id="intertidal.survey_role"></span>
=== Table: survey_role ===


Links an [MSEA user](#shared.mseauser) to a [restriction](#shared.restriction). The user will have access to records related to this group.
A list of roles available to [[#intertidal.survey_crew|intertidal survey crew members]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "survey_role"
| created_on | timestamp | False | None | The creation time of the record. |
|-
| mseauser_id | int4 | False | None | The ID of the [MSEA user](#shared.mseauser). |
! Name !! Type !! Nullable !! Documentation
| restriction_id | int4 | False | None | The ID of the [restriction](#shared.restriction). |
|-
| updated_on | timestamp | False | None | The last update time of the record. |
| name || character varying || NO || The name of the role.
|-
| note || text || YES || A note about the role.
|}


##### Table: news_item <a name="shared.news_item"></a>  
<span id="intertidal.survey_taxon"></span>
=== Table: survey_taxon ===


A table for news items related to each sub-site.
Links [[#shared.taxon|taxon]] records to [[#intertidal.survey|intertidal surveys]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "survey_taxon"
| content | text | False | None | The content of the item. |
|-
| created_on | timestamp | False | None | The date of creation of the item. |
! Name !! Type !! Nullable !! Documentation
| sites | varchar | False | None | An optional comma-delimited list of sites the item refers to. The current list is 'rca', 'rov', 'intertidal'. Leave empty to apply to all sites. TODO: Currently not standardized or enforced. |
|-
| title | varchar | False | None | A title for the item. |
| survey_id || integer || NO || A link to the [[#intertidal.survey|survey]].
|-
| taxon_id || integer || NO || A link to the [[#shared.taxon|taxon]] record.
|}


##### Table: organisation <a name="shared.organisation"></a>  
<span id="ndst"></span>
== Schema: ndst ==


Convenient storage for organisations involved in MSEA activities.
Contains tables that store transient data loaded from the [https://msea.science/Dive-Logging-App Dive Logging App] so it can be loaded into the ROV database.


| Column Name | Type | Not Null | Default | Description |
<span id="ndst.cruise"></span>
| --- | --- | --- | --- | --- |
=== Table: cruise ===
| country | varchar | False | None | The code for the country where the organisation is based (e.g., "CA" for Canada). |
| name | varchar | False | None | The full name of the organisation. |
| note | text | False | None | An optional note about the organisation. |
| short_code | varchar | False | None | A short code for looking up the entity; usually the organisation's acronym. |


##### Table: person <a name="shared.person"></a>
None


Stores information about people involved in all aspects of the application. This is not intended to be a comprehensive duplicate of the individual's HR dossier, just a means of representing a person and providing a means of associating it with a real-world individual, e.g., by their email.
{| class="wikitable"
|+ Columns in "cruise"
|-
! Name !! Type !! Nullable !! Documentation
|-
| active || boolean || NO || [None]
|-
| created_on || timestamp without time zone || NO || [None]
|-
| leg || text || YES || [None]
|-
| name || text || YES || [None]
|-
| note || text || YES || [None]
|-
| objective || text || YES || [None]
|-
| row_id || text || YES || [None]
|-
| status || character varying || YES || [None]
|-
| summary || text || YES || [None]
|-
| updated_on || timestamp without time zone || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="ndst.diveconfig"></span>
| --- | --- | --- | --- | --- |
=== Table: diveconfig ===
| biigle_user_id | int4 | False | None | The Biigle database ID of a user. The UUID should be used instead. |
| biigle_uuid | bpchar | False | None | The Biigle UUID is used to identify the user in Biigle apps. |
| bio | text | False | None | A brief biography of the person. |
| email | varchar | False | None | Email address. |
| first_name | varchar | False | None | First name. |
| last_name | varchar | False | None | Last name. |
| photo | bytea | False | None | A photo of the person. |


##### Table: restriction <a name="shared.restriction"></a>
None


Provides a list of restrictions that can be applied to individual observation rows, to restrict access to allowed roles.
{| class="wikitable"
|+ Columns in "diveconfig"
|-
! Name !! Type !! Nullable !! Documentation
|-
| active || boolean || NO || [None]
|-
| name || text || YES || [None]
|-
| note || text || YES || [None]
|-
| row_id || text || YES || [None]
|-
| ship_config || text || YES || [None]
|-
| ship_instrument_configs || text || YES || [None]
|-
| sub_config || text || YES || [None]
|-
| sub_instrument_configs || text || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="ndst.dives"></span>
| --- | --- | --- | --- | --- |
=== Table: dives ===
| created_on | timestamp | False | None | The creation time of the restriction. |
| name | varchar | False | None | The name of the restriction. |
| note | text | False | None | An optional note about the restriction. |
| short_code | varchar | False | None | A short code used to reference the restriction. |
| updated_on | timestamp | False | None | The last update time of the restriction. |


##### Table: site <a name="shared.site"></a>
None


Contains the names and geographic boundaries of study sites. This will be useful not only for mapping but for querying data by spatial extent.
{| class="wikitable"
|+ Columns in "dives"
|-
! Name !! Type !! Nullable !! Documentation
|-
| active || boolean || NO || [None]
|-
| cruise_name || text || YES || [None]
|-
| dive_config || text || YES || [None]
|-
| end_time || text || YES || [None]
|-
| leg || text || YES || [None]
|-
| name || text || YES || [None]
|-
| note || text || YES || [None]
|-
| objective || text || YES || [None]
|-
| pilot || text || YES || [None]
|-
| row_id || text || YES || [None]
|-
| site_name || text || YES || [None]
|-
| start_time || text || YES || [None]
|-
| summary || text || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="ndst.equipconfig"></span>
| --- | --- | --- | --- | --- |
=== Table: equipconfig ===
| name | varchar | False | None | A name for the site. |
| note | text | False | None | An optional note about the site. |
| spatial_library_id | int4 | False | None | A reference to the [spatial library](#shared.spatial_library) entry. |


##### Table: spatial_library <a name="shared.spatial_library"></a>
None


Maintains a library of spatial data.
{| class="wikitable"
|+ Columns in "equipconfig"
|-
! Name !! Type !! Nullable !! Documentation
|-
| active || boolean || NO || [None]
|-
| configuration || text || YES || [None]
|-
| name || text || YES || [None]
|-
| note || text || YES || [None]
|-
| row_id || text || YES || [None]
|-
| short_code || text || YES || [None]
|-
| type || text || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="ndst.equipment"></span>
| --- | --- | --- | --- | --- |
=== Table: equipment ===
| created_on | timestamp | False | None | The time when this record was created. |
| file_id | int4 | False | None | A reference to a related [file](#shared.file). |
| geom | geography | False | None | A vector representation of the object(s), projected into WGS84 (lat/lon) and stored as a geography type. |
| metadata | jsonb | False | None | A JSON object containing metadata related to the spatial object. |
| name | varchar | False | None | A name for the entry. |
| note | text | False | None | A note about this library item. |
| rast | bytea | False | None | A raster. |
| thumbnail | bytea | False | None | A small thumbnail in binary (JPG) form. |
| updated_on | timestamp | False | None | The date of update of this record. |


##### Table: spatial_library_file <a name="shared.spatial_library_file"></a>
None


Allows a [spatial library](#shared.spatial_library) entity to own more than one file.
{| class="wikitable"
|+ Columns in "equipment"
|-
! Name !! Type !! Nullable !! Documentation
|-
| active || boolean || NO || [None]
|-
| brand || text || YES || [None]
|-
| instrument_id || integer || YES || [None]
|-
| model || text || YES || [None]
|-
| note || text || YES || [None]
|-
| platform_id || integer || YES || [None]
|-
| row_id || text || YES || [None]
|-
| serial_number || text || YES || [None]
|-
| short_code || text || YES || [None]
|-
| short_code_mapped || character varying || YES || An optional mapping from the origin short code to an internal short code. Not unique because multiple source items can map to a single internal item.
|-
| type || text || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="ndst.people"></span>
| --- | --- | --- | --- | --- |
=== Table: people ===
| file_id | int4 | False | None | A link to the [file](#shared.file). |
| spatial_library_id | int4 | False | None | A link to the [spatial library](#shared.spatial_library). |


##### Table: survey_suggestion <a name="shared.survey_suggestion"></a>
None


A table of suggestions supplied by users for upgrades to the database.
{| class="wikitable"
|+ Columns in "people"
|-
! Name !! Type !! Nullable !! Documentation
|-
| active || boolean || NO || [None]
|-
| email || text || YES || [None]
|-
| first_name || text || YES || [None]
|-
| initials || text || YES || [None]
|-
| last_name || text || YES || [None]
|-
| person_id || integer || YES || [None]
|-
| row_id || text || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="ndst.transects"></span>
| --- | --- | --- | --- | --- |
=== Table: transects ===
| created_on | timestamp | False | None |  |
| down_votes | int4 | False | None | A count of the down votes on the suggestion. |
| email | varchar | False | None | The email of the suggesting user. |
| screen_name | varchar | False | None | A screen name for the suggesting user. |
| suggestion | text | False | None | The text of the suggestion. |
| up_votes | int4 | False | None | A count of the up votes on the suggestion. |


##### Table: taxon <a name="shared.taxon"></a>
None


The taxon table stores information about the identification of observed specimens. A taxon record stores the name of the taxonomic unit (e.g., the species or genus name), or an open nomenclature (ON) identifier using *sp.* or *cf.*; an optional operational taxonomic unit (OTU), and a reference to any known taxa in the Hart, ITIS, iNaturalist or WoRMS databases. The original label stores the name as imported. The label, OTU and Hart code are updated at audit time from the original label and the scientific and common names are updated if available. The auditing process is necessary to produce reasonable data. Some of this work can be performed automatically. Multiple records in this table can refer to the same species or subspecies. It *may or may not be known whether the species referred to by a record are the same or different.* Some amount of auditing will probably be necessary on this table. The contents of this table are driven by observations; it is not populated from existing catalogues but from observations, and the authoritative entity IDs are populated as a post-processing step from existing catalogs. If a match in one of the authoritative catalogue is not found, the relation fields are left empty and the taxon should be audited, to correct spelling or assign a correct identifier.
{| class="wikitable"
|+ Columns in "transects"
|-
! Name !! Type !! Nullable !! Documentation
|-
| active || boolean || NO || [None]
|-
| cruise_name || text || YES || [None]
|-
| dive_name || text || YES || [None]
|-
| end_time || text || YES || [None]
|-
| leg || text || YES || [None]
|-
| name || text || YES || [None]
|-
| note || text || YES || [None]
|-
| objective || text || YES || [None]
|-
| row_id || text || YES || [None]
|-
| start_time || text || YES || [None]
|-
| summary || text || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="obis"></span>
| --- | --- | --- | --- | --- |
== Schema: obis ==
| aphia_id | int4 | False | None | A reference to the [WoRMs](https://www.marinespecies.org/) database. The actual Aphia ID used by WoRMs is used as the primary key in the [WoRMs taxon](#rov.worms_taxon) table. |
| common_name | varchar | False | None | The common name of the taxon. |
| hart_code | varchar | False | None | Used when there's not ref in the hart code table. |
| hart_id | int4 | False | None | A reference to the [Hart code table](#shared.hart_taxon). This is an identification with species used by VideoMiner and other tools that use that list. |
| inaturalist_id | int4 | False | None | A reference to the [iNaturalist](https://www.inaturalist.org/projects/marine-life-of-the-northeast-pacific) taxon. The iNaturalist taxon ID is used as the primary key in the [iNaturalist taxon](#rov.inaturalist_taxon) table. |
| label | varchar | False | None | The label given to the species at audit time. May be modified from the original label. May differ from the scientific or common names. |
| original_label | varchar | False | None | The original label as entered by the annotator or observer. On review or audit, the label, hart_code and otu fields will be populated and references to outside databases updated. This field will not be edited. |
| otu | varchar | False | None | The operational taxonomic unit is a unique identifier for this instances of an observation whose identification isn't certain. |
| review_note | text | False | None | Optional note about the review. |
| reviewed_by_id | int4 | False | None | Relates to the [person](#rov.person) who reviewed the record. |
| reviewed_on | timestamp | False | None | Gives the time that the record was reviewed. |
| scientific_name | varchar | False | None | The scientific (binomial, trinomial) name of the taxon. Updated at audit time, based on the label or other fields. |


##### Table: taxon_restriction <a name="shared.taxon_restriction"></a>
Stores data from the [https://obis.org OBIS] taxonomy and observation database.


Links an [MSEA user](#shared.mseauser) to a [restriction](#shared.restriction). The user will have access to records related to this group.
<span id="obis.taxon"></span>
=== Table: taxon ===


| Column Name | Type | Not Null | Default | Description |
OBIS taxonomy records imported directly from the OBIS observation data, but filtered for uniqueness on the Aphia ID.
| --- | --- | --- | --- | --- |
| created_on | timestamp | False | None | The creation time of the record. |
| restriction_id | int4 | False | None | The ID of the [restriction](#shared.restriction). |
| taxon_id | int4 | False | None | The ID of the [taxon](#shared.taxon). |
| updated_on | timestamp | False | None | The last update time of the record. |


##### Table: taxonomic_grouping <a name="shared.taxonomic_grouping"></a>
{| class="wikitable"  
|+ Columns in "taxon"
|-
! Name !! Type !! Nullable !! Documentation
|-
| aphiaid || integer || NO || [None]
|-
| class || character varying || YES || [None]
|-
| domain || character varying || YES || [None]
|-
| family || character varying || YES || [None]
|-
| forma || character varying || YES || [None]
|-
| genus || character varying || YES || [None]
|-
| gigaclass || character varying || YES || [None]
|-
| infraclass || character varying || YES || [None]
|-
| infrakingdom || character varying || YES || [None]
|-
| infraorder || character varying || YES || [None]
|-
| infraphylum || character varying || YES || [None]
|-
| kingdom || character varying || YES || [None]
|-
| megaclass || character varying || YES || [None]
|-
| natio || character varying || YES || [None]
|-
| order || character varying || YES || [None]
|-
| organismname || character varying || YES || [None]
|-
| originalscientificname || character varying || YES || [None]
|-
| parvorder || character varying || YES || [None]
|-
| parvphylum || character varying || YES || [None]
|-
| phylum || character varying || YES || [None]
|-
| phylum_division || character varying || YES || [None]
|-
| scientificname || character varying || NO || [None]
|-
| section || character varying || YES || [None]
|-
| series || character varying || YES || [None]
|-
| species || character varying || YES || [None]
|-
| subclass || character varying || YES || [None]
|-
| subfamily || character varying || YES || [None]
|-
| subforma || character varying || YES || [None]
|-
| subgenus || character varying || YES || [None]
|-
| subkingdom || character varying || YES || [None]
|-
| suborder || character varying || YES || [None]
|-
| subphylum || character varying || YES || [None]
|-
| subphylum_subdivision || character varying || YES || [None]
|-
| subsection || character varying || YES || [None]
|-
| subspecies || character varying || YES || [None]
|-
| subterclass || character varying || YES || [None]
|-
| subtribe || character varying || YES || [None]
|-
| subvariety || character varying || YES || [None]
|-
| superclass || character varying || YES || [None]
|-
| superdomain || character varying || YES || [None]
|-
| superfamily || character varying || YES || [None]
|-
| superorder || character varying || YES || [None]
|-
| supertribe || character varying || YES || [None]
|-
| taxonid || character varying || YES || [None]
|-
| taxonomicstatus || character varying || YES || [None]
|-
| taxonrank || character varying || YES || [None]
|-
| taxonremarks || text || YES || [None]
|-
| tribe || character varying || YES || [None]
|-
| type || character varying || YES || [None]
|-
| variety || character varying || YES || [None]
|-
| vernacularname || character varying || YES || [None]
|}


Provides a lookup for the taxonomic grouping (Invertebrate, Fish, etc.) Used by VideoMiner.
<span id="pa"></span>
== Schema: pa ==


| Column Name | Type | Not Null | Default | Description |
Stores data about protected areas, including RCAs, parks, etc.
| --- | --- | --- | --- | --- |
| code | bpchar | False | None | A one-letter code for the grouping. |
| name | varchar | False | None | The name of the taxonomic grouping. |
| note | text | False | None | A note about the taxonomic grouping. |


##### Table: taxonomic_rank <a name="shared.taxonomic_rank"></a>  
<span id="pa.mpa"></span>
=== Table: mpa ===


Provides a lookup for the taxonomic rank (Kingdom, Class, Species, etc.) Used by VideoMiner.
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "mpa"
| code | bpchar | False | None | A three-letter code for the rank. |
|-
| name | varchar | False | None | The name of the taxonomic rank. |
! Name !! Type !! Nullable !! Documentation
| note | text | False | None | A note about the taxonomic rank. |
|-
| aichi_t11 || character varying || YES || [None]
|-
| biome || character varying || YES || [None]
|-
| comments || character varying || YES || [None]
|-
| delisdate || integer || YES || [None]
|-
| geom || geometry || YES || [None]
|-
| geometry || USER-DEFINED || YES || [None]
|-
| gov_type || character varying || YES || [None]
|-
| iucn_cat || character varying || YES || [None]
|-
| jur_id || character varying || YES || [None]
|-
| legisl_e || character varying || YES || [None]
|-
| legisl_f || character varying || YES || [None]
|-
| loc_e || character varying || YES || [None]
|-
| loc_f || character varying || YES || [None]
|-
| mgmt_e || character varying || YES || [None]
|-
| mgmt_f || character varying || YES || [None]
|-
| name_e || character varying || YES || [None]
|-
| name_f || character varying || YES || [None]
|-
| name_ind || character varying || YES || [None]
|-
| o_area || double precision || YES || [None]
|-
| objectid || bigint || NO || [None]
|-
| oecm || character varying || YES || [None]
|-
| ogc_fid || integer || NO || [None]
|-
| owner_e || character varying || YES || [None]
|-
| owner_f || character varying || YES || [None]
|-
| parent_id || integer || YES || [None]
|-
| protdate || integer || YES || [None]
|-
| shape_area || double precision || YES || [None]
|-
| shape_length || double precision || YES || [None]
|-
| status_e || character varying || YES || [None]
|-
| status_f || character varying || YES || [None]
|-
| subs_right || character varying || YES || [None]
|-
| type_e || character varying || YES || [None]
|-
| type_f || character varying || YES || [None]
|-
| url || character varying || YES || [None]
|-
| zone_id || integer || YES || [None]
|-
| zonedesc_e || character varying || YES || [None]
|-
| zonedesc_f || character varying || YES || [None]
|}


##### Table: uploaded_file <a name="shared.uploaded_file"></a>  
<span id="pa.mpa_data_object"></span>
=== Table: mpa_data_object ===


A table to store uploaded files that can be associated with other entities in separate requests. This table is intended to store temporary entities: when an uploaded file has been handled, these records should be deleted.
A data object related to an [[#mpa.mpa|MPA]]. This is the abstract, or top-level object, which may contain one or more physical objects (files) or documents.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "mpa_data_object"
| created_on | timestamp | False | None | The time of creation of the record. |
|-
| expires_on | timestamp | False | None | The expiry time of the file. It may be deleted by a maintenance script after this time. |
! Name !! Type !! Nullable !! Documentation
| name | varchar | False | None | The original name of the file. |
|-
| path | varchar | False | None | The path to the temporary location of the file. |
| created_on || timestamp without time zone || NO || The time of creation of the record.
| type | varchar | False | None | The guessed MIME type of the file. |
|-
| description || text || YES || A description of the object.
|-
| doi || character varying || YES || The DOI of the object.
|-
| isbn || character varying || YES || The ISBN of the object.
|-
| mpa_id || integer || NO || A reference to the [[#mpa.mpa|MPA]] record.
|-
| name || character varying || NO || The name of the data object.
|-
| updated_on || timestamp without time zone || NO || The last update time of the object.
|}


### Taxonomy
<span id="pa.mpa_data_object_file"></span>
=== Table: mpa_data_object_file ===


These are tables which contain external taxonomic data and are used by tables in other schemas.
Gives the ability for more than one [[#mpa.data_object|data object]] to own a [[#shared.file|file]] and vice versa.


#### Schema: inaturalist
{| class="wikitable"
|+ Columns in "mpa_data_object_file"
|-
! Name !! Type !! Nullable !! Documentation
|-
| data_object_id || integer || NO || A reference to the [[#mpa.data_object|data object]].
|-
| file_id || integer || NO || A reference to the [[#shared.file|file]].
|}


##### Table: observation <a name="inaturalist.observation"></a>  
<span id="pa.protected_area"></span>
=== Table: protected_area ===


Stores observations from the [iNaturalist species guide](https://www.inaturalist.org/projects/marine-life-of-the-northeast-pacific). TODO: This table isn't linked to the [taxon](#shared.taxon) table by a foreign key relation because the taxon ID is not unique in this table.
A unified table for protected areas.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "protected_area"
| captive_cultivated | bool | False | None | True, if the observation is of a captive or farmed organism. |
|-
| common_name | varchar | False | None | The common name of the organism. |
! Name !! Type !! Nullable !! Documentation
| coordinates_obscured | bool | False | None | Indicates whether the coordinate is obscured for the public. |
|-
| created_at | timestamptz | False | None | The time of creation of the record. |
| area || real || YES || The nominal area in sq. km of the protected area.
| description | text | False | None | A description of the observation. |
|-
| geoprivacy | varchar | False | None | Set to private if the record is not public. TODO: Other values? |
| geom || geometry || NO || The boundary geometry of the protected area.
| iconic_taxon_name | varchar | False | None | Grouping by arbitrary taxonomic level. |
|-
| image_url | text | False | None | A URL for an image of the observation. |
| name_e || character varying || NO || The English name of the protected area.
| latitude | float4 | False | None | The latitude of the observation. |
|-
| license | varchar | False | None | The license applied to the record. |
| name_f || character varying || NO || The French name of the protected area.
| longitude | float4 | False | None | The longitude of the observation. |
|-
| num_identification_agreements | int2 | False | None | The number of votes for the identifaction. |
| note || text || YES || An optional note about the protected area.
| num_identification_disagreements | int2 | False | None | Number of votes against the identification. |
|-
| oauth_application_id | varchar | False | None | The ID of an OAUTH application used to modify the record. |
| original_id || integer || YES || The original ID of the protected area, from the source database.
| observed_on | date | False | None | The time of observation. Created by combining the observed_on and time_observed_at and time_zone fields. |
|-
| place_guess | varchar | False | None | The informal name of the site of the observation. |
| type || character varying || NO || The type of protected area, including "RCA", "MPA", etc.
| positional_accuracy | int4 | False | None | The positional accuracy of the observation position (m). |
|-
| positioning_device | varchar | False | None | The device used to collect the position. |
| year_created || integer || YES || The year of creation of the protected area.
| positioning_method | varchar | False | None | The positioning method. |
|}
| public_positional_accuracy | int4 | False | None | The positional accuracy of the position showed to the public (m). |
| quality_grade | varchar | False | None | The quality of the report. 'research' indicates that the record is authoritative. |
| scientific_name | varchar | False | None | The scientific name given to the observation. |
| sound_url | text | False | None | A URL for a sound file for the record. |
| species_guess | varchar | False | None | A guess at the species name. |
| tag_list | jsonb | False | None | A list of tags associated with the observation. Represented as a JSON list. |
| taxon_class_name | varchar | False | None | The name of the taxon's class. |
| taxon_family_name | varchar | False | None | The family of the taxon. |
| taxon_form_name | varchar | False | None | The form of the taxon. |
| taxon_genus_name | varchar | False | None | The genus of the taxon. |
| taxon_genushybrid_name | varchar | False | None | The hybrid genus of the taxon. |
| taxon_geoprivacy | varchar | False | None | The privacy setting of the taxon. 'open' or 'obscured'. |
| taxon_hybrid_name | varchar | False | None | The hybrid name of the taxon. |
| taxon_id | int4 | False | None | The iNaturalist taxon ID. |
| taxon_kingdom_name | varchar | False | None | The taxon' kingdom. |
| taxon_order_name | varchar | False | None | The order of the taxon. |
| taxon_phylum_name | varchar | False | None | The taxon phylum. |
| taxon_species_name | varchar | False | None | The species of the taxon. |
| taxon_subclass_name | varchar | False | None | The taxon's subclass. |
| taxon_subfamily_name | varchar | False | None | The subfamily of the taxon. |
| taxon_suborder_name | varchar | False | None | The suborder of a taxon. |
| taxon_subphylum_name | varchar | False | None | The taxon subphylum. |
| taxon_subspecies_name | varchar | False | None | The subspecies of the taxon. |
| taxon_subtribe_name | varchar | False | None | The subtribe of the taxon. |
| taxon_superclass_name | varchar | False | None | The taxon superclass. |
| taxon_superfamily_name | varchar | False | None | The taxon's superfamily. |
| taxon_superorder_name | varchar | False | None | The superorder of the taxon. |
| taxon_supertribe_name | varchar | False | None | The supertribe of the taxon. |
| taxon_tribe_name | varchar | False | None | The tribe of the taxon. |
| taxon_variety_name | varchar | False | None | The variety name of the taxon. |
| updated_at | timestamptz | False | None | The time of update of the record. |
| url | text | False | None | A URL pointing to the online record. |
| user_id | int4 | False | None | The ID of the iNaturalist user. |
| user_login | varchar | False | None | The login name of the iNaturalist user. |


#### Schema: obis
<span id="pa.protected_area_data_object"></span>
=== Table: protected_area_data_object ===


##### Table: taxon <a name="obis.taxon"></a>
A data object related to an [[#rca.rca|RCA]]. This is the abstract, or top-level object, which may contain one or more physical objects (files) or documents.


OBIS taxonomy records imported directly from the OBIS observation data, but filtered for uniqueness on the Aphia ID.
{| class="wikitable"
|+ Columns in "protected_area_data_object"
|-
! Name !! Type !! Nullable !! Documentation
|-
| created_on || timestamp without time zone || NO || The time of creation of the record.
|-
| description || text || YES || A description of the object.
|-
| doi || character varying || YES || The DOI of the object.
|-
| isbn || character varying || YES || The ISBN of the object.
|-
| name || character varying || NO || The name of the data object.
|-
| protected_area_id || integer || YES || A link to the [[#pa.protected_area|protected area]].
|-
| updated_on || timestamp without time zone || NO || The last update time of the object.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="pa.protected_area_data_object_file"></span>
| --- | --- | --- | --- | --- |
=== Table: protected_area_data_object_file ===
| aphiaid | int4 | False | None |  |
| class | varchar | False | None |  |
| domain | varchar | False | None |  |
| family | varchar | False | None |  |
| forma | varchar | False | None |  |
| genus | varchar | False | None |  |
| gigaclass | varchar | False | None |  |
| infraclass | varchar | False | None |  |
| infrakingdom | varchar | False | None |  |
| infraorder | varchar | False | None |  |
| infraphylum | varchar | False | None |  |
| kingdom | varchar | False | None |  |
| megaclass | varchar | False | None |  |
| natio | varchar | False | None |  |
| order | varchar | False | None |  |
| organismname | varchar | False | None |  |
| originalscientificname | varchar | False | None |  |
| parvorder | varchar | False | None |  |
| parvphylum | varchar | False | None |  |
| phylum | varchar | False | None |  |
| phylum_division | varchar | False | None |  |
| scientificname | varchar | False | None |  |
| section | varchar | False | None |  |
| series | varchar | False | None |  |
| species | varchar | False | None |  |
| subclass | varchar | False | None |  |
| subfamily | varchar | False | None |  |
| subforma | varchar | False | None |  |
| subgenus | varchar | False | None |  |
| subkingdom | varchar | False | None |  |
| suborder | varchar | False | None |  |
| subphylum | varchar | False | None |  |
| subphylum_subdivision | varchar | False | None |  |
| subsection | varchar | False | None |  |
| subspecies | varchar | False | None |  |
| subterclass | varchar | False | None |  |
| subtribe | varchar | False | None |  |
| subvariety | varchar | False | None |  |
| superclass | varchar | False | None |  |
| superdomain | varchar | False | None |  |
| superfamily | varchar | False | None |  |
| superorder | varchar | False | None |  |
| supertribe | varchar | False | None |  |
| taxonid | varchar | False | None |  |
| taxonomicstatus | varchar | False | None |  |
| taxonrank | varchar | False | None |  |
| taxonremarks | text | False | None |  |
| tribe | varchar | False | None |  |
| type | varchar | False | None |  |
| variety | varchar | False | None |  |
| vernacularname | varchar | False | None |  |


### Intertidal Database
Gives the ability for more than one [[#rca.data_object|data object]] to own a [[#shared.file|file]] and vice versa.


These are tables associated with intertidal surveys.
{| class="wikitable"
|+ Columns in "protected_area_data_object_file"
|-
! Name !! Type !! Nullable !! Documentation
|-
| data_object_id || integer || NO || A reference to the [[#rca.data_object|data object]].
|-
| file_id || integer || NO || A reference to the [[#shared.file|file]].
|}


#### Schema: intertidal
<span id="pa.rca"></span>
=== Table: rca ===


##### Table: quadrat <a name="intertidal.quadrat"></a>
Stores basic information about RCAs along with a boundary geometry.


A record of observations within an intertidal quadrat.
{| class="wikitable"
|+ Columns in "rca"
|-
! Name !! Type !! Nullable !! Documentation
|-
| area || real || YES || The area of the RCA (from source).
|-
| description || text || YES || A description of the RCA.
|-
| formerid || smallint || YES || The former ID of the RCA (from source).
|-
| geom || geometry || YES || The RCA geography.
|-
| hectares || real || YES || The number of hectares in the RCA (from source).
|-
| len || real || YES || The length (?) of the RCA (from source).
|-
| name || character varying || YES || The name of the RCA.
|-
| rca_id || double precision || YES || The RCA ID as defined by the provider.
|-
| sq_km || real || YES || The area of the RCA (from source).
|-
| yr_created || smallint || YES || The year the RCA was created (from source).
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov"></span>
| --- | --- | --- | --- | --- |
== Schema: rov ==
| centroid_height | float4 | False | None | The elevation of the corner position in m (ellipsoidal). |
| centroid_lat | float8 | False | None | The corner latitude. |
| centroid_lon | float8 | False | None | The corner longitude. |
| corner_height1 | float4 | False | None | The elevation of the corner position in m (ellipsoidal). |
| corner_height2 | float4 | False | None | The elevation of the corner position in m (ellipsoidal). |
| corner_height3 | float4 | False | None | The elevation of the corner position in m (ellipsoidal). |
| corner_height4 | float4 | False | None | The elevation of the corner position in m (ellipsoidal). |
| corner_lat1 | float8 | False | None | The corner latitude. |
| corner_lat2 | float8 | False | None | The corner latitude. |
| corner_lat3 | float8 | False | None | The corner latitude. |
| corner_lat4 | float8 | False | None | The corner latitude. |
| corner_lon1 | float8 | False | None | The corner longitude. |
| corner_lon2 | float8 | False | None | The corner longitude. |
| corner_lon3 | float8 | False | None | The corner longitude. |
| corner_lon4 | float8 | False | None | The corner longitude. |
| created_on | timestamp | False | None | created_on = models.DateTimeField(default = datetime.utcnow, null = False) |
| flag_number | varchar | False | None | The number of the flag used to mark the quadrat. May be non-numeric if necessary. |
| geom | geography | False | None | A geometry representing either the corners of the quadrat (multipoint) or the centroid. |
| name | varchar | False | None | A unique name for the quadrat. |
| note | text | False | None | An optional note about the quadrat. |
| survey_id | int4 | False | None | A reference to the [intertidal suvey](#intertidal.survey). |
| time | timestamp | False | None | The time of the quadrat (UTC). |
| transect | int4 | False | None | The transect number. This is an integer corresponding to whatever rubric was chosen for the survey. |
| zone | int4 | False | None | The zone number. This is an integer corresponding to whatever rubric was chosen for the survey. |


##### Table: quadrat_observation <a name="intertidal.quadrat_observation"></a>
The main schema of the ROV database, stores information about all relevant entities including cruise metadata, personnel, dives, transects, equipment configuration, telemetry, water properties and observations.


Records observations within [quadrats](#intertidal.quadrat). The observation type enumeration is defined in the database export panel.
<span id="rov.abundance"></span>
=== Table: abundance ===


| Column Name | Type | Not Null | Default | Description |
Stores a list of abundance labels from the ACFOR scale.
| --- | --- | --- | --- | --- |
| cell | int4 | False | None | The quadrat cell, typically from 0 - 100. |
| count | int4 | False | None | The number of organisms observed. |
| coverage | float4 | False | None | The percent coverage by the organism, 0-100. TODO: Not part of the specification. |
| length | float4 | False | None | The measured length of an organism. |
| quadrat_id | int4 | False | None | A link to the [quadrat](#intertidal.quadrat). |
| surveytaxon_id | int4 | False | None | A link to the [survey taxon](#intertidal.survey_taxon). |
| type | int4 | False | None | The type of observation; one of quadrat_obs_type. |


##### Table: quadrat_substrate <a name="intertidal.quadrat_substrate"></a>
{| class="wikitable"
|+ Columns in "abundance"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || A descriptive label for the abundance level.
|-
| note || text || YES || An optional note about the abundance level.
|-
| rank || integer || YES || A rank used to objectively interpret the abundance label as an ordinal rank. It doesn't matter what the values are so long as they increase monotonically and do not overlap.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up an abundance (e.g., during import) without relying on the primary key.
|-
| source || character varying || NO || A source label to distinguish abundance labels with the same names. TODO: Provisional, pending determination of how abundance codes are handled.
|}


List substrates observed in intertidal quadrats.
<span id="rov.annotation_protocol"></span>
=== Table: annotation_protocol ===


| Column Name | Type | Not Null | Default | Description |
A table to record annotation protocols for annotation projects. Stores information such as the author of the protocol, the observation interval, the medium used and the types of observations to be made.
| --- | --- | --- | --- | --- |
| name | varchar | False | None | The name of the substrate. |


##### Table: quadrat_substrate_coverage <a name="intertidal.quadrat_substrate_coverage"></a>
{| class="wikitable"
|+ Columns in "annotation_protocol"
|-
! Name !! Type !! Nullable !! Documentation
|-
| algae_species || character varying || YES || Whether all algae species are identified: "all", "subset" or "none".
|-
| annotation_software_id || integer || NO || Software used to annotate the video or images. Looked up in the [[#rov.annotation_software|annotation software]] table.
|-
| biogenic_habitat || boolean || YES || True if any habitat categories include fauna (e.g., sponge reefs).
|-
| created_on || timestamp without time zone || NO || The date of creation of this record.
|-
| creator_id || integer || YES || Records the identity of the person who created this protocol.
|-
| fish_species || character varying || YES || Whether all fish species are identified: "all", "subset" or "none".
|-
| fov_interval || real || YES || [None]
|-
| fov_interval_unit || character varying || NO || A unit for the field of view interval, such as 's' for seconds or 'm' for metres.
|-
| habitat_interval || real || YES || [None]
|-
| habitat_interval_unit || character varying || NO || A unit for the habitat interval, such as 's' for seconds or 'm' for metres.
|-
| habitat_only || boolean || YES || Set to true if only habitat variables were recorded.
|-
| image_interval || real || YES || The interval between images or frame grabs. Typically 3 to 10 seconds.
|-
| image_interval_unit || character varying || NO || A unit for the image interval, such as 's' for seconds or 'm' for metres.
|-
| image_overlap || boolean || YES || Is there overlap between the images (true) or do they represent independent non-overlapping space (false).
|-
| invertebrate_species || character varying || YES || Whether all invertebrate species are identified: "all", "subset" or "none".
|-
| is_template || boolean || NO || If this is meant to be a template that is copied for use, mark this column `true`.
|-
| medium_type_id || integer || NO || The type of media used for annotation. Looked up in [[#rov.medium_type|media type]] table.
|-
| name || character varying || NO || The name of the annotation protocol. Should be unique.
|-
| note || text || YES || If only a subset of invert, fish or algae species were identified, note here which groups were the primary focus (target species). For example, benthic fish or corals and sponges. Also for other notes of interest.
|-
| observation_interval || real || YES || [None]
|-
| observation_interval_unit || character varying || NO || A unit for the observation interval, such as 's' for seconds or 'm' for metres.
|-
| protocol_document || character varying || YES || Link, title, DOI, etc. of a document describing the protocol in full.
|-
| species_guide || character varying || YES || A URL to the iNaturalist species guide that was used for annotation.
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


Associates [quadrat substrate](#intertidal.quadrat_substrate) coverages with [quadrats](#intertidal.quadrats).
<span id="rov.annotation_protocol_document"></span>
=== Table: annotation_protocol_document ===


| Column Name | Type | Not Null | Default | Description |
Contains documents related to an [[#rov.annotation_protocol|annotation protocol]]. These can be a URL or actual file data. If the file data are present in the database, the URL can still be used to provide the origin of the file, etc.
| --- | --- | --- | --- | --- |
| coverage | float4 | False | None | The coverage amount between 0% and 100%. |
| quadrat_id | int4 | False | None | A reference to the [quadrat](#intertidal.quadrat). |
| substrate_id | int4 | False | None | A reference to the [substrate](#intertidal.quadrat_substrate). |


##### Table: survey <a name="intertidal.survey"></a>
{| class="wikitable"
|+ Columns in "annotation_protocol_document"
|-
! Name !! Type !! Nullable !! Documentation
|-
| annotation_protocol_id || integer || NO || A reference to the [[#rov.annotation_protocol|annotation protocol]].
|-
| created_on || timestamp without time zone || NO || The time of creation of the record.
|-
| file_name || character varying || YES || The original name of the document file.
|-
| file_type || character varying || YES || The [https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types mime type] of the file. Required if file data are given.
|-
| note || text || YES || An optional note about the document.
|-
| title || character varying || NO || The title of the document.
|-
| updated_on || timestamp without time zone || NO || The time of update of the record.
|-
| url || character varying || YES || An optional URL for the document. If file data are not given, this field is required.
|}


Stores metadata about intertidal surveys.
<span id="rov.annotation_software"></span>
=== Table: annotation_software ===


| Column Name | Type | Not Null | Default | Description |
The software used for annotation.
| --- | --- | --- | --- | --- |
| created_on | timestamp | False | None | The time of creation of this record. |
| end_date | timestamp | False | None | The end date of the survey. |
| name | varchar | False | None | The name of the survey. |
| note | text | False | None | Notes about the survey. |
| objective | text | False | None | The survey objective. |
| site_id | int4 | False | None | Relates the survey to a [site](#shared.site) entity. |
| start_date | timestamp | False | None | The start date of the survey. |


##### Table: survey_crew <a name="intertidal.survey_crew"></a>
{| class="wikitable"
|+ Columns in "annotation_software"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || The name of the annotation software.
|-
| note || text || YES || An optional note about the annotation software.
|-
| short_code || character || NO || Provides a short code for looking up the entity.
|}


Associates [intertidal survey](#intertidal.survey) crew members with [roles](#intertidal.survey_role).
<span id="rov.biocover"></span>
=== Table: biocover ===


| Column Name | Type | Not Null | Default | Description |
A lookup table listing the available biocover types for the [[#rov.habitat_event|habitat_event]] table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity. TODO: Should perhaps refer to the [[#shared.taxon|taxon]] table.
| --- | --- | --- | --- | --- |
| note | text | False | None | An optional note about the survey role. |
| person_id | int4 | False | None | A reference to the person with this [role](#shared.person). |
| role_id | int4 | False | None | A reference to the [role](#intertidal.survey_role). |
| survey_id | int4 | False | None | A reference to the [survey](#intertidal.survey). |


##### Table: survey_role <a name="intertidal.survey_role"></a>
{| class="wikitable"
|+ Columns in "biocover"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || The name of the biocover.
|-
| note || text || YES || An optional description of the biocover.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a biocover (e.g., during import) without relying on the primary key.
|}


A list of roles available to [intertidal survey crew members](#intertidal.survey_crew).
<span id="rov.comment_event"></span>
=== Table: comment_event ===


| Column Name | Type | Not Null | Default | Description |
Provides a way to record comments rather than using a sparse note field on the [[#rov.table|event]].
| --- | --- | --- | --- | --- |
| name | varchar | False | None | The name of the role. |
| note | text | False | None | A note about the role. |


##### Table: survey_taxon <a name="intertidal.survey_taxon"></a>
{| class="wikitable"
|+ Columns in "comment_event"
|-
! Name !! Type !! Nullable !! Documentation
|-
| event_id || integer || NO || A reference to the [[#rov.event|parent event]].
|-
| note || text || YES || A text comment or note.
|}


Links [taxon](#shared.taxon) records to [intertidal surveys](#intertidal.survey).
<span id="rov.complexity"></span>
=== Table: complexity ===


| Column Name | Type | Not Null | Default | Description |
A lookup table listing the available habitat complexity types for the [[#rov.habitat_event|habitat_event]] table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.
| --- | --- | --- | --- | --- |
| survey_id | int4 | False | None | A link to the [survey](#intertidal.survey). |
| taxon_id | int4 | False | None | A link to the [taxon](#shared.taxon) record. |


#### Schema: iform
{| class="wikitable"
|+ Columns in "complexity"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || The name of the complexity type.
|-
| note || text || YES || An optional description of the complexity type.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a complexity (e.g., during import) without relying on the primary key.
|}


##### Table: event_log_data <a name="iform.event_log_data"></a>  
<span id="rov.coverage"></span>
=== Table: coverage ===


| Column Name | Type | Not Null | Default | Description |
A lookup table listing the percentage of coverage for the [[#rov.habitat_event|habitat_event]] table. The coverages are given as ranges so the text of the level is given in the name field and the values in the min and max fields contain the bounding values.
| --- | --- | --- | --- | --- |
| content | jsonb | False | None |  |
| created_on | timestamp | False | None |  |


##### View: event_log <a name="iform.event_log"></a>
{| class="wikitable"
|+ Columns in "coverage"
|-
! Name !! Type !! Nullable !! Documentation
|-
| maximum || real || NO || The minimum value in the range.
|-
| minimum || real || NO || The minimum value in the range.
|-
| name || character varying || NO || A characterization of percent coverage. Presented as a range of percentages.
|-
| note || text || YES || An optional note about the coverage percentage.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a coverage (e.g., during import) without relying on the primary key.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.cruise"></span>
| --- | --- | --- | --- | --- |
=== Table: cruise ===
| created_date | text | False | None |  |
| created_device_id | text | False | None |  |
| event_description | text | False | None |  |
| event_time | text | False | None |  |
| event_title | text | False | None |  |
| event_type | text | False | None |  |
| modified_date | text | False | None |  |
| modified_device_id | text | False | None |  |
| notes | text | False | None |  |
| photos | text | False | None |  |
| position | text | False | None |  |
| position_json | text | False | None |  |
| recorder | text | False | None |  |
| trip_id | text | False | None |  |


### Annotation Database
Cruise legs occur within a [[#rov.cruise|cruise]] and are assigned specific [[#rov.cruise_leg_crew|crews]], [[#rov.program|scientific programs]], etc. A single leg can cover an entire cruise, legs can be spaced end-to-end, or can theoretically overlap. Legs can share members or equipment, and crew members can have specific roles related to a leg. Cruise legs can be created without a [[#rov.program|scientific program]] or a [[#rov.cruise|cruise]] because imported data sets may only list the name of the cruise and not indicate whether it was part of a longer cruise.


These are tables related to the annotation database.
{| class="wikitable"
|+ Columns in "cruise"
|-
! Name !! Type !! Nullable !! Documentation
|-
| approved || integer || NO || If zero, the record is not approved and should not be shown or used. Currently a non-zero value represents approval, but may be expanded to various levels of approval in the future.
|-
| created_on || timestamp without time zone || NO || The date of creation of this record.
|-
| end_time || timestamp without time zone || YES || The end time of the leg.
|-
| leg || integer || NO || Cruise legs are numbered from 1.
|-
| name || character varying || NO || A name for this leg of the cruise.
|-
| note || text || YES || Notes about the cruise.
|-
| objective || text || YES || A statement of the operational or scientific objectives of the cruise.
|-
| planned_track || USER-DEFINED || YES || A multilinestring containing the planned track of the leg. TODO: Not known whether this is necessary.
|-
| ship_id || integer || NO || [None]
|-
| start_time || timestamp without time zone || NO || The start time of the leg.
|-
| summary || text || YES || A summary of the cruise, with information about whether the objectives were met and any other pertinent information.
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


#### Schema: rov
<span id="rov.cruise_crew"></span>
=== Table: cruise_crew ===


##### Table: abundance <a name="rov.abundance"></a>
Associates [[#rov.person|crew members]] with a [[#rov.cruise_leg|cruise leg]] and their [[#rov.cruise_role|roles]]. A crew member can have multiple roles. Note: these roles are distinct from members of [[#rov.program|programs]], such as Chief Scientist. It may be necessary to revisit this structure or the division of roles.


Stores a list of abundance labels from the ACFOR scale.
{| class="wikitable"
|+ Columns in "cruise_crew"
|-
! Name !! Type !! Nullable !! Documentation
|-
| cruise_id || integer || NO || Reference to the [[#rov.cruise_leg|cruise leg]] to which the member is assigned.
|-
| cruise_role_id || integer || NO || Reference to the [[#rov.cruise_role|cruise role]].
|-
| note || text || YES || An optional note about the crew member.
|-
| person_id || integer || NO || Reference to the [[#rov.person|person]] on the crew.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.cruise_document"></span>
| --- | --- | --- | --- | --- |
=== Table: cruise_document ===
| name | varchar | False | None | A descriptive label for the abundance level. |
| note | text | False | None | An optional note about the abundance level. |
| rank | int4 | False | None | A rank used to objectively interpret the abundance label as an ordinal rank. It doesn't matter what the values are so long as they increase monotonically and do not overlap. |
| short_code | varchar | False | None | Contains a short code that can be used to look up an abundance (e.g., during import) without relying on the primary key. |
| source | varchar | False | None | A source label to distinguish abundance labels with the same names. TODO: Provisional, pending determination of how abundance codes are handled. |


##### Table: annotation_config <a name="rov.annotation_config"></a>
None


Links the [annotation protocol](#rov.annotation_protocol) to an [instrument configuration](#rov.instrument_config) to document how annotations were generated.
{| class="wikitable"
|+ Columns in "cruise_document"
|-
! Name !! Type !! Nullable !! Documentation
|-
| created_on || timestamp without time zone || NO || [None]
|-
| cruise_id || integer || NO || [None]
|-
| file_name || character varying || YES || [None]
|-
| file_type || character varying || YES || [None]
|-
| note || text || YES || [None]
|-
| title || character varying || NO || [None]
|-
| updated_on || timestamp without time zone || NO || [None]
|-
| url || character varying || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.cruise_fn_contact"></span>
| --- | --- | --- | --- | --- |
=== Table: cruise_fn_contact ===
| annotation_protocol_id | int4 | False | None | Links to the [annotation protocol](#rov.annotation_protocol). |
| instrument_config_id | int4 | False | None | Links to the [instrument configuration](#rov.instrument_config). |
| note | text | False | None | An optional note about the configuration. |


##### Table: annotation_config_logger <a name="rov.annotation_config_logger"></a>
A table for associating First Nations contacts with a cruise.


Associates one or more [loggers](#shared.person) with an [annotation configuration](#rov.annotation_config).
{| class="wikitable"
|+ Columns in "cruise_fn_contact"
|-
! Name !! Type !! Nullable !! Documentation
|-
| contact_name || character varying || NO || The full name of the contact.
|-
| cruise_id || integer || NO || A reference to the [[#rov.cruise|cruise]].
|-
| email || character varying || YES || The email address of the contact.
|-
| nation || text || YES || The name of the nation or group represented by the contact.
|-
| note || text || YES || A note about the contact.
|-
| phone || character varying || YES || The phone number of the contact.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.cruise_library"></span>
| --- | --- | --- | --- | --- |
=== Table: cruise_library ===
| annotation_config_id | int4 | False | None | The [annotation configuration](#rov.annotation_config) that this logger belongs to. |
| logger_id | int4 | False | None | The [person](#shared.person) responsible for generating the annotations. |


##### Table: annotation_observation_type <a name="rov.annotation_observation_type"></a>
This table creates an association between a [[#rov.cruise_leg|cruise leg]] and [[#rov.library|documents in the library]] that may be relevant to its research objectives.


Provides a multiple linkage to target [species](#shared.taxon) and [observation](#rov.observation_type) types with respect to the [annotation protocol](#rov.annotation_protocol).
{| class="wikitable"
|+ Columns in "cruise_library"
|-
! Name !! Type !! Nullable !! Documentation
|-
| cruiseleg_id || integer || NO || A reference to the [[#rov.cruise_leg|cruise leg]].
|-
| library_id || integer || NO || A reference to the document in the [[#rov.library|library]].
|-
| note || text || YES || An optional note about the document with respect to the cruise leg. May be used to reference points of interest in a paper, etc.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.cruise_program"></span>
| --- | --- | --- | --- | --- |
=== Table: cruise_program ===
| annotation_protocol_id | int4 | False | None | The [annotation protocol](#rov.annotation_protocol) record to which this item applies. |
| observation_category_id | int4 | False | None | A reference to the category: whether the entry involves the target species, a non-target species or an areal species (etc., possibly) |
| observation_type_id | int4 | False | None | A reference to the [observation type](#rov.observation_type). |
| taxon_id | int4 | False | None | A link to the [species](#shared.taxon). |


##### Table: annotation_protocol <a name="rov.annotation_protocol"></a>
A table to link [[#rov.program|programs]] and [[#rov.cruise|cruises]]. A cruise can be under the auspices of more than one program or none.


A table to record annotation protocols for annotation [projects](#rov.project). TODO: Currently under development as a concept. The idea is to develop the protocol and mark it as a template. Users will create [projects](#rov.project) and either associate them with a template protocol or copy and edit the protocol and use the copy. Any protocol can be marked as a template for future use. The template concept is largely a convenience.
{| class="wikitable"
|+ Columns in "cruise_program"
|-
! Name !! Type !! Nullable !! Documentation
|-
| cruise_id || integer || NO || The ID of a [[#rov.cruise|cruise]].
|-
| program_id || integer || NO || The ID of a [[#rov.program|program]].
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.cruise_role"></span>
| --- | --- | --- | --- | --- |
=== Table: cruise_role ===
| algae_species | varchar | False | None | Whether all algae species are identified: "all", "subset" or "none". |
| annotation_software_id | int4 | False | None | Software used to annotate the video or images. Looked up in the [annotation software](#rov.annotation_software) table. |
| biogenic_habitat | bool | False | None | True if any habitat categories include fauna (e.g., sponge reefs). |
| created_on | timestamp | False | None | The date of creation of this record. |
| creator_id | int4 | False | None | Records the identity of the person who created this protocol. |
| fish_species | varchar | False | None | Whether all fish species are identified: "all", "subset" or "none". |
| fov_interval | float4 | False | None |  |
| fov_interval_unit | varchar | False | None | A unit for the field of view interval, such as 's' for seconds or 'm' for metres. |
| habitat_interval | float4 | False | None |  |
| habitat_interval_unit | varchar | False | None | A unit for the habitat interval, such as 's' for seconds or 'm' for metres. |
| habitat_only | bool | False | None | Set to true if only habitat variables were recorded. |
| image_interval | float4 | False | None | The interval between images or frame grabs. Typically 3 to 10 seconds. |
| image_interval_unit | varchar | False | None | A unit for the image interval, such as 's' for seconds or 'm' for metres. |
| image_overlap | bool | False | None | Is there overlap between the images (true) or do they represent independent non-overlapping space (false). |
| invertebrate_species | varchar | False | None | Whether all invertebrate species are identified: "all", "subset" or "none". |
| is_template | bool | False | None | If this is meant to be a template that is copied for use, mark this column `true`. |
| medium_type_id | int4 | False | None | The type of media used for annotation. Looked up in [media type](#rov.medium_type) table.  |
| name | varchar | False | None | The name of the annotation protocol. Should be unique. |
| note | text | False | None | If only a subset of invert, fish or algae species were identified, note here which groups were the primary focus (target species). For example, benthic fish or corals and sponges. Also for other notes of interest. |
| observation_interval | float4 | False | None |  |
| observation_interval_unit | varchar | False | None | A unit for the observation interval, such as 's' for seconds or 'm' for metres. |
| project_id | int4 | False | None | A reference to the [project](#rov.project) to which this record is attached. |
| protocol_document | varchar | False | None | Link, title, DOI, etc. of a document describing the protocol in full. |
| species_guide | varchar | False | None | A URL to the iNaturalist species guide that was used for annotation. |
| updated_on | timestamp | False | None | The date of update of this record. |


##### Table: annotation_protocol_document <a name="rov.annotation_protocol_document"></a>
A lookup table of roles available to members of [[#rov.cruise_leg_crew|cruise leg crews]].


Contains documents related to an [annotation protocol](rov.annotation_protocol). These can be a URL or actual file data. If the file data are present in the database, the URL can still be used to provide the origin of the file, etc.
{| class="wikitable"
|+ Columns in "cruise_role"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || The name of the role.
|-
| note || text || YES || An optional note about the role and its responsibilities.
|-
| short_code || character varying || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.disturbance"></span>
| --- | --- | --- | --- | --- |
=== Table: disturbance ===
| annotation_protocol_id | int4 | False | None | A reference to the [annotation protocol](#rov.annotation_protocol). |
| created_on | timestamp | False | None | The time of creation of the record. |
| file_name | varchar | False | None | The original name of the document file. |
| file_path | varchar | False | None | The path to the file on the file system. If not given, a URL is required. |
| file_type | varchar | False | None | The [mime type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the file. Required if file data are given. |
| note | text | False | None | An optional note about the document. |
| title | varchar | False | None | The title of the document. |
| updated_on | timestamp | False | None | The time of update of the record. |
| url | varchar | False | None | An optional URL for the document. If file data are not given, this field is required. |


##### Table: annotation_protocol_taxon <a name="rov.annotation_protocol_taxon"></a>
Provides a nominal level of disturbance for [[#rov.habitat_event|habitat events]].


Links an [annotation protocol](#rov.annotation_protocol) record to a [taxon](#shared.taxon) record. This is done because an organism observed during an annotation project may be labeled differently than the same organism observed during a different project. If thise occurs, those records will have to be reconciled during a later audit.
{| class="wikitable"
|+ Columns in "disturbance"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || The textual representation of the disturbance level.
|-
| note || text || YES || A note about the disturbance level.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a disturbance (e.g., during import) without relying on the primary key.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.dive"></span>
| --- | --- | --- | --- | --- |
=== Table: dive ===
| annotation_protocol_id | int4 | False | None | A link to the [annotation protocol](#rov.annotation_protocol). |
| taxon_id | int4 | False | None | A link to the [taxon](#shared.taxon). |


##### Table: annotation_software <a name="rov.annotation_software"></a>
A dive is what an ROV does. The dive has a start and end time (not necessarily submerge/resurface), a [[#rov.dive_crew|crew]] and possibly a name. [[#rov.transect|Transects]] occur during dives.


The software used for annotation.
{| class="wikitable"
|+ Columns in "dive"
|-
! Name !! Type !! Nullable !! Documentation
|-
| attributes || jsonb || YES || A JSON column used for recording structured attributes that do not fit with the regular table structure.
|-
| created_on || timestamp without time zone || NO || The date of creation of this record.
|-
| cruise_id || integer || NO || A reference to the [[#rov.cruise_leg|cruise leg]] during which the dive was performed.
|-
| end_time || timestamp without time zone || NO || The end of the dive.
|-
| name || character varying || NO || A name for the dive.
|-
| note || text || YES || An optional note about the dive.
|-
| objective || text || YES || A statement of the practical or research objectives for this dive.
|-
| ship_config_id || integer || NO || A reference to the [[#rov.platform_config|platform config]] for the ship.
|-
| site_id || integer || YES || Optional reference to the geographic [[#rov.site|site]] of the dive.
|-
| start_time || timestamp without time zone || NO || The start of the dive. Not necessarily the time the vehicle is placed in the water.
|-
| sub_config_id || integer || NO || A reference to the [[#rov.platform_config|platform config]] for the submersible or ROV.
|-
| summary || text || YES || A summary of the [[#rov.dive|dive]]; whether objectives were met, problems encountered, etc.
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.dive_crew"></span>
| --- | --- | --- | --- | --- |
=== Table: dive_crew ===
| name | varchar | False | None | The name of the annotation software. |
| note | text | False | None | An optional note about the annotation software. |
| short_code | bpchar | False | None | Provides a short code for looking up the entity. |


##### Table: available_setting <a name="rov.available_setting"></a>
Assigns roles to dive crew members. Crew members are selected from the [[#rov.person|person]].


This table supplies a list of available settings for configuring instances of this model in the [instrument_config](#rov.instrument_config) and [platform_config](#rov.platform_config) tables. The items in this table have a name, a datatype and an optional regular expression that can be used to validate the setting at the application level, as well as an optional list of options.
{| class="wikitable"
|+ Columns in "dive_crew"
|-
! Name !! Type !! Nullable !! Documentation
|-
| dive_id || integer || NO || The [[#rov.dive|dive]] to which the crew member is assigned.
|-
| dive_role_id || integer || NO || A reference to the [[#rov.dive_role|dive role]].
|-
| note || text || YES || An optional note about the crew member.
|-
| person_id || integer || NO || A reference to the [[#rov.person|person]].
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.dive_role"></span>
| --- | --- | --- | --- | --- |
=== Table: dive_role ===
| choices | text | False | None | A comma-delimited list of options from which the user can choose at the application level. |
| model_id | int4 | False | None | The [model](#rov.model) to which the setting applies. |
| name | varchar | False | None | The name of the setting. |
| note | text | False | None | A note about the setting. |
| type | varchar | False | None | The datatype of the setting (e.g., "float", "string"). This is used as a hint to the user but in future may be formalized for type-checking by the application. |
| validator | varchar | False | None | An optional regular expression to check the user-entered value. This would ordinarily apply only to values with a "string" type. Numeric inputs would be checked implicitly during type conversion, but a regular expression can nevertheless be used to validate numeric inputs in the UI. |


##### Table: biocover <a name="rov.biocover"></a>
A list of roles available to crew members on a [[#rov.dive|dive]] via the [[#rov.dive_crew|dive_crew]] table.


A lookup table listing the available biocover types for the [habitat_event](#rov.habitat_event) table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity. TODO: Should perhaps refer to the [taxon](#shared.taxon) table.
{| class="wikitable"
|+ Columns in "dive_role"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || The name of the role.
|-
| note || text || YES || An optional description of the role.
|-
| short_code || character varying || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.equipment_type"></span>
| --- | --- | --- | --- | --- |
=== Table: equipment_type ===
| name | varchar | False | None | The name of the biocover. |
| note | text | False | None | An optional description of the biocover. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a biocover (e.g., during import) without relying on the primary key. |


##### Table: comment_event <a name="rov.comment_event"></a>
This is a lookup table to provide the names of types of equipment for the [[#rov.model_equipment_type|model_equipment_type]] table, e.g., "Digital Still Camera", "Thermometer," "ROV," etc.


Provides a way to record comments rather than using a sparse note field on the [event](#rov.table).
{| class="wikitable"
|+ Columns in "equipment_type"
|-
! Name !! Type !! Nullable !! Documentation
|-
| category || USER-DEFINED || YES || An enumeration column identifying the equipment as platform, instrument or some other type.
|-
| name || character varying || NO || A name for the equipment type.
|-
| note || text || YES || An optional note about the equipment type.
|-
| short_code || character varying || NO || A short code for referencing the equipment type in import documents.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.event"></span>
| --- | --- | --- | --- | --- |
=== Table: event ===
| event_id | int4 | False | None | A reference to the [parent event](#rov.event). |
| note | text | False | None | A text comment or note. |


##### Table: complexity <a name="rov.complexity"></a>
The event table is a parent or abstract table that provides properties common to [[#rov.habitat_event|habitat]], [[#rov.observation_event|observation]], [[#rov.status_event|status]] and [[#rov.measurement_event|measurement]] events. Each of those event records must have a reference to one event record. Conceptually, the event row and its child entity row are considered to be one object.


A lookup table listing the available habitat complexity types for the [habitat_event](#rov.habitat_event) table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.
{| class="wikitable"
|+ Columns in "event"
|-
! Name !! Type !! Nullable !! Documentation
|-
| attributes || jsonb || YES || [None]
|-
| created_on || timestamp without time zone || NO || The time of creation of this record.
|-
| dive_id || integer || NO || A reference to a [[#rov.dive|dive]].
|-
| end_time || timestamp without time zone || YES || The end time of the event. If the event is instantaneous, this field is null.
|-
| frames || jsonb || YES || Preserves the frames from the Biigle annotation.
|-
| medium_filename || character varying || YES || The name of the media file from which this event is derived.
|-
| medium_id || integer || YES || A reference to the [[#rov.medium|medium]] on which this annotation was created.
|-
| original_id || integer || NO || The original ID of the event if read from a source that has IDs.
|-
| original_labels || jsonb || YES || Optionally stores information about annotation labels used to generate this event. For Biigle, stores the label IDs.
|-
| shape || jsonb || YES || The shape used for annotations (e.g., Biigle). The coordinates for this shape should have been converted to metres. GeoJSON doesn't support circles, so we use a format that encapsulates the shape type and the raw list of coordinates, something like: { "type": "circle", "shape": [1.0, 1.0, 1.0] } which is a circle with radius 1 at position 1,1. A whole-screen annotation will be a rectangle the size of the screen.
|-
| shape_area || double precision || YES || The area of the shape in square metres, calculated from the screenand shape dimensions and the laser point distance.
|-
| start_time || timestamp without time zone || NO || The time at the start of the event. If the event is instantaneous, this is the time at which it occurred.
|-
| tags || jsonb || YES || Stores a list of tags relevant to this event.
|-
| transect_id || integer || YES || An optional reference to a [[#rov.transect|transect]]. TODO: Clarify the use of transects and whether this column is nullable.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.event_logger"></span>
| --- | --- | --- | --- | --- |
=== Table: event_logger ===
| name | varchar | False | None | The name of the complexity type. |
| note | text | False | None | An optional description of the complexity type. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a complexity (e.g., during import) without relying on the primary key. |


##### Table: coverage <a name="rov.coverage"></a>
This table tracks the [[#shared.person|people]] who contributed to annotation, which may be composed of a number of separate labels.


A lookup table listing the percentage of coverage for the [habitat_event](#rov.habitat_event) table. The coverages are given as ranges so the text of the level is given in the name field and the values in the min and max fields contain the bounding values.
{| class="wikitable"
|+ Columns in "event_logger"
|-
! Name !! Type !! Nullable !! Documentation
|-
| event_id || integer || NO || The [[#rov.event|event]] that was created from the annotation(s).
|-
| person_id || integer || NO || A [[#shared.person|person]] who contributed to the annotation.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.habitat_event"></span>
| --- | --- | --- | --- | --- |
=== Table: habitat_event ===
| maximum | float4 | False | None | The minimum value in the range. |
| minimum | float4 | False | None | The minimum value in the range. |
| name | varchar | False | None | A characterization of percent coverage. Presented as a range of percentages. |
| note | text | False | None | An optional note about the coverage percentage. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a coverage (e.g., during import) without relying on the primary key. |


##### Table: cruise <a name="rov.cruise"></a>
The habitat event table records information about the [[#rov.biocover|biocover]], [[#rov.thickness|thickness]], [[#rov.substrate|substrate]] and [[#rov.complexity|complexity]] of the habitat. Some survey protocols record the taxon with biocover observations. A reference to the [[#shared.taxon|taxon]] table is provided. This table is a realization of the [[#rov.event|event]] table.


Cruise legs occur within a [cruise](#rov.cruise) and are assigned specific [crews](#rov.cruise_leg_crew), [scientific programs](#rov.program), etc. A single leg can cover an entire cruise, legs can be spaced end-to-end, or can theoretically overlap. Legs can share members or equipment, and crew members can have specific roles related to a leg. Cruise legs can be created without a [scientific program](#rov.program) or a [cruise](#rov.cruise) because imported data sets may only list the name of the cruise and not indicate whether it was part of a longer cruise.
{| class="wikitable"
|+ Columns in "habitat_event"
|-
! Name !! Type !! Nullable !! Documentation
|-
| annotation_protocol_id || integer || NO || A reference to the [[#rov.annotation_protocol|annotation protocol]] used in the creation of this observation.
|-
| biocover_coverage_id || integer || YES || A [[#rov.coverage|coverage]] value for the [[#rov.biocover|biocover]].
|-
| biocover_id || integer || YES || A reference to the [[#rov.biocover|biocover]] lookup.
|-
| complexity_id || integer || YES || A reference to the [[#rov.complexity|habitat complexity]] lookup.
|-
| disturbance_id || integer || YES || Indicates the level of disturbance of the substrate and/or biota.
|-
| event_id || integer || NO || A reference to the parent [[#rov.event|event]].
|-
| relief_id || integer || YES || A reference to the [[#rov.relief|relief]] level.
|-
| substrate_coverage_id || integer || YES || A [[#rov.coverage|coverage]] value for the [[#rov.substrate|substrate]].
|-
| substrate_id || integer || YES || A reference to the dominant [[#rov.substrate|substrate]] lookup.
|-
| taxon_id || integer || YES || A reference to the [[#shared.taxon|taxon]] used in the creation of this observation.
|-
| thickness_id || integer || YES || A reference to the [[#rov.thickness|biocover thickness]] lookup.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.image_quality"></span>
| --- | --- | --- | --- | --- |
=== Table: image_quality ===
| approved | int4 | False | None | If zero, the record is not approved and should not be shown or used. Currently a non-zero value represents approval, but may be expanded to various levels of approval in the future. |
| created_on | timestamp | False | None | The date of creation of this record. |
| end_time | timestamp | False | None | The end time of the leg. |
| leg | int4 | False | None | Cruise legs are numbered from 1. |
| name | varchar | False | None | A name for this leg of the cruise. |
| note | text | False | None | Notes about the cruise. |
| objective | text | False | None | A statement of the operational or scientific objectives of the cruise. |
| planned_track | geography | False | None | A multilinestring containing the planned track of the leg. TODO: Not known whether this is necessary. |
| ship_id | int4 | False | None |  |
| start_time | timestamp | False | None | The start time of the leg. |
| summary | text | False | None | A summary of the cruise, with information about whether the objectives were met and any other pertinent information. |
| updated_on | timestamp | False | None | The date of update of this record. |


##### Table: cruise_crew <a name="rov.cruise_crew"></a>
Nominal image quality levels, originally used by VideoMiner but applicable to new records.


Associates [crew members](#rov.person) with a [cruise leg](#rov.cruise_leg) and their [roles](#rov.cruise_role). A crew member can have multiple roles. Note: these roles are distinct from members of [programs](#rov.program), such as Chief Scientist. It may be necessary to revisit this structure or the division of roles.
{| class="wikitable"
|+ Columns in "image_quality"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || A name for the quality level.
|-
| note || text || YES || An optional note.
|-
| rank || integer || YES || An ordinal rank (zero is high) for the quality level.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up an image quality (e.g., during import) without relying on the primary key.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="rov.import_queue_annotator"></span>
| --- | --- | --- | --- | --- |
=== Table: import_queue_annotator ===
| cruise_id | int4 | False | None |  Reference to the [cruise leg](#rov.cruise_leg) to which the member is assigned. |
| cruise_role_id | int4 | False | None | Reference to the [cruise role](#rov.cruise_role). |
| note | text | False | None | An optional note about the crew member. |
| person_id | int4 | False | None | Reference to the [person](#rov.person) on the crew. |


##### Table: cruise_document <a name="rov.cruise_document"></a>
Stores the import packages created by annotators.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "import_queue_annotator"
| created_on | timestamp | False | None | |
|-
| cruise_id | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| file_name | varchar | False | None | |
|-
| file_path | varchar | False | None | |
| created_on || timestamp without time zone || NO || The date of creation of the record.
| file_type | varchar | False | None | |
|-
| note | text | False | None | |
| cruise_name || character varying || NO || The name of the [[#rov.cruise|cruise]] to which this record is linked. A lookup is not used because the cruise record may not have been created yet.
| title | varchar | False | None | |
|-
| updated_on | timestamp | False | None | |
| data || jsonb || NO || Stores the JSON representation of the import job.
| url | varchar | False | None |  |
|-
| mseauser_id || integer || NO || A reference to the [[#shared.mseauser|MSEA user]] that created the record.
|-
| name || character varying || NO || A unique name for the import queue record.
|-
| note || text || YES || An optional note about the import package.
|-
| status || character varying || YES || A short description of the processing status of the job.
|-
| updated_on || timestamp without time zone || NO || The date of update of the record.
|}


##### Table: cruise_fn_contact <a name="rov.cruise_fn_contact"></a>  
<span id="rov.import_queue_annotator_label_map_prefill"></span>
=== Table: import_queue_annotator_label_map_prefill ===


A table for associating First Nations contacts with a cruise.
A table to store the last configured tags and values for labels. Provides pre-filling in label mapping application.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "import_queue_annotator_label_map_prefill"
| contact_name | varchar | False | None | The full name of the contact. |
|-
| cruise_id | int4 | False | None | A reference to the [cruise](#rov.cruise). |
! Name !! Type !! Nullable !! Documentation
| email | varchar | False | None | The email address of the contact. |
|-
| nation | text | False | None | The name of the nation or group represented by the contact. |
| created_on || timestamp without time zone || YES || [None]
| note | text | False | None | A note about the contact. |
|-
| phone | varchar | False | None | The phone number of the contact. |
| label_tree_name || character varying || YES || The label tree name. If given identifies the label uniquely with the tree name.
|-
| name || character varying || NO || The text of the label.
|-
| tag_data || jsonb || NO || The the tag data.
|-
| tags || jsonb || NO || The list of tags.
|-
| updated_on || timestamp without time zone || YES || [None]
|}


##### Table: cruise_library <a name="rov.cruise_library"></a>  
<span id="rov.import_queue_pi"></span>
=== Table: import_queue_pi ===


This table creates an association between a [cruise leg](#rov.cruise_leg) and [documents in the library](#rov.library) that may be relevant to its research objectives.
Stores the import packages created by principal investigators.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "import_queue_pi"
| cruiseleg_id | int4 | False | None | A reference to the [cruise leg](#rov.cruise_leg). |
|-
| library_id | int4 | False | None | A reference to the document in the [library](#rov.library). |
! Name !! Type !! Nullable !! Documentation
| note | text | False | None | An optional note about the document with respect to the cruise leg. May be used to reference points of interest in a paper, etc. |
|-
| created_on || timestamp without time zone || NO || The date of creation of the record.
|-
| cruise_id || integer || NO || A reference to the [[#rov.cruise|cruise]].
|-
| mseauser_id || integer || NO || A reference to the [[#shared.mseauser|MSEA user]] that created the record.
|-
| name || character varying || NO || A name of the import job
|-
| note || text || YES || An optional note about the import package.
|-
| status || character varying || YES || A short description of the processing status of the job.
|-
| updated_on || timestamp without time zone || NO || The date of update of the record.
|}


##### Table: cruise_program <a name="rov.cruise_program"></a>  
<span id="rov.instrument"></span>
=== Table: instrument ===


A table to link [programs](#rov.program) and [cruises](#rov.cruise). A cruise can be under the auspices of more than one program or none.
This table represents instruments, which are concrete instances of the types represented in the [[#rov.model|model]] table. instruments tend to be things that generate data, be it a thermometer or a camera. For the purposes of this database, an instrument is anything that is not a [[#rov.platform|platform]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "instrument"
| cruise_id | int4 | False | None | The ID of a [cruise](#rov.cruise). |
|-
| program_id | int4 | False | None | The ID of a [program](#rov.program). |
! Name !! Type !! Nullable !! Documentation
|-
| attributes || jsonb || YES || A freeform list of attributes for this instrument.
|-
| created_on || timestamp without time zone || NO || The date of creation of this record.
|-
| model_id || integer || NO || A reference to the instrument [[#rov.model|model]].
|-
| note || text || YES || An optional note about this instrument.
|-
| organisation_id || integer || NO || A reference to the organisation that owns and operates the instrument.
|-
| retired || date || YES || If the instrument is retired, this records the retirement date. If null, the instrument is assumed to be active.
|-
| serial_number || character varying || NO || The serial number of the instrument. If a serial number is not available, some unique identifier can be substituted. No two instruments of the same model may have the same serial number.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up an instrument (e.g., during import) without relying on the primary key.
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


##### Table: cruise_role <a name="rov.cruise_role"></a>  
<span id="rov.instrument_config"></span>
=== Table: instrument_config ===


A lookup table of roles available to members of [cruise leg crews](#rov.cruise_leg_crew).
This table records the configuration of an instrument, including settings and its spatial relationship to a parent entity -- another configured vehicle or instrument upon which this instrument is mounted.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "instrument_config"
| name | varchar | False | None | The name of the role. |
|-
| note | text | False | None | An optional note about the role and its responsibilities. |
! Name !! Type !! Nullable !! Documentation
| short_code | varchar | False | None | |
|-
| configuration || jsonb || YES || Configuration information about the instrument config.
|-
| created_on || timestamp without time zone || NO || The date of creation of this record.
|-
| instrument_id || integer || NO || Reference to the [[#rov.instrument|instrument]] targeted by the configuration.
|-
| name || character varying || NO || The name of the instrument config. Need not be unique: used to identify the config within the platform config.
|-
| note || text || YES || An optional note about this configuration.
|-
| platform_config_id || integer || YES || [None]
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


##### Table: disturbance <a name="rov.disturbance"></a>  
<span id="rov.measurement"></span>
=== Table: measurement ===


Provides a nominal level of disturbance for [habitat events](#rov.habitat_event).
This table preserves time-stamped measurements generated by [[#rov.instrument_config|instruments]]. Each measurement has an associated quantity and unit. TODO: At this point multi-part measurement would be stored separately as the ability to store vectors isn't universal across DBMSes.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "measurement"
| name | varchar | False | None | The textual representation of the disturbance level. |
|-
| note | text | False | None | A note about the disturbance level. |
! Name !! Type !! Nullable !! Documentation
| short_code | varchar | False | None | Contains a short code that can be used to look up a disturbance (e.g., during import) without relying on the primary key. |
|-
| instrument_config_id || integer || NO || The [[#rov.instrument_config|configured instrument]] used to generate this item.
|-
| is_modelled || boolean || NO || A flag to indicate whether the value is derived from measurements by some modelling process.
|-
| measurement_type_id || integer || NO || A reference to the [[#rov.measurement_type|type]] of this measurement.
|-
| quantity || real || NO || The scalar quantity or magnitude of the measurement.
|-
| signal_quality || real || YES || A quality of the measurement as reported by the instrument. TODO: Requires clarification.
|-
| timestamp || timestamp without time zone || NO || The time that the measurement was recorded.
|}


##### Table: dive <a name="rov.dive"></a>  
<span id="rov.measurement_event"></span>
=== Table: measurement_event ===


A dive is what an ROV does. The dive has a start and end time (not necessarily submerge/resurface), a [crew](#rov.dive_crew) and possibly a name. [Transects](#rov.transect) occur during dives.  
A table for storing human-created measurements.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "measurement_event"
| attributes | jsonb | False | None | A JSON column used for recording structured attributes that do not fit with the regular table structure. |
|-
| created_on | timestamp | False | None | The date of creation of this record. |
! Name !! Type !! Nullable !! Documentation
| cruise_id | int4 | False | None | A reference to the [cruise leg](#rov.cruise_leg) during which the dive was performed. |
|-
| end_time | timestamp | False | None | The end of the dive. |
| event_id || integer || NO || A reference to the parent [[#rov.event|event]].
| name | varchar | False | None | A name for the dive. |
|-
| note | text | False | None | An optional note about the dive. |
| measurement_type_id || integer || NO || A reference to the [[#rov.measurement_type|measurement type]].
| objective | text | False | None | A statement of the practical or research objectives for this dive. |
|-
| ship_config_id | int4 | False | None | A reference to the [platform config](#rov.platform_config) for the ship. |
| quantity || real || NO || The measurement value in the [[#rov.measurement_type|measurement type]] unit.
| site_id | int4 | False | None | Optional reference to the geographic [site](#rov.site) of the dive. |
|}
| start_time | timestamp | False | None | The start of the dive. Not necessarily the time the vehicle is placed in the water. |
| sub_config_id | int4 | False | None | A reference to the [platform config](#rov.platform_config) for the submersible or ROV. |
| summary | text | False | None | A summary of the [dive](#rov.dive); whether objectives were met, problems encountered, etc. |
| updated_on | timestamp | False | None | The date of update of this record. |


##### Table: dive_crew <a name="rov.dive_crew"></a>  
<span id="rov.measurement_type"></span>
=== Table: measurement_type ===


Assigns roles to dive crew members. Crew members are selected from the [person](#rov.person).
This is a lookup table of types of measurement types for the [[#rov.measurement|measurement]] or [[#rov.measurement_event|measurement_event]] tables. This is fairly open-ended and can represent something like salinity with a specific unit, be it the SI unit or a discipline-specific unit. It is provided to allow users to easily select units for a measurement category when importing data.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "measurement_type"
| dive_id | int4 | False | None | The [dive](#rov.dive) to which the crew member is assigned. |
|-
| dive_role_id | int4 | False | None | A reference to the [dive role](#rov.dive_role). |
! Name !! Type !! Nullable !! Documentation
| note | text | False | None | An optional note about the crew member. |
|-
| person_id | int4 | False | None | A reference to the [person](#rov.person). |
| maximum || real || YES || An optional upper bound on the value of the measurement. Null implies no limit.
|-
| minimum || real || YES || An optional lower bound on the value of the measurement. Null implies no limit.
|-
| name || character varying || NO || The type of measurement. E.g., "Density" or "Salinity."
|-
| note || text || YES || An optional note about this measurement type.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a measurement type (e.g., during import) without relying on the primary key.
|-
| unit || character varying || NO || The unit. SI units are preferred but not required. The unit selection should probably depend on field-specific idiomatic or cultural preferences.
|}


##### Table: dive_role <a name="rov.dive_role"></a>  
<span id="rov.medium"></span>
=== Table: medium ===


A list of roles available to crew members on a [dive](#rov.dive) via the [dive_crew](#rov.dive_crew) table.
This table represents videos, photographs or other media. It may store acoustic data in the future. The table is designed with a hierarchical structure to allow the preservation of links between original data and derived (i.e., cropped or otherwise modified) data. For example, if a ten minute segment of a one hour video is extracted, the new segment can be stored with a reference to its parent.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "medium"
| name | varchar | False | None | The name of the role. |
|-
| note | text | False | None | An optional description of the role. |
! Name !! Type !! Nullable !! Documentation
| short_code | varchar | False | None | |
|-
| biigle_video_id || integer || YES || Provisional: the ID of the video as represented in [https://biigle.de Biigle.de].
|-
| created_on || timestamp without time zone || NO || The date of creation of this record.
|-
| file_id || integer || NO || A required reference to the [[#shared.file|file]].
|-
| geostamp_source_id || integer || YES || The source of the geostamp information on photo or video data. Refers to an [[#rov.instrument|instrument]], e.g., a GPS.
|-
| height || integer || YES || The height of the video frame in pixels.
|-
| instrument_config_id || integer || NO || An [[#rov.instrument_config|instrument configuration]] for the instrument that generated this media.
|-
| length || real || YES || If a video or acoustic file (etc.), the length in seconds.
|-
| medium_format_id || integer || YES || A reference to the [[#rov.medium_format|format]] of the data.
|-
| note || text || YES || An optional note about this data.
|-
| parent_id || integer || YES || If the video or photo is derived or cropped from another, this refers to the source record (optional).
|-
| source_time || real || YES || If this is an extract from a video or a frame grab, indicates the zero-based start time with respect to the source video.
|-
| start_time || timestamp without time zone || NO || The start date/time of this video, or the instantaneous time if it's a photograph.
|-
| thumbnail || bytea || YES || An optional thumbnail to represent the stored medium.
|-
| width || integer || YES || The width of the video frame in pixels.
|}


##### Table: equipment_type <a name="rov.equipment_type"></a>  
<span id="rov.medium_format"></span>
=== Table: medium_format ===


This is a lookup table to provide the names of types of equipment for the [model_equipment_type](#rov.model_equipment_type) table, e.g., "Digital Still Camera", "Thermometer," "ROV," etc.
A lookup table for data formats for the [[#rov.medium|medium]] table. This will include things like video, photo and acoustic. TODO: To be determined whether medium formats should be discriminated more granularly than this. TODO: Should maybe be categorised into video/photo/acoustic/etc. along with things like the format (JPG, MP4, AAC) and possibly more specific encoding parameters.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "medium_format"
| category | equipment_category | False | None | An enumeration column identifying the equipment as platform, instrument or some other type. |
|-
| name | varchar | False | None | A name for the equipment type. |
! Name !! Type !! Nullable !! Documentation
| note | text | False | None | An optional note about the equipment type. |
|-
| short_code | varchar | False | None | A short code for referencing the equipment type in import documents. |
| extensions || jsonb || NO || A list of file extensions that correspond to this medium type. For example, the JPEG image type may have extensions "jpg" or "jpeg" in any case. This list will help applications guess the correct format of a file if it isn't known. Note that more than one media type can have the same extension, so this feature doesn't provide a guaranteed one-to-one mapping. Use it only as a guide.
|-
| medium_type_id || integer || NO || A reference to the [[#rov.medium_type|medium type]] (e.g., video or photo).
|-
| name || character varying || NO || The name of the format.
|-
| note || text || YES || An optional note about the format.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a medium format (e.g., during import) without relying on the primary key.
|}


##### Table: event <a name="rov.event"></a>  
<span id="rov.medium_type"></span>
=== Table: medium_type ===


The event table is a parent or abstract table that provides properties common to [habitat](#rov.habitat_event), [observation](#rov.observation_event), [status](#rov.status_event) and [measurement](#rov.measurement_event) events. Each of those event records must have a reference to one event record. Conceptually, the event row and its child entity row are considered to be one object.
A simple lookup to provide media types to the [[#rov.annotation_protocol|annotation_protocol]] table. These are not specific media formats (as stored in [[#rov.medium_format|medium_format]]), but provided a higher-level distinction.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "medium_type"
| annotation_config_id | int4 | False | None | The [annotation configuration](#rov.annotation_config) used to generate this event. |
|-
| attributes | jsonb | False | None |  |
! Name !! Type !! Nullable !! Documentation
| created_on | timestamp | False | None | The time of creation of this record. |
|-
| dive_id | int4 | False | None | A reference to a [dive](#rov.dive). |
| name || character varying || NO || The name of the media type.
| end_time | timestamp | False | None | The end time of the event. If the event is instantaneous, this field is null. |
|-
| frames | jsonb | False | None | Preserves the frames from the Biigle annotation. |
| note || text || YES || An optional note about the media type.
| medium_filename | varchar | False | None | The name of the media file from which this event is derived. |
|-
| medium_id | int4 | False | None | A reference to the [medium](#rov.medium) on which this annotation was created. |
| short_code || character || NO || Provides a short code for looking up the entity.
| original_id | int4 | False | None | The original ID of the event if read from a source that has IDs. |
|}
| original_labels | jsonb | False | None | Optionally stores information about annotation labels used to generate this event. For Biigle, stores the label IDs. |
| shape | jsonb | False | None | The shape used for annotations (e.g., Biigle). The coordinates for this shape should have been converted to metres. GeoJSON doesn't support circles, so we use a format that encapsulates the shape type and the raw list of coordinates, something like: { "type": "circle", "shape": [1.0, 1.0, 1.0] } which is a circle with radius 1 at position 1,1. A whole-screen annotation will be a rectangle the size of the screen. |
| shape_area | float8 | False | None | The area of the shape in square metres, calculated from the screenand shape dimensions and the laser point distance. |
| start_time | timestamp | False | None | The time at the start of the event. If the event is instantaneous, this is the time at which it occurred. |
| tags | jsonb | False | None | Stores a list of tags relevant to this event. |
| transect_id | int4 | False | None | An optional reference to a [transect](#rov.transect). TODO: Clarify the use of transects and whether this column is nullable. |


##### Table: event_logger <a name="rov.event_logger"></a>  
<span id="rov.model"></span>
=== Table: model ===


This table tracks the [people](#shared.person) who contributed to annotation, which may be composed of a number of separate labels.
This table records the brand and model of equipment in the inventory. This data is abstract, which is to say, there is only one record for "GoPro Hero4" but there will be one record for each concrete instance of the model in the [[#rov.instrument|instrument]] table. The model table stores both [[#rov.instrument|instruments]] and [[#rov.platform|platforms]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "model"
| event_id | int4 | False | None | The [event](#rov.event) that was created from the annotation(s). |
|-
| person_id | int4 | False | None | A [person](#shared.person) who contributed to the annotation. |
! Name !! Type !! Nullable !! Documentation
|-
| attributes || jsonb || YES || A free-form JSON field for attributes of this model.
|-
| brand_name || character varying || NO || The brand name.
|-
| equipment_type_id || integer || NO || A reference to the [[#rov.equipment_type|equipment type]].
|-
| model_name || character varying || NO || The model name.
|-
| note || text || YES || An optional note about the model.
|}


##### Table: habitat_event <a name="rov.habitat_event"></a>  
<span id="rov.model_documentation"></span>
=== Table: model_documentation ===


The habitat event table records information about the [biocover](#rov.biocover), [thickness](#rov.thickness), [substrate](#rov.substrate) and [complexity](#rov.complexity) of the habitat. Some survey protocols record the taxon with biocover observations. A reference to the [taxon](#shared.taxon) table is provided. This table is a realization of the [event](#rov.event) table.
This table creates an association between a [[#rov.model|model]] and [[#rov.library|documentation in the library]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "model_documentation"
| annotation_protocol_taxon_id | int4 | False | None | A reference to the taxon for a species named as biocover or substrate. |
|-
| biocover_coverage_id | int4 | False | None | A [coverage](#rov.coverage) value for the [biocover](#rov.biocover). |
! Name !! Type !! Nullable !! Documentation
| biocover_id | int4 | False | None | A reference to the [biocover](#rov.biocover) lookup. |
|-
| complexity_id | int4 | False | None | A reference to the [habitat complexity](#rov.complexity) lookup. |
| library_id || integer || NO || A reference to the document in the [[#rov.library|library]].
| disturbance_id | int4 | False | None | Indicates the level of disturbance of the substrate and/or biota. |
|-
| event_id | int4 | False | None | A reference to the parent [event](#rov.event). |
| model_id || integer || NO || A reference to the [[#rov.model|model]].
| relief_id | int4 | False | None | A reference to the [relief](#rov.relief) level. |
|-
| substrate_coverage_id | int4 | False | None | A [coverage](#rov.coverage) value for the [substrate](#rov.substrate). |
| note || text || YES || An optional note about the document with respect to the cruise leg. May be used to reference points of interest in a paper, etc.
| substrate_id | int4 | False | None | A reference to the dominant [substrate](#rov.substrate) lookup. |
|}
| thickness_id | int4 | False | None | A reference to the [biocover thickness](#rov.thickness) lookup. |


##### Table: image_quality <a name="rov.image_quality"></a>  
<span id="rov.model_equipment_type"></span>
=== Table: model_equipment_type ===


Nominal image quality levels, originally used by VideoMiner but applicable to new records.
This table associates an equipment [[#rov.model|model]] with the abstract type of equipment it represents. For example, a GoPro Hero4 is both a digital video camera and a digital still camera. These values are taken from the [[#rov.equipment_type|equipment_type]] table.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "model_equipment_type"
| name | varchar | False | None | A name for the quality level. |
|-
| note | text | False | None | An optional note. |
! Name !! Type !! Nullable !! Documentation
| rank | int4 | False | None | An ordinal rank (zero is high) for the quality level. |
|-
| short_code | varchar | False | None | Contains a short code that can be used to look up an image quality (e.g., during import) without relying on the primary key. |
| equipment_type_id || integer || NO || The [[#rov.equipment_type|equipment type]] ID.
|-
| model_id || integer || NO || A reference to the [[#rov.model|model]].
|}


##### Table: import_queue_annotator <a name="rov.import_queue_annotator"></a>  
<span id="rov.observation_category"></span>
=== Table: observation_category ===


Stores the import packages created by annotators.
Observation categories are used by [[#rov.annotation_protocol|annotation protocols]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "observation_category"
| created_on | timestamp | False | None | The date of creation of the record. |
|-
| cruise_name | varchar | False | None | The name of the [cruise](#rov.cruise) to which this record is linked. A lookup is not used because the cruise record may not have been created yet. |
! Name !! Type !! Nullable !! Documentation
| data | jsonb | False | None | Stores the JSON representation of the import job. |
|-
| mseauser_id | int4 | False | None | A reference to the [MSEA user](#shared.mseauser) that created the record. |
| name || character varying || NO || The name of the observation category.
| name | varchar | False | None | A unique name for the import queue record. |
|-
| note | text | False | None | An optional note about the import package. |
| note || text || YES || An optional note about the observation category.
| status | varchar | False | None | A short description of the processing status of the job. |
|-
| updated_on | timestamp | False | None | The date of update of the record. |
| short_code || character varying || NO || A short code for referencing the observation category in import documents.
|}


##### Table: import_queue_annotator_label_map_prefill <a name="rov.import_queue_annotator_label_map_prefill"></a>  
<span id="rov.observation_confidence"></span>
=== Table: observation_confidence ===


A table to store the last configured tags and values for labels. Provides pre-filling in label mapping application.
Provides a nominal observation confidence level for [[#rov.observation_event|observation events]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "observation_confidence"
| created_on | timestamp | False | None |  |
|-
| label_tree_name | varchar | False | None | The label tree name. If given identifies the label uniquely with the tree name. |
! Name !! Type !! Nullable !! Documentation
| name | varchar | False | None | The text of the label. |
|-
| tag_data | jsonb | False | None | The the tag data. |
| name || character varying || NO || The textual representation of the confidence level.
| tags | jsonb | False | None | The list of tags. |
|-
| updated_on | timestamp | False | None | |
| note || text || YES || A note about the confidence level.
|-
| rank || integer || NO || This field is a way of ranking confidence levels so that an ordering can be established.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a observation confidence (e.g., during import) without relying on the primary key.
|}


##### Table: import_queue_pi <a name="rov.import_queue_pi"></a>  
<span id="rov.observation_event"></span>
=== Table: observation_event ===


Stores the import packages created by principal investigators.
An observation event records the occurrence of a phenomenon as a result of observation by a human user, usually by analyzing a video recording or photograph. Observations can relate to a species taxonomy or an element in a [[#rov.label_tree|label tree]]. This table will be "sparse," that is, certain a value will be given for only one or two columns in each row, and the interpretation of the values will be informed by the information in the [[#rov.annotation_protocol|annotation protocol]] table. This table is a realization of the [[#rov.event|event]] table.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "observation_event"
| created_on | timestamp | False | None | The date of creation of the record. |
|-
| cruise_id | int4 | False | None | A reference to the [cruise](#rov.cruise). |
! Name !! Type !! Nullable !! Documentation
| mseauser_id | int4 | False | None | A reference to the [MSEA user](#shared.mseauser) that created the record. |
|-
| name | varchar | False | None | A name of the import job |
| abundance_id || integer || YES || Link to an [[#rov.abundance|abundance level]].
| note | text | False | None | An optional note about the import package. |
|-
| status | varchar | False | None | A short description of the processing status of the job. |
| annotation_protocol_id || integer || NO || A reference to the [[#rov.annotation_protocol|annotation protocol]] used in the creation of this observation.
| updated_on | timestamp | False | None | The date of update of the record. |
|-
| category || character varying || YES || A free-form category label used for distinguishing types of labels within an annotation project. Useful for flagging records for review.
|-
| count || integer || YES || The number of individuals observed. TODO: Interpretation depends on the observation interval as recorded in the[[#rov.annotation_protocol|annotation protocol]] table.
|-
| coverage_id || integer || YES || Provides an indication of the amount of a scene [[#rov.coverage|covered]] by an organism. Implies habitat forming.
|-
| event_id || integer || NO || A reference to the parent [[#rov.event|event]].
|-
| observation_confidence_id || integer || YES || References the [[#rov.observation_confidence|observation confidence]] lookup to indicate the user's confidence in the observation.
|-
| taxon_id || integer || YES || A reference to the [[#shared.taxon|taxon]] used in the creation of this observation.
|}


##### Table: instrument <a name="rov.instrument"></a>  
<span id="rov.orientation"></span>
=== Table: orientation ===


This table represents instruments, which are concrete instances of the types represented in the [model](#rov.model) table. instruments tend to be things that generate data, be it a thermometer or a camera. For the purposes of this database, an instrument is anything that is not a [platform](#rov.platform).
This table preserves time-stamped orientation measurements from [[#rov.instrument_config|instruments]]. These are interpreted according to a [[#rov.orientation_type|specified type]]. Ship and ROV orientation will be recorded here, though ships don't ordinarily have an orientation.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "orientation"
| attributes | jsonb | False | None | A freeform list of attributes for this instrument. |
|-
| created_on | timestamp | False | None | The date of creation of this record. |
! Name !! Type !! Nullable !! Documentation
| model_id | int4 | False | None | A reference to the instrument [model](#rov.model). |
|-
| note | text | False | None | An optional note about this instrument. |
| instrument_config_id || integer || NO || The [[#rov.instrument_config|configured instrument]] used to generate this item.
| organisation_id | int4 | False | None | A reference to the organisation that owns and operates the instrument. |
|-
| retired | date | False | None | If the instrument is retired, this records the retirement date. If null, the instrument is assumed to be active. |
| is_modelled || boolean || NO || A flag to indicate whether the value is derived from measurements by some modelling process.
| serial_number | varchar | False | None | The serial number of the instrument. If a serial number is not available, some unique identifier can be substituted. No two instruments of the same model may have the same serial number. |
|-
| short_code | varchar | False | None | Contains a short code that can be used to look up an instrument (e.g., during import) without relying on the primary key. |
| orientation || jsonb || NO || The orientation vector.
| updated_on | timestamp | False | None | The date of update of this record. |
|-
| orientation_type_id || integer || NO || A reference to the [[#rov.orientation_type|orientation type]] of this orientation.
|-
| signal_quality || real || YES || The signal quality of the position as reported by the instrument. TODO: Requires clarification.
|-
| timestamp || timestamp without time zone || NO || The time the position was recorded.
|}


##### Table: instrument_config <a name="rov.instrument_config"></a>  
<span id="rov.orientation_type"></span>
=== Table: orientation_type ===


This table records the configuration of an instrument, including settings and its spatial relationship to a parent entity -- another configured vehicle or instrument upon which this instrument is mounted.
These entities describe the interpretation of the orientation vector in the [[#rov.instrument_config|instrument_config]] and [[#rov.orientation|orientation]] tables. This can be a 3- or 4-element vector representing yaw, pitch roll; Tait-Bryan angles; Euler angles or a Quaternion.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "orientation_type"
| configuration | jsonb | False | None | Configuration information about the instrument config. |
|-
| created_on | timestamp | False | None | The date of creation of this record. |
! Name !! Type !! Nullable !! Documentation
| name | varchar | False | None | The name of the instrument config. Need not be unique: used to identify the config within the platform config. |
|-
| note | text | False | None | An optional note about this configuration. |
| name || character varying || NO || The name of the orientation type (e.g., "Quaternion").
| platform_config_id | int4 | False | None | |
|-
| updated_on | timestamp | False | None | The date of update of this record. |
| note || text || YES || An optional note about the orientation type.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up an orientation type (e.g., during import) without relying on the primary key.
|-
| unit || character varying || NO || The units used to interpret the elements of the vector.
|}


##### Table: instrument_config_instrument <a name="rov.instrument_config_instrument"></a>  
<span id="rov.platform"></span>
=== Table: platform ===


This table links an [instrument](#rov.instrument) to an [instrument config](#rov.instrument_config) to enable the use of multiple instrument in the creation of a stream of measurements.
This table maintains the inventory of vehicles, that is, ships and ROVs.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "platform"
| configuration | text | False | None | A JSON object describing the configuration attributes of this instrument. |
|-
| instrument_config_id | int4 | False | None | A link to the [instrument config](#rov.instrument_config). |
! Name !! Type !! Nullable !! Documentation
| instrument_id | int4 | False | None | A link to the [instrument](#rov.instrument). |
|-
| attributes || jsonb || YES || A freeform list of attributes for this platform.
|-
| created_on || timestamp without time zone || NO || The date of creation of this record.
|-
| model_id || integer || NO || A reference to the [[#rov.model|model]] of the platform.
|-
| name || character varying || NO || The name of the platform. If this is a ship, it might be "CCGS Vector" or if it's an ROV, it might be given an arbitrary name by the maintainer.
|-
| note || text || YES || An optional note about this platform.
|-
| organisation_id || integer || NO || A reference to the organisation that owns and operates the platform.
|-
| retired || date || YES || If the platform is retired, this records the date. If null, the platform is assumed to be active.
|-
| serial_number || character varying || YES || The serial number of the platform. If this is an ROV it will be the manufacturer's serial number. If it's a vessel, this might be the IMO number. In any case, it must be unique.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a platform (e.g., during import) without relying on the primary key.
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


##### Table: instrument_setting <a name="rov.instrument_setting"></a>  
<span id="rov.platform_config"></span>
=== Table: platform_config ===


This table contains the settings on a [configured instrument](#rov.instrument_config). These are settings that are changeable between dives and are usually important to the interpretation of the data. Generally, if the configuration is changed, a copy of the [instrument configuration](#rov.instrument_config) is made, and the settings in the new configuration are altered. Available instrument settings can be looked up in the [available_setting](#rov.available_setting) table, along with data type and validation hints. The ID of the available setting is not stored, because the setting relationships are not meant to be enforced.
This table stores configuration information about vehicles (ships, ROVs,etc.) used for surveys. All references to vehicles are made through this table rather than directly to the [[#rov.platform|platform]] table, because the disposition of equipment on the platform is essential to understanding how data has been generated, as well as for simple record-keeping purposes.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "platform_config"
| instrument_config_id | int4 | False | None | A reference to the [instrument configuration](#rov.instrument_config) to which this setting applies. |
|-
| name | varchar | False | None | The name of the setting. May be looked up in the [available settings](#rov.available_setting) table. |
! Name !! Type !! Nullable !! Documentation
| note | text | False | None | An optional note about the configuration. |
|-
| value | varchar | False | None | The value of the setting. May be validated by the regular expression and type conversion specified in the [available settings](#rov.available_setting) table if the setting name matches. |
| configuration || jsonb || YES || The configuration data as a JSON object.
|-
| created_on || timestamp without time zone || NO || The date of creation of this record.
|-
| note || text || YES || An optional note about the configuration record.
|-
| platform_id || integer || NO || A reference to the [[#rov.platform|platform]].
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


##### Table: measurement <a name="rov.measurement"></a>  
<span id="rov.position"></span>
=== Table: position ===


This table preserves time-stamped measurements generated by [instruments](#rov.instrument_config). Each measurement has an associated quantity and unit. TODO: At this point multi-part measurement would be stored separately as the ability to store vectors isn't universal across DBMSes.
This table preserves time-stamped position measurements from [[#rov.instrument_config|instruments]]. These can be linear (e.g., UTM) or angular (e.g., Geographic) positions in a [[#rov.position_type|specified unit]]. Ship and ROV positions will be recorded here. TODO: Should this table have a spatial object (point) as well, or be split into two tables, one for absolute georeferenced positions and one for relative positions and orientations?


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "position"
| instrument_config_id | int4 | False | None | The [configured instrument](#rov.instrument_config) used to generate this item. |
|-
| is_modelled | bool | False | None | A flag to indicate whether the value is derived from measurements by some modelling process. |
! Name !! Type !! Nullable !! Documentation
| measurement_type_id | int4 | False | None | A reference to the [type](#rov.measurement_type) of this measurement. |
|-
| quantity | float4 | False | None | The scalar quantity or magnitude of the measurement. |
| geom || geometry || YES || The point geometry.
| signal_quality | float4 | False | None | A quality of the measurement as reported by the instrument. TODO: Requires clarification. |
|-
| timestamp | timestamp | False | None | The time that the measurement was recorded. |
| instrument_config_id || integer || NO || The [[#rov.instrument_config|configured instrument]] used to generate this item.
|-
| is_modelled || boolean || NO || A flag to indicate whether the value is derived from measurements by some modelling process.
|-
| position_type_id || integer || NO || A reference to the [[#rov.position_type|position type]] of this position.
|-
| signal_quality || real || YES || The signal quality of the position as reported by the instrument. TODO: Requires clarification.
|-
| timestamp || timestamp without time zone || NO || The time the position was recorded.
|}


##### Table: measurement_event <a name="rov.measurement_event"></a>  
<span id="rov.position_type"></span>
=== Table: position_type ===


A table for storing human-created measurements.
Describes the interpretation of a coordinate vector in the [[#rov.position|position]] table. These can be geographic or Cartesian positions or orientations and have defined linear or angular units.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "position_type"
| event_id | int4 | False | None | A reference to the parent [event](#rov.event). |
|-
| measurement_type_id | int4 | False | None | A reference to the [measurement type](#rov.measurement_type). |
! Name !! Type !! Nullable !! Documentation
| quantity | float4 | False | None | The measurement value in the [measurement type](#rov.measurement_type) unit. |
|-
| name || character varying || NO || The name of the position type. E.g., "Geographic" or "Yaw, Pitch, Roll."
|-
| note || text || YES || An optional note about this position type.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a position type (e.g., during import) without relying on the primary key.
|-
| unit || character varying || NO || The unit. Linear or angular. E.g., "m" or "radians."
|}


##### Table: measurement_type <a name="rov.measurement_type"></a>  
<span id="rov.program"></span>
=== Table: program ===


This is a lookup table of types of measurement types for the [measurement](#rov.measurement) or [measurement_event](#rov.measurement_event) tables. This is fairly open-ended and can represent something like salinity with a specific unit, be it the SI unit or a discipline-specific unit. It is provided to allow users to easily select units for a measurement category when importing data.
This is a listing of scientific programs that can be associated with [[#rov.cruise_leg|cruise legs]], and gives information about the governorship and funding of specific research activities. [[#rov.label_tree|Label trees]] and [[#shared.taxonomy|taxonomies]] may be associated with programs, since some trees are relevant to specific research objectives and not others. TODO: Currently a lable tree/taxonomy can only be linked to one program. Need to study further.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "program"
| maximum | float4 | False | None | An optional upper bound on the value of the measurement. Null implies no limit. |
|-
| minimum | float4 | False | None | An optional lower bound on the value of the measurement. Null implies no limit. |
! Name !! Type !! Nullable !! Documentation
| name | varchar | False | None | The type of measurement. E.g., "Density" or "Salinity." |
|-
| note | text | False | None | An optional note about this measurement type. |
| created_on || timestamp without time zone || NO || The date of creation of this item.
| short_code | varchar | False | None | Contains a short code that can be used to look up a measurement type (e.g., during import) without relying on the primary key. |
|-
| unit | varchar | False | None | The unit. SI units are preferred but not required. The unit selection should probably depend on field-specific idiomatic or cultural preferences. |
| end_date || date || YES || The optional end date of the program.
|-
| name || character varying || NO || The name of the program.
|-
| note || text || YES || An optional note about the program.
|-
| objective || character varying || YES || The objective or mandate of the program.
|-
| start_date || date || NO || The starting date of the program.
|-
| summary || text || YES || A summary of the [[#rov.program|program]]; whether objectives were met, problems encountered, etc.
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


##### Table: medium <a name="rov.medium"></a>  
<span id="rov.program_library"></span>
=== Table: program_library ===


This table represents videos, photographs or other media. It may store acoustic data in the future. The table is designed with a hierarchical structure to allow the preservation of links between original data and derived (i.e., cropped or otherwise modified) data. For example, if a ten minute segment of a one hour video is extracted, the new segment can be stored with a reference to its parent.
A table to associate [[#rov.program|programs]] with [[#shared.library|library]] documents.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "program_library"
| biigle_video_id | int4 | False | None | Provisional: the ID of the video as represented in [Biigle.de](https://biigle.de). |
|-
| created_on | timestamp | False | None | The date of creation of this record. |
! Name !! Type !! Nullable !! Documentation
| file_id | int4 | False | None | A required reference to the [file](#shared.file). |
|-
| geostamp_source_id | int4 | False | None | The source of the geostamp information on photo or video data. Refers to an [instrument](#rov.instrument), e.g., a GPS. |
| library_id || integer || NO || A reference to the [[#shared.library|library]] item.
| height | int4 | False | None | The height of the video frame in pixels. |
|-
| instrument_config_id | int4 | False | None | An [instrument configuration](#rov.instrument_config) for the instrument that generated this media. |
| program_id || integer || NO || A reference to the [[#rov.program|program]] item.
| length | float4 | False | None | If a video or acoustic file (etc.), the length in seconds. |
|}
| medium_format_id | int4 | False | None | A reference to the [format](#rov.medium_format) of the data. |
| note | text | False | None | An optional note about this data. |
| parent_id | int4 | False | None | If the video or photo is derived or cropped from another, this refers to the source record (optional). |
| source_time | float4 | False | None | If this is an extract from a video or a frame grab, indicates the zero-based start time with respect to the source video. |
| start_time | timestamp | False | None | The start date/time of this video, or the instantaneous time if it's a photograph. |
| thumbnail | bytea | False | None | An optional thumbnail to represent the stored medium. |
| width | int4 | False | None | The width of the video frame in pixels. |


##### Table: medium_format <a name="rov.medium_format"></a>  
<span id="rov.program_member"></span>
=== Table: program_member ===


A lookup table for data formats for the [medium](#rov.medium) table. This will include things like video, photo and acoustic. TODO: To be determined whether medium formats should be discriminated more granularly than this. TODO: Should maybe be categorised into video/photo/acoustic/etc. along with things like the format (JPG, MP4, AAC) and possibly more specific encoding parameters.
Assigns [[#rov.person|user]] [[#rov.program_role|roles]] to a [[#rov.program|program]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "program_member"
| extensions | jsonb | False | None | A list of file extensions that correspond to this medium type. For example, the JPEG image type may have extensions "jpg" or "jpeg" in any case. This list will help applications guess the correct format of a file if it isn't known. Note that more than one media type can have the same extension, so this feature doesn't provide a guaranteed one-to-one mapping. Use it only as a guide. |
|-
| medium_type_id | int4 | False | None | A reference to the [medium type](#rov.medium_type) (e.g., video or photo). |
! Name !! Type !! Nullable !! Documentation
| name | varchar | False | None | The name of the format. |
|-
| note | text | False | None | An optional note about the format. |
| person_id || integer || NO || A reference to the [[#rov.person|person]].
| short_code | varchar | False | None | Contains a short code that can be used to look up a medium format (e.g., during import) without relying on the primary key. |
|-
| program_id || integer || NO || The reference to the [[#rov.program|program]].
|-
| role_id || integer || NO || A reference to the [[#rov.program_role|program role]].
|}


##### Table: medium_type <a name="rov.medium_type"></a>  
<span id="rov.program_role"></span>
=== Table: program_role ===


A simple lookup to provide media types to the [annotation_protocol](#rov.annotation_protocol) table. These are not specific media formats (as stored in [medium_format](#rov.medium_format)), but provided a higher-level distinction.
Represents the roles a [[#rov.person|person]] might perform in respect to a [[#rov.program|program]]. A person can be assigned multiple roles within a single program, and multiple people can work on a program with the same role.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "program_role"
| name | varchar | False | None | The name of the media type. |
|-
| note | text | False | None | An optional note about the media type. |
! Name !! Type !! Nullable !! Documentation
| short_code | bpchar | False | None | Provides a short code for looking up the entity. |
|-
| name || character varying || NO || The name of the role. E.g., "Chief Scientist."
|-
| note || text || YES || An optional note about the role.
|}


##### Table: model <a name="rov.model"></a>  
<span id="rov.protocol"></span>
=== Table: protocol ===


This table records the brand and model of equipment in the inventory. This data is abstract, which is to say, there is only one record for "GoPro Hero4" but there will be one record for each concrete instance of the model in the [instrument](#rov.instrument) table. The model table stores both [instruments](#rov.instrument) and [platforms](#rov.platform).
This table stores "(survey) protocol" entries from the source data. TODO: Used by [[#rov.event|events]] though it's not yet clear if it should stay this way.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "protocol"
| attributes | jsonb | False | None | A free-form JSON field for attributes of this model. |
|-
| brand_name | varchar | False | None | The brand name. |
! Name !! Type !! Nullable !! Documentation
| equipment_type_id | int4 | False | None | A reference to the [equipment type](#rov.equipment_type). |
|-
| model_name | varchar | False | None | The model name. |
| name || character varying || NO || A name for the survey protocol.
| note | text | False | None | An optional note about the model. |
|-
| note || text || YES || An optional note about the protocol.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a survey protocol (e.g., during import) without relying on the primary key.
|}


##### Table: model_documentation <a name="rov.model_documentation"></a>  
<span id="rov.relief"></span>
=== Table: relief ===


This table creates an association between a [model](#rov.model) and [documentation in the library](#rov.library).
Provides a nominal level of terrain relief for [[#rov.habitat_event|habitat events]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "relief"
| library_id | int4 | False | None | A reference to the document in the [library](#rov.library). |
|-
| model_id | int4 | False | None | A reference to the [model](#rov.model). |
! Name !! Type !! Nullable !! Documentation
| note | text | False | None | An optional note about the document with respect to the cruise leg. May be used to reference points of interest in a paper, etc. |
|-
| name || character varying || NO || The textual representation of the relief level.
|-
| note || text || YES || A note about the relief level.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a relief (e.g., during import) without relying on the primary key.
|}


##### Table: model_equipment_type <a name="rov.model_equipment_type"></a>  
<span id="rov.status_event"></span>
=== Table: status_event ===


This table associates an equipment [model](#rov.model) with the abstract type of equipment it represents. For example, a GoPro Hero4 is both a digital video camera and a digital still camera. These values are taken from the [equipment_type](#rov.equipment_type) table.
This table records status events with names given by the [[#rov.status_type_detail|status_type_detail]] table. Status events represent a state that changes at some time and persists until another state preempts it. For example, "on bottom" would persist until an "off bottom" event is recorded. A status_event is a specialization of an [[#rov.event|event]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "status_event"
| equipment_type_id | int4 | False | None | The [equipment type](#rov.equipment_type) ID. |
|-
| model_id | int4 | False | None | A reference to the [model](#rov.model). |
! Name !! Type !! Nullable !! Documentation
|-
| event_id || integer || NO || The associated [[#rov.event|event]].
|-
| status_type_detail_id || integer || NO || The [[#rov.status_type_detail|detailed status type]].
|}


##### Table: observation_category <a name="rov.observation_category"></a>  
<span id="rov.status_type"></span>
=== Table: status_type ===


Observation categories are used by [annotation protocols](#rov.annotation_protocol).
This is a lookup table for available status types, such as "on bottom" or "off bottom." These are specialized in the [[#rov.status_type_detail|status_type_detail]] table where a note distinguishes different flavours of a given type. For example, there can be multiple types of "Off Transect" events with a different explanation for each.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "status_type"
| name | varchar | False | None | The name of the observation category. |
|-
| note | text | False | None | An optional note about the observation category. |
! Name !! Type !! Nullable !! Documentation
| short_code | varchar | False | None | A short code for referencing the observation category in import documents. |
|-
| name || character varying || NO || The name of the status event.
|-
| note || text || YES || An optional description of the status type.
|-
| short_code || character varying || NO || A short code for referencing the status type in import documents.
|}


##### Table: observation_confidence <a name="rov.observation_confidence"></a>  
<span id="rov.status_type_detail"></span>
=== Table: status_type_detail ===


Provides a nominal observation confidence level for [observation events](#rov.observation_event).
This table associates a [[#rov.status_type|status type]] with a [[#rov.status_event|status event]]. The point of this indirection is to allow the addition of detail relative to the status type. For example, there are multiple reasons why an ROV might be "off transect", including that the vehicle has experienced a failure, or the pilot is investigating some interesting object with no research value. The [[#rov.status_type|status type]] value is the discriminator for the event, but the detail adds context the doesn't interfere with it.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "status_type_detail"
| name | varchar | False | None | The textual representation of the confidence level. |
|-
| note | text | False | None | A note about the confidence level. |
! Name !! Type !! Nullable !! Documentation
| rank | int4 | False | None | This field is a way of ranking confidence levels so that an ordering can be established. |
|-
| short_code | varchar | False | None | Contains a short code that can be used to look up a observation confidence (e.g., during import) without relying on the primary key. |
| detail || character varying || NO || The status type detail. This field distinguishes different uses for [[#rov.status_type|status types]]. For example, there can be more than one reason to record an "Off Transect" event.
|-
| note || text || YES || Optional extended description of detail.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a status type detail (e.g., during import) without relying on the primary key.
|-
| status_type_id || integer || NO || A reference to the [[#rov.status_type|status type]].
|}


##### Table: observation_event <a name="rov.observation_event"></a>  
<span id="rov.substrate"></span>
=== Table: substrate ===


An observation event records the occurrence of a phenomenon as a result of observation by a human user, usually by analyzing a video recording or photograph. Observations can relate to a species taxonomy or an element in a [label tree](#rov.label_tree). This table will be "sparse," that is, certain a value will be given for only one or two columns in each row, and the interpretation of the values will be informed by the information in the [annotation protocol](#rov.annotation_protocol) table. This table is a realization of the [event](#rov.event) table.
A lookup table listing the available substrate types for the [[#rov.habitat_event|habitat_event]] table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "substrate"
| abundance_id | int4 | False | None | Link to an [abundance level](#rov.abundance). |
|-
| annotation_protocol_taxon_id | int4 | False | None | An indirect link to the [taxon](#shared.taxon) identified in this record. |
! Name !! Type !! Nullable !! Documentation
| category | varchar | False | None | A free-form category label used for distinguishing types of labels within an annotation project. Useful for flagging records for review. |
|-
| count | int4 | False | None | The number of individuals observed. TODO: Interpretation depends on the observation interval as recorded in the[annotation protocol](#rov.annotation_protocol) table. |
| name || character varying || NO || The name of the substrate.
| coverage_id | int4 | False | None | Provides an indication of the amount of a scene [covered](#rov.coverage) by an organism. Implies habitat forming. |
|-
| event_id | int4 | False | None | A reference to the parent [event](#rov.event). |
| note || text || YES || An optional description of the substrate.
| observation_confidence_id | int4 | False | None | References the [observation confidence](#rov.observation_confidence) lookup to indicate the user's confidence in the observation. |
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a substrate (e.g., during import) without relying on the primary key.
|}


##### Table: observation_type <a name="rov.observation_type"></a>  
<span id="rov.survey_mode"></span>
=== Table: survey_mode ===


A list of observation types -- that is, ways of counting individuals, ranging in specificity from mere presence or absence to relative abundance to specific counts.
This table stores "survey mode" entries from the source data. TODO: Used by [[#rov.event|events]] though it's not yet clear if it should stay this way.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "survey_mode"
| name | varchar | False | None | The name of the observation type. |
|-
| note | text | False | None | An optional note describing the observation type. |
! Name !! Type !! Nullable !! Documentation
| short_code | varchar | False | None | A short code for referencing the observation type in import documents. |
|-
| name || character varying || NO || The name of the survey mode.
|-
| note || text || YES || An optional note about the survey mode.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a survey mode (e.g., during import) without relying on the primary key.
|}


##### Table: orientation <a name="rov.orientation"></a>  
<span id="rov.thickness"></span>
=== Table: thickness ===


This table preserves time-stamped orientation measurements from [instruments](#rov.instrument_config). These are interpreted according to a [specified type](#rov.orientation_type). Ship and ROV orientation will be recorded here, though ships don't ordinarily have an orientation.
A lookup table listing the available substrate thicknesses for the [[#rov.habitat_event|habitat_event]] table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "thickness"
| instrument_config_id | int4 | False | None | The [configured instrument](#rov.instrument_config) used to generate this item. |
|-
| is_modelled | bool | False | None | A flag to indicate whether the value is derived from measurements by some modelling process. |
! Name !! Type !! Nullable !! Documentation
| orientation | jsonb | False | None | The orientation vector. |
|-
| orientation_type_id | int4 | False | None | A reference to the [orientation type](#rov.orientation_type) of this orientation. |
| maximum || real || YES || The maximum value in the range.
| signal_quality | float4 | False | None | The signal quality of the position as reported by the instrument. TODO: Requires clarification. |
|-
| timestamp | timestamp | False | None | The time the position was recorded. |
| minimum || real || YES || The minimum value in the range.
|-
| name || character varying || NO || A characterization of biocover thickness.
|-
| note || text || YES || An optional note about the biocover thickness.
|-
| short_code || character varying || NO || Contains a short code that can be used to look up a thickness (e.g., during import) without relying on the primary key.
|}


##### Table: orientation_type <a name="rov.orientation_type"></a>  
<span id="rov.transect"></span>
=== Table: transect ===


These entities describe the interpretation of the orientation vector in the [instrument_config](#rov.instrument_config) and [orientation](#rov.orientation) tables. This can be a 3- or 4-element vector representing yaw, pitch roll; Tait-Bryan angles; Euler angles or a Quaternion.
A transect is a section of a [[#rov.dive|dive]] during which interesting data are collected. Every transect is associated with a [[#rov.dive|dive]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "transect"
| name | varchar | False | None | The name of the orientation type (e.g., "Quaternion"). |
|-
| note | text | False | None | An optional note about the orientation type. |
! Name !! Type !! Nullable !! Documentation
| short_code | varchar | False | None | Contains a short code that can be used to look up an orientation type (e.g., during import) without relying on the primary key. |
|-
| unit | varchar | False | None | The units used to interpret the elements of the vector. |
| attributes || jsonb || YES || A JSON column used for recording structured attributes that do not fit with the regular table structure.
|-
| dive_id || integer || NO || A reference to the [[#rov.dive|dive]] during which this transect occurred.
|-
| end_time || timestamp without time zone || YES || The end time of the transect.
|-
| name || character varying || NO || The name of the transect.
|-
| note || text || YES || An optional note about the transect.
|-
| objective || text || YES || A statement of the practical or research objectives for this true.
|-
| start_time || timestamp without time zone || NO || The start time of the transect.
|-
| summary || text || YES || A summary of the [[#rov.transect|transect]]; whether objectives were met, problems encountered, etc.
|}


##### Table: platform <a name="rov.platform"></a>  
<span id="rov.weather_observation"></span>
=== Table: weather_observation ===


This table maintains the inventory of vehicles, that is, ships and ROVs.
Surface weather observations can be recorded by any [[#rov.cruise_leg_crew|crew member]] aboard a ship during a [[#rov.cruise_leg|cruise leg]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "weather_observation"
| attributes | jsonb | False | None | A freeform list of attributes for this platform. |
|-
| created_on | timestamp | False | None | The date of creation of this record. |
! Name !! Type !! Nullable !! Documentation
| model_id | int4 | False | None | A reference to the [model](#rov.model) of the platform.  |
|-
| name | varchar | False | None | The name of the platform. If this is a ship, it might be "CCGS Vector" or if it's an ROV, it might be given an arbitrary name by the maintainer. |
| cruise_crew_id || integer || YES || A reference to the [[#rov.cruise_leg_crew|cruise leg crew]] member who is making the report.
| note | text | False | None | An optional note about this platform. |
|-
| organisation_id | int4 | False | None | A reference to the organisation that owns and operates the platform. |
| cruise_id || integer || NO || A link to the [[#rov.cruise|cruise]] during which this record was recorded.
| retired | date | False | None | If the platform is retired, this records the date. If null, the platform is assumed to be active. |
|-
| serial_number | varchar | False | None | The serial number of the platform. If this is an ROV it will be the manufacturer's serial number. If it's a vessel, this might be the IMO number. In any case, it must be unique. |
| note || text || YES || An optional note about the observation
| short_code | varchar | False | None | Contains a short code that can be used to look up a platform (e.g., during import) without relying on the primary key. |
|-
| updated_on | timestamp | False | None | The date of update of this record. |
| pressure || real || YES || The air pressure.
|-
| swell || character varying || YES || Description of swell.
|-
| temperature || real || YES || The air temperature.
|-
| time || timestamp without time zone || NO || An optional note about the weather.
|-
| wind_direction || real || YES || The wind direction.
|-
| wind_speed || real || YES || The wind speed.
|}


##### Table: platform_config <a name="rov.platform_config"></a>  
<span id="rov.cruise_track"></span>
=== Materialized View: cruise_track ===


This table stores configuration information about vehicles (ships, ROVs,etc.) used for surveys. All references to vehicles are made through this table rather than directly to the [platform](#rov.platform) table, because the disposition of equipment on the platform is essential to understanding how data has been generated, as well as for simple record-keeping purposes.
Constructs a geometry for each [[#rov.cruise|cruise]] which describes the path of the ship.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "cruise_track"
| configuration | jsonb | False | None | The configuration data as a JSON object. |
|-
| created_on | timestamp | False | None | The date of creation of this record. |
! Name !! Type !! Nullable !! Documentation
| note | text | False | None | An optional note about the configuration record. |
|-
| platform_id | int4 | False | None | A reference to the [platform](#rov.platform). |
| colour || text || False || The a colour code generated from the cruise's ID used for cartography.
| updated_on | timestamp | False | None | The date of update of this record. |
|-
| cruise_id || integer || False || The reference to the [[#rov.cruise|cruise]].
|-
| cruise_name || text || False || The [[#rov.cruise|cruise]] name and leg.
|-
| geom || geometry || False || The cruise track geometry.
|-
| instrument_config_id || integer || False || The reference to the [[#rov.instrument_config|instrument configuration]].
|}


##### Table: platform_setting <a name="rov.platform_setting"></a>  
<span id="rov.depth"></span>
=== Materialized View: depth ===


This table contains the settings on a [configured platform](#rov.platform_config). These are settings that are changeable between dives and are usually important to the interpretation of the data. Available platform settings can be looked up in the [available_setting](#rov.available_setting) table, along with data type and validation hints. The ID of the available setting is not stored, because the setting relationships are not meant to be enforced. If a setting is changed between dives, it is advisable to copy the setting record and all associated [platform settings](#rov.platform_setting) before changing the configuration.
A view on the [[#rov.measurements|measurements]] table containing only depths.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "depth"
| name | varchar | False | None | The name of the setting. May be looked up in the [available settings](#rov.available_setting) table. |
|-
| note | text | False | None | An optional note about the setting. |
! Name !! Type !! Nullable !! Documentation
| platform_config_id | int4 | False | None | A reference to the [platform configuration](#rov.platform_config). |
|-
| value | varchar | False | None | The value of the setting. If a name from the [available settings](#rov.available_setting) list is used, the regular expression or type conversion may be applied to validate the value. |
| dive_id || integer || False || The ID of the [[#rov.dive|dive]] during which the depth was measured.
|-
| quantity || real || False || [None]
|-
| timestamp || timestamp(6) without time zone || False || The timestamp of the record.
|}


##### Table: position <a name="rov.position"></a>  
<span id="rov.dive_track"></span>
=== Materialized View: dive_track ===


This table preserves time-stamped position measurements from [instruments](#rov.instrument_config). These can be linear (e.g., UTM) or angular (e.g., Geographic) positions in a [specified unit](#rov.position_type). Ship and ROV positions will be recorded here. TODO: Should this table have a spatial object (point) as well, or be split into two tables, one for absolute georeferenced positions and one for relative positions and orientations?
Constructs a geometry for each [[#rov.dive|dive]] which describes the path of the submersible.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "dive_track"
| geom | geography | False | None | The point geometry. |
|-
| instrument_config_id | int4 | False | None | The [configured instrument](#rov.instrument_config) used to generate this item. |
! Name !! Type !! Nullable !! Documentation
| is_modelled | bool | False | None | A flag to indicate whether the value is derived from measurements by some modelling process. |
|-
| position_type_id | int4 | False | None | A reference to the [position type](#rov.position_type) of this position. |
| colour || text || False || The a colour code generated from the cruise's ID. Used for cartography.
| signal_quality | float4 | False | None | The signal quality of the position as reported by the instrument. TODO: Requires clarification. |
|-
| timestamp | timestamp | False | None | The time the position was recorded. |
| cruise_id || integer || False || The reference to the [[#rov.cruise|cruise]].
|-
| cruise_name || text || False || The [[#rov.cruise|cruise]] name.
|-
| dive_id || integer || False || The reference to the [[#rov.dive|dive]].
|-
| dive_name || character varying(64) || False || The [[#rov.dive|dive]] name.
|-
| geom || geometry || False || The dive track geometry.
|-
| transect_id || integer || False || The reference to the [[#rov.transect|transect]]. Zero if there is no corresponding transect.
|-
| transect_name || character varying(64) || False || The [[#rov.transect|transect]] name.
|}


##### Table: position_type <a name="rov.position_type"></a>  
<span id="rov.evt_depth"></span>
=== Materialized View: evt_depth ===


Describes the interpretation of a coordinate vector in the [position](#rov.position) table. These can be geographic or Cartesian positions or orientations and have defined linear or angular units.
Creates a relation between an [[#rov.event|event]] and the [[#rov.measurement|depth]] nearest the start and end times of the event.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "evt_depth"
| name | varchar | False | None | The name of the position type. E.g., "Geographic" or "Yaw, Pitch, Roll." |
|-
| note | text | False | None | An optional note about this position type. |
! Name !! Type !! Nullable !! Documentation
| short_code | varchar | False | None | Contains a short code that can be used to look up a position type (e.g., during import) without relying on the primary key. |
|-
| unit | varchar | False | None | The unit. Linear or angular. E.g., "m" or "radians." |
| end_diff || interval || False || [None]
|-
| end_measurement_id || integer || False || The link to the [[#rov.measurement|depth]] nearest the event's end time, or null if one is not supplied.
|-
| event_id || integer || False || The link to the [[#rov.event|event's]]'s event ID.
|-
| start_diff || interval || False || [None]
|-
| start_measurement_id || integer || False || The link to the [[#rov.measurement|depth]] nearest the event's start time.
|}


##### Table: program <a name="rov.program"></a>  
<span id="rov.evt_pos"></span>
=== Materialized View: evt_pos ===


This is a listing of scientific programs that can be associated with [cruise legs](#rov.cruise_leg), and gives information about the governorship and funding of specific research activities. [Label trees](#rov.label_tree) and [taxonomies](#shared.taxonomy) may be associated with programs, since some trees are relevant to specific research objectives and not others. TODO: Currently a lable tree/taxonomy can only be linked to one program. Need to study further.
Creates a relation between an [[#rov.event|event]] and the [[#rov.position|positions]] nearest the start and end times of the event.


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "evt_pos"
| created_on | timestamp | False | None | The date of creation of this item. |
|-
| end_date | date | False | None | The optional end date of the program. |
! Name !! Type !! Nullable !! Documentation
| name | varchar | False | None | The name of the program. |
|-
| note | text | False | None | An optional note about the program. |
| end_diff || interval || False || [None]
| objective | varchar | False | None | The objective or mandate of the program. |
|-
| start_date | date | False | None | The starting date of the program. |
| end_position_id || integer || False || The link to the [[#rov.position|position]] nearest the event's end time, or null if one is not supplied.
| summary | text | False | None | A summary of the [program](#rov.program); whether objectives were met, problems encountered, etc. |
|-
| updated_on | timestamp | False | None | The date of update of this record. |
| event_id || integer || False || The link to the [[#rov.event|event's]]'s event ID.
|-
| start_diff || interval || False || [None]
|-
| start_position_id || integer || False || The link to the [[#rov.position|position]] nearest the event's start time.
|}


##### Table: program_library <a name="rov.program_library"></a>  
<span id="rov.measurement_position"></span>
=== Materialized View: measurement_position ===


A table to associate [programs](#rov.program) with [library](#shared.library) documents.
Creates a relation between a [[#rov.measurement|measurement]] and the temporally-nearest [[#rov.position|position]].


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "measurement_position"
| library_id | int4 | False | None | A reference to the [library](#shared.library) item. |
|-
| program_id | int4 | False | None | A reference to the [program](#rov.program) item. |
! Name !! Type !! Nullable !! Documentation
|-
| measurement_id || integer || False || The link to the [[#rov.measurement|measurement]].
|-
| position_id || integer || False || The link to the [[#rov.position|position]].
|}


##### Table: program_member <a name="rov.program_member"></a>  
<span id="shared"></span>
== Schema: shared ==


Assigns [user](#rov.person) [roles](#rov.program_role) to a [program](#rov.program).
Stores data that are shared between other schemas, such as personnel information, taxonomy, etc.


| Column Name | Type | Not Null | Default | Description |
<span id="shared.db_version"></span>
| --- | --- | --- | --- | --- |
=== Table: db_version ===
| person_id | int4 | False | None | A reference to the [person](#rov.person). |
| program_id | int4 | False | None | The reference to the [program](#rov.program). |
| role_id | int4 | False | None | A reference to the [program role](#rov.program_role). |


##### Table: program_role <a name="rov.program_role"></a>
Stores the current database version so that upgrade scripts can perform migrations appropriately.


Represents the roles a [person](#rov.person) might perform in respect to a [program](#rov.program). A person can be assigned multiple roles within a single program, and multiple people can work on a program with the same role.
{| class="wikitable"
|+ Columns in "db_version"
|-
! Name !! Type !! Nullable !! Documentation
|-
| revision || integer || NO || The revision number.
|-
| updated_on || timestamp without time zone || NO || The time the upgrade was performed.
|-
| version_major || integer || NO || The major version.
|-
| version_minor || integer || NO || The minor version number.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.file"></span>
| --- | --- | --- | --- | --- |
=== Table: file ===
| name | varchar | False | None | The name of the role. E.g., "Chief Scientist." |
| note | text | False | None | An optional note about the role. |


##### Table: project <a name="rov.project"></a>
Stores a record of a file object and its location on disk, along with some metadata. This entity is used by all other entities in all schemas that refer to a file object. This should make it easier to audit file stores and e.g., find duplicates using the hash.


projects are created by users to coordinate annotation or other activities where [observation](#rov.observation_event) and [habitat](#rov.habitat_event) events are created. The project helps to group events in terms of why they were created, when and by whom.
{| class="wikitable"
|+ Columns in "file"
|-
! Name !! Type !! Nullable !! Documentation
|-
| blob_url || character varying || YES || A URL referencing the file in online blob storage. This field is subject to change depending on where the files reside and will change if they're moved.
|-
| created_on || timestamp without time zone || NO || The creation time of the file record, not necessarily the file itself (this should be stored in metadata).
|-
| description || text || YES || An optional description for the file.
|-
| file_type_id || integer || YES || An optional reference to the [[#shared.file_type|file type]].
|-
| hash || character varying || NO || And MD5 hash of the file data. Used to compare files and search for identical versions.
|-
| metadata || jsonb || YES || A JSON dictionary containing metadata relating to the file.
|-
| name || character varying || NO || The name for the file.
|-
| path || character varying || NO || A path of the file, relative to the root directory where files are stored.
|-
| updated_on || timestamp without time zone || NO || The update time of the file record, not necessarily the file itself (this should be stored in metadata).
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.file_type"></span>
| --- | --- | --- | --- | --- |
=== Table: file_type ===
| created_on | timestamp | False | None | The date of creation of this record. |
| end_date | date | False | None | The end date of the project (optional). |
| name | varchar | False | None | The name of the project. |
| note | text | False | None | A descriptive note about the project. |
| objective | text | False | None | A note describing the objective of this project. |
| start_date | date | False | None | The creation date of the project. |
| summary | text | False | None | A summary of the [project](#rov.project); whether objectives were met, problems encountered, etc. |
| updated_on | timestamp | False | None | The date of update of this record. |


##### Table: project_cruise <a name="rov.project_cruise"></a>
A list of file types.


Links a [project](#rov.project) to the [cruises](#rov.cruise) that were imported.
{| class="wikitable"
|+ Columns in "file_type"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || The name of the file type.
|-
| short_code || character varying || NO || A short code for referencing the file type in import documents.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.hart_taxon"></span>
| --- | --- | --- | --- | --- |
=== Table: hart_taxon ===
| cruise_id | int4 | False | None | The [cruise](#rov.cruise). |
| project_id | int4 | False | None | The [project](#rov.project). |


##### Table: project_import_source <a name="rov.project_import_source"></a>
Species from wherever the Hart codes are from? This table contains records loaded from the VideoMiner species table. This appears to be related to whatever the source of Hart codes is, but at this point VM is the only source. If the name needs to be changed in the future, so be it. Records in this table have a one-to-one relationship with records in the [[#shared.taxon|taxon]] table, and it serves as a metadata table for records stored there.


Stores information about files from which data for events, measurements and positions have been loaded.
{| class="wikitable"
|+ Columns in "hart_taxon"
|-
! Name !! Type !! Nullable !! Documentation
|-
| authority || text || YES || The identification authority.
|-
| common_name || character varying || YES || The common name.
|-
| from_date || date || YES || ?
|-
| grouping_id || integer || YES || The grouping. * B - Bird * F - Fish * I - Invertebrate * M - Mammal * O - Object? * R - Reptile
|-
| latin_name || character varying || YES || The Latin name of the item, which is distinct in this table from the scientific name. Appears to be informal, and not necessarily Latin.
|-
| nodc_code_v7 || real || YES || The NODC code, v7.
|-
| nodc_code_v8 || integer || YES || The NODC code, V8. Identical to the ITIS ID.
|-
| rank_id || integer || YES || A three-letter code indicating the taxonomic level.
|-
| scientific_name || character varying || YES || The scientific (e.g., Linnean) name.
|-
| sp_species_code || character varying || YES || Another species code whose purpose/origin is not known.
|-
| species_code || character varying || NO || The species, or Hart, code.
|-
| species_prov_code || character varying || YES || ?
|-
| taxa_reference || text || YES || The reference for the identification.
|-
| to_date || date || YES || ?
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.library"></span>
| --- | --- | --- | --- | --- |
=== Table: library ===
| file_id | int4 | False | None | The source [file](#shared.file). |
| note | text | False | None | An optional note about the source file. |
| project_id | int4 | False | None | A reference to the project that this file is associated with. |


##### Table: project_member <a name="rov.project_member"></a>
This table stores a partial record of documents, books and papers that can be referenced by other entities. The ISBN and DOI fields are set to unique, but these may vary (in representation, at least) for a single document so care should be taken not to add duplicates. However, updated papers with the same title and author, but different date, are not disallowed.


This table associates [personnel](#rov.person) with [projects](#rov.project) under specific [roles](#rov.project_role). A project can have multiple members, each of whom can generate observations.
{| class="wikitable"
|+ Columns in "library"
|-
! Name !! Type !! Nullable !! Documentation
|-
| abstract || text || YES || The abstract of the entry.
|-
| authors || jsonb || YES || The (list of) author(s) of the document. This is a JSON list of objects containing whatever information is necessary. Authors should be listed with at least first_name and last_name, and any other relevant information, such as email or institution.
|-
| created_on || timestamp without time zone || YES || The creation time of the file record, not necessarily the file itself (this should be stored in metadata).
|-
| doi || character varying || YES || The DOI of the document.
|-
| file_id || integer || NO || An optional reference to a [[#shared.file|file]].
|-
| institution || character varying || YES || The name of the institution or publisher responsible for the document.
|-
| isbn || character varying || YES || The ISBN of the book, if it is a book.
|-
| issn || character varying || YES || The ISSN of the entry.
|-
| keywords || jsonb || YES || A list of keywords relating to the entry.
|-
| mendeley_id || character varying || YES || The ID of the record in Mendeley.
|-
| publication || character varying || YES || The name of the publication in which the document appeared.
|-
| title || text || NO || The title of the book, paper, or other document.
|-
| type || character varying || YES || Describes the type of entry: book, article, etc.
|-
| updated_on || timestamp without time zone || YES || The update time of the file record, not necessarily the file itself (this should be stored in metadata).
|-
| year || character varying || YES || The publishing date of the document.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.mseauser"></span>
| --- | --- | --- | --- | --- |
=== Table: mseauser ===
| person_id | int4 | False | None | The [person](#rov.person) assigned to the project. |
| project_id | int4 | False | None | The [project](#rov.project) to which this member is assigned. |
| role_id | int4 | False | None | The [role](#rov.project_role) assigned to this user (optional). |


##### Table: project_role <a name="rov.project_role"></a>
Represents an MSEA user and is linked to a single Django auth User. Stores extra application-related properties such as the Biigle API key.


This table lists available roles for [users](#rov.project_member) involved in [projects](#rov.project).
{| class="wikitable"
|+ Columns in "mseauser"
|-
! Name !! Type !! Nullable !! Documentation
|-
| biigle_api_key || character varying || YES || The Biigle API key.
|-
| biigle_username || character varying || YES || The Biigle username.
|-
| pg_role || character varying || YES || The name of the PostgreSQL role that the user will use to log in directly to the database.
|-
| user_id || integer || NO || A reference to the [[#public.auth_user|Django user]].
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.mseauser_restriction"></span>
| --- | --- | --- | --- | --- |
=== Table: mseauser_restriction ===
| name | varchar | False | None | The name of the role. |
| note | text | False | None | An optional note about the role. |


##### Table: protocol <a name="rov.protocol"></a>
Links an [[#shared.mseauser|MSEA user]] to a [[#shared.restriction|restriction]]. The user will have access to records related to this group.


This table stores "(survey) protocol" entries from the source data. TODO: Used by [events](#rov.event) though it's not yet clear if it should stay this way.
{| class="wikitable"  
|+ Columns in "mseauser_restriction"
|-
! Name !! Type !! Nullable !! Documentation
|-
| created_on || timestamp without time zone || NO || The creation time of the record.
|-
| mseauser_id || integer || NO || The ID of the [[#shared.mseauser|MSEA user]].
|-
| restriction_id || integer || NO || The ID of the [[#shared.restriction|restriction]].
|-
| updated_on || timestamp without time zone || NO || The last update time of the record.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.news_item"></span>
| --- | --- | --- | --- | --- |
=== Table: news_item ===
| name | varchar | False | None | A name for the survey protocol. |
| note | text | False | None | An optional note about the protocol. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a survey protocol (e.g., during import) without relying on the primary key. |


##### Table: relief <a name="rov.relief"></a>
A table for news items related to each sub-site.


Provides a nominal level of terrain relief for [habitat events](#rov.habitat_event).
{| class="wikitable"
|+ Columns in "news_item"
|-
! Name !! Type !! Nullable !! Documentation
|-
| content || text || NO || The content of the item.
|-
| created_on || timestamp without time zone || NO || The date of creation of the item.
|-
| sites || character varying || YES || An optional comma-delimited list of sites the item refers to. The current list is 'rca', 'rov', 'intertidal'. Leave empty to apply to all sites. TODO: Currently not standardized or enforced.
|-
| title || character varying || NO || A title for the item.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.organisation"></span>
| --- | --- | --- | --- | --- |
=== Table: organisation ===
| name | varchar | False | None | The textual representation of the relief level. |
| note | text | False | None | A note about the relief level. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a relief (e.g., during import) without relying on the primary key. |


##### Table: status_event <a name="rov.status_event"></a>
Convenient storage for organisations involved in MSEA activities.


This table records status events with names given by the [status_type_detail](#rov.status_type_detail) table. Status events represent a state that changes at some time and persists until another state preempts it. For example, "on bottom" would persist until an "off bottom" event is recorded. A status_event is a specialization of an [event](#rov.event).
{| class="wikitable"
|+ Columns in "organisation"
|-
! Name !! Type !! Nullable !! Documentation
|-
| country || character varying || NO || The code for the country where the organisation is based (e.g., "CA" for Canada).
|-
| name || character varying || NO || The full name of the organisation.
|-
| note || text || YES || An optional note about the organisation.
|-
| short_code || character varying || NO || A short code for looking up the entity; usually the organisation's acronym.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.person"></span>
| --- | --- | --- | --- | --- |
=== Table: person ===
| event_id | int4 | False | None | The associated [event](#rov.event). |
| status_type_detail_id | int4 | False | None | The [detailed status type](#rov.status_type_detail). |


##### Table: status_type <a name="rov.status_type"></a>
Stores information about people involved in all aspects of the application. This is not intended to be a comprehensive duplicate of the individual's HR dossier, just a means of representing a person and providing a means of associating it with a real-world individual, e.g., by their email.


This is a lookup table for available status types, such as "on bottom" or "off bottom." These are specialized in the [status_type_detail](#rov.status_type_detail) table where a note distinguishes different flavours of a given type. For example, there can be multiple types of "Off Transect" events with a different explanation for each.
{| class="wikitable"  
|+ Columns in "person"
|-
! Name !! Type !! Nullable !! Documentation
|-
| biigle_user_id || integer || YES || The Biigle database ID of a user. The UUID should be used instead.
|-
| biigle_uuid || character || YES || The Biigle UUID is used to identify the user in Biigle apps.
|-
| bio || text || YES || A brief biography of the person.
|-
| email || character varying || NO || Email address.
|-
| first_name || character varying || NO || First name.
|-
| last_name || character varying || NO || Last name.
|-
| photo || bytea || YES || A photo of the person.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.restriction"></span>
| --- | --- | --- | --- | --- |
=== Table: restriction ===
| name | varchar | False | None | The name of the status event. |
| note | text | False | None | An optional description of the status type. |
| short_code | varchar | False | None | A short code for referencing the status type in import documents. |


##### Table: status_type_detail <a name="rov.status_type_detail"></a>
Provides a list of restrictions that can be applied to individual observation rows, to restrict access to allowed roles.


This table associates a [status type](#rov.status_type) with a [status event](#rov.status_event). The point of this indirection is to allow the addition of detail relative to the status type. For example, there are multiple reasons why an ROV might be "off transect", including that the vehicle has experienced a failure, or the pilot is investigating some interesting object with no research value. The [status type](#rov.status_type) value is the discriminator for the event, but the detail adds context the doesn't interfere with it.
{| class="wikitable"
|+ Columns in "restriction"
|-
! Name !! Type !! Nullable !! Documentation
|-
| created_on || timestamp without time zone || NO || The creation time of the restriction.
|-
| name || character varying || NO || The name of the restriction.
|-
| note || text || YES || An optional note about the restriction.
|-
| short_code || character varying || NO || A short code used to reference the restriction.
|-
| updated_on || timestamp without time zone || NO || The last update time of the restriction.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.site"></span>
| --- | --- | --- | --- | --- |
=== Table: site ===
| detail | varchar | False | None | The status type detail. This field distinguishes different uses for [status types](#rov.status_type). For example, there can be more than one reason to record an "Off Transect" event. |
| note | text | False | None | Optional extended description of detail. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a status type detail (e.g., during import) without relying on the primary key. |
| status_type_id | int4 | False | None | A reference to the [status type](#rov.status_type). |


##### Table: substrate <a name="rov.substrate"></a>
Contains the names and geographic boundaries of study sites. This will be useful not only for mapping but for querying data by spatial extent.


A lookup table listing the available substrate types for the [habitat_event](#rov.habitat_event) table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.
{| class="wikitable"
|+ Columns in "site"
|-
! Name !! Type !! Nullable !! Documentation
|-
| name || character varying || NO || A name for the site.
|-
| note || text || YES || An optional note about the site.
|-
| spatial_library_id || integer || YES || A reference to the [[#shared.spatial_library|spatial library]] entry.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.spatial_library"></span>
| --- | --- | --- | --- | --- |
=== Table: spatial_library ===
| name | varchar | False | None | The name of the substrate. |
| note | text | False | None | An optional description of the substrate. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a substrate (e.g., during import) without relying on the primary key. |


##### Table: survey_mode <a name="rov.survey_mode"></a>
Maintains a library of spatial data.


This table stores "survey mode" entries from the source data. TODO: Used by [events](#rov.event) though it's not yet clear if it should stay this way.
{| class="wikitable"  
|+ Columns in "spatial_library"
|-
! Name !! Type !! Nullable !! Documentation
|-
| created_on || timestamp without time zone || NO || The time when this record was created.
|-
| file_id || integer || YES || A reference to a related [[#shared.file|file]].
|-
| geom || geometry || YES || A vector representation of the object(s), projected into WGS84 (lat/lon) and stored as a geography type.
|-
| metadata || jsonb || YES || A JSON object containing metadata related to the spatial object.
|-
| name || character varying || NO || A name for the entry.
|-
| note || text || YES || A note about this library item.
|-
| rast || bytea || YES || A raster.
|-
| thumbnail || bytea || YES || A small thumbnail in binary (JPG) form.
|-
| updated_on || timestamp without time zone || NO || The date of update of this record.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.spatial_library_file"></span>
| --- | --- | --- | --- | --- |
=== Table: spatial_library_file ===
| name | varchar | False | None | The name of the survey mode. |
| note | text | False | None | An optional note about the survey mode. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a survey mode (e.g., during import) without relying on the primary key. |


##### Table: thickness <a name="rov.thickness"></a>
Allows a [[#shared.spatial_library|spatial library]] entity to own more than one file.


A lookup table listing the available substrate thicknesses for the [habitat_event](#rov.habitat_event) table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.
{| class="wikitable"
|+ Columns in "spatial_library_file"
|-
! Name !! Type !! Nullable !! Documentation
|-
| file_id || integer || NO || A link to the [[#shared.file|file]].
|-
| spatial_library_id || integer || NO || A link to the [[#shared.spatial_library|spatial library]].
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.survey_suggestion"></span>
| --- | --- | --- | --- | --- |
=== Table: survey_suggestion ===
| maximum | float4 | False | None | The maximum value in the range. |
| minimum | float4 | False | None | The minimum value in the range. |
| name | varchar | False | None | A characterization of biocover thickness. |
| note | text | False | None | An optional note about the biocover thickness. |
| short_code | varchar | False | None | Contains a short code that can be used to look up a thickness (e.g., during import) without relying on the primary key. |


##### Table: transect <a name="rov.transect"></a>
A table of suggestions supplied by users for upgrades to the database.


A transect is a section of a [dive](#rov.dive) during which interesting data are collected. Every transect is associated with a [dive](#rov.dive).
{| class="wikitable"
|+ Columns in "survey_suggestion"
|-
! Name !! Type !! Nullable !! Documentation
|-
| created_on || timestamp without time zone || NO || [None]
|-
| down_votes || integer || NO || A count of the down votes on the suggestion.
|-
| email || character varying || YES || The email of the suggesting user.
|-
| screen_name || character varying || YES || A screen name for the suggesting user.
|-
| suggestion || text || NO || The text of the suggestion.
|-
| up_votes || integer || NO || A count of the up votes on the suggestion.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.taxon"></span>
| --- | --- | --- | --- | --- |
=== Table: taxon ===
| attributes | jsonb | False | None | A JSON column used for recording structured attributes that do not fit with the regular table structure. |
| dive_id | int4 | False | None | A reference to the [dive](#rov.dive) during which this transect occurred. |
| end_time | timestamp | False | None | The end time of the transect. |
| importsource_id | int4 | False | None | A reference to the [import source](#rov.project_import_source) from which this entity was imported. |
| name | varchar | False | None | The name of the transect. |
| note | text | False | None | An optional note about the transect. |
| objective | text | False | None | A statement of the practical or research objectives for this true. |
| start_time | timestamp | False | None | The start time of the transect. |
| summary | text | False | None | A summary of the [transect](#rov.transect); whether objectives were met, problems encountered, etc. |


##### Table: weather_observation <a name="rov.weather_observation"></a>
The taxon table stores information about the identification of observed specimens. A taxon record stores the name of the taxonomic unit (e.g., the species or genus name), or an open nomenclature (ON) identifier using *sp.* or *cf.*; an optional operational taxonomic unit (OTU), and a reference to any known taxa in the Hart, ITIS, iNaturalist or WoRMS databases. The original label stores the name as imported. The label, OTU and Hart code are updated at audit time from the original label and the scientific and common names are updated if available. The auditing process is necessary to produce reasonable data. Some of this work can be performed automatically. Multiple records in this table can refer to the same species or subspecies. It *may or may not be known whether the species referred to by a record are the same or different.* Some amount of auditing will probably be necessary on this table. The contents of this table are driven by observations; it is not populated from existing catalogues but from observations, and the authoritative entity IDs are populated as a post-processing step from existing catalogs. If a match in one of the authoritative catalogue is not found, the relation fields are left empty and the taxon should be audited, to correct spelling or assign a correct identifier.


Surface weather observations can be recorded by any [crew member](#rov.cruise_leg_crew) aboard a ship during a [cruise leg](#rov.cruise_leg).
{| class="wikitable"
|+ Columns in "taxon"
|-
! Name !! Type !! Nullable !! Documentation
|-
| aphia_id || integer || YES || A reference to the [https://www.marinespecies.org/ WoRMs] database. The actual Aphia ID used by WoRMs is used as the primary key in the [[#rov.worms_taxon|WoRMs taxon]] table.
|-
| common_name || character varying || YES || The common name of the taxon.
|-
| hart_code || character varying || YES || Used when there's not ref in the hart code table.
|-
| hart_id || integer || YES || A reference to the [[#shared.hart_taxon|Hart code table]]. This is an identification with species used by VideoMiner and other tools that use that list.
|-
| inaturalist_id || integer || YES || A reference to the [https://www.inaturalist.org/projects/marine-life-of-the-northeast-pacific iNaturalist] taxon. The iNaturalist taxon ID is used as the primary key in the [[#rov.inaturalist_taxon|iNaturalist taxon]] table.
|-
| label || character varying || YES || The label given to the species at audit time. May be modified from the original label. May differ from the scientific or common names.
|-
| original_label || character varying || NO || The original label as entered by the annotator or observer. On review or audit, the label, hart_code and otu fields will be populated and references to outside databases updated. This field will not be edited.
|-
| otu || character varying || YES || The operational taxonomic unit is a unique identifier for this instances of an observation whose identification isn't certain.
|-
| review_note || text || YES || Optional note about the review.
|-
| reviewed_by_id || integer || YES || Relates to the [[#rov.person|person]] who reviewed the record.
|-
| reviewed_on || timestamp without time zone || YES || Gives the time that the record was reviewed.
|-
| scientific_name || character varying || YES || The scientific (binomial, trinomial) name of the taxon. Updated at audit time, based on the label or other fields.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.taxon_restriction"></span>
| --- | --- | --- | --- | --- |
=== Table: taxon_restriction ===
| cruise_crew_id | int4 | False | None | A reference to the [cruise leg crew](#rov.cruise_leg_crew) member who is making the report. |
| cruise_id | int4 | False | None | A link to the [cruise](#rov.cruise) during which this record was recorded. |
| note | text | False | None | An optional note about the observation |
| pressure | float4 | False | None | The air pressure. |
| swell | varchar | False | None | Description of swell. |
| temperature | float4 | False | None | The air temperature. |
| time | timestamp | False | None | An optional note about the weather. |
| wind_direction | float4 | False | None | The wind direction. |
| wind_speed | float4 | False | None | The wind speed. |


##### Materialized View: cruise_track <a name="rov.cruise_track"></a>
Links an [[#shared.mseauser|MSEA user]] to a [[#shared.restriction|restriction]]. The user will have access to records related to this group.


Constructs a geometry for each [cruise](#rov.cruise) which describes the path of the ship.
{| class="wikitable"
|+ Columns in "taxon_restriction"
|-
! Name !! Type !! Nullable !! Documentation
|-
| created_on || timestamp without time zone || NO || The creation time of the record.
|-
| restriction_id || integer || NO || The ID of the [[#shared.restriction|restriction]].
|-
| taxon_id || integer || NO || The ID of the [[#shared.taxon|taxon]].
|-
| updated_on || timestamp without time zone || NO || The last update time of the record.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.taxonomic_grouping"></span>
| --- | --- | --- | --- | --- |
=== Table: taxonomic_grouping ===
| colour | text | False | None | The a colour code generated from the cruise's ID used for cartography. |
| cruise_id | int4 | False | None | The reference to the [cruise](#rov.cruise). |
| cruise_name | text | False | None | The [cruise](#rov.cruise) name and leg. |
| geom | geometry | False | None | The cruise track geometry. |
| instrument_config_id | int4 | False | None | The reference to the [instrument configuration](#rov.instrument_config). |


##### Materialized View: dive_track <a name="rov.dive_track"></a>
Provides a lookup for the taxonomic grouping (Invertebrate, Fish, etc.) Used by VideoMiner.


Constructs a geometry for each [dive](#rov.dive) which describes the path of the submersible.
{| class="wikitable"
|+ Columns in "taxonomic_grouping"
|-
! Name !! Type !! Nullable !! Documentation
|-
| code || character || YES || A one-letter code for the grouping.
|-
| name || character varying || NO || The name of the taxonomic grouping.
|-
| note || text || YES || A note about the taxonomic grouping.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.taxonomic_rank"></span>
| --- | --- | --- | --- | --- |
=== Table: taxonomic_rank ===
| colour | text | False | None | The a colour code generated from the cruise's ID. Used for cartography. |
| cruise_id | int4 | False | None | The reference to the [cruise](#rov.cruise). |
| cruise_name | text | False | None | The [cruise](#rov.cruise) name. |
| dive_id | int4 | False | None | The reference to the [dive](#rov.dive). |
| dive_name | varchar | False | None | The [dive](#rov.dive) name. |
| geom | geometry | False | None | The dive track geometry. |
| instrument_config_id | int4 | False | None | The reference to the [instrument configuration](#rov.instrument_config). |


##### Materialized View: evt_pos <a name="rov.evt_pos"></a>
Provides a lookup for the taxonomic rank (Kingdom, Class, Species, etc.) Used by VideoMiner.


Creates a relation between an [event](#rov.event) and the [positions](#rov.position) nearest the start and end times of the event.
{| class="wikitable"
|+ Columns in "taxonomic_rank"
|-
! Name !! Type !! Nullable !! Documentation
|-
| code || character || YES || A three-letter code for the rank.
|-
| name || character varying || NO || The name of the taxonomic rank.
|-
| note || text || YES || A note about the taxonomic rank.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="shared.uploaded_file"></span>
| --- | --- | --- | --- | --- |
=== Table: uploaded_file ===
| end_diff | interval | False | None |  |
| end_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's end time, or null if one is not supplied. |
| event_id | int4 | False | None | The link to the [event's](#rov.event)'s event ID. |
| start_diff | interval | False | None |  |
| start_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's start time. |


##### Materialized View: measurement_position <a name="rov.measurement_position"></a>
A table to store uploaded files that can be associated with other entities in separate requests. This table is intended to store temporary entities: when an uploaded file has been handled, these records should be deleted.


Creates a relation between a [measurement](#rov.measurement) and the temporally-nearest [position](#rov.position).
{| class="wikitable"
|+ Columns in "uploaded_file"
|-
! Name !! Type !! Nullable !! Documentation
|-
| created_on || timestamp without time zone || NO || The time of creation of the record.
|-
| expires_on || timestamp without time zone || NO || The expiry time of the file. It may be deleted by a maintenance script after this time.
|-
| name || character varying || NO || The original name of the file.
|-
| path || character varying || NO || The path to the temporary location of the file.
|-
| type || character varying || NO || The guessed MIME type of the file.
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki"></span>
| --- | --- | --- | --- | --- |
== Schema: wiki ==
| measurement_id | int4 | False | None | The link to the [measurement](#rov.measurement). |
| position_id | int4 | False | None | The link to the [position](#rov.position). |


##### Materialized View: view_measurement_position_crosstab <a name="rov.view_measurement_position_crosstab"></a>
Stores data related to the Wiki using the standard [https://www.mediawiki.org/wiki/MediaWiki MediaWiki] structure.


This is a pivot table containing CTD and other measurement values in individual columns. The measurement columns are not documented because they are dynamically-generated. The measurements on each row occur at the same time, while the position is the temporally-nearest one to the measurement time.
<span id="wiki.actor"></span>
=== Table: actor ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| Altitude (m) | float4 | False | None |  |
| Aperture (%) | float4 | False | None |  |
| Conductivity (mScm) | float4 | False | None |  |
| Conductivity (mho/cm) | float4 | False | None |  |
| Conductivity (uScm) | float4 | False | None |  |
| Density (kg/m3) | float4 | False | None |  |
| Depth (m) | float4 | False | None |  |
| Dissolved Oxygen (ml/L) | float4 | False | None |  |
| Dissolved Oxygen (umol/kg) | float4 | False | None |  |
| Field of View (cm) | float4 | False | None |  |
| Field of View (m) | float4 | False | None |  |
| Field of View Area (m2) | float4 | False | None |  |
| Fluorometry (ug/L) | float4 | False | None |  |
| Focus (%) | float4 | False | None |  |
| Heading (deg) | float4 | False | None |  |
| Oxygen Concentration (mg/L) | float4 | False | None |  |
| Oxygen Saturation (%) | float4 | False | None |  |
| Oxygen Saturation (ml/L) | float4 | False | None |  |
| Pan (deg) | float4 | False | None |  |
| Pitch (deg) | float4 | False | None |  |
| Pressure (dbar) | float4 | False | None |  |
| Pressure (psi) | float4 | False | None |  |
| Rate of Descent (m/s) | float4 | False | None |  |
| Roll (deg) | float4 | False | None |  |
| Salinity (PPT) | float4 | False | None |  |
| Salinity (PSS) | float4 | False | None |  |
| Salinity (PSU) | float4 | False | None |  |
| Sea Pressure (dbar) | float4 | False | None |  |
| Slant Range (m) | float4 | False | None |  |
| Sound Velocity (m/s) | float4 | False | None |  |
| Specific Conductivity (uScm) | float4 | False | None |  |
| Speed (kts) | float4 | False | None |  |
| Speed (m/s) | float4 | False | None |  |
| Temperature (deg C) | float4 | False | None |  |
| Tilt (deg) | float4 | False | None |  |
| Turbidity (ftu) | float4 | False | None |  |
| Zoom (%) | float4 | False | None |  |
| cruise_name | varchar | False | None | The dive name -- a convenience. |
| dive_name | varchar | False | None | The dive name -- a convenience. |
| geom | geography | False | None | The point geometry of the position. |
| lat | float4 | False | None | The latitude of the position. |
| lon | float4 | False | None | The longitude of the position. |
| tdiff | float4 | False | None | The time difference in seconds between the measurement time and the position time. |
| timestamp | timestamp | False | None | The measurement time. |


##### View: comment_event_position <a name="rov.comment_event_position"></a>
{| class="wikitable"  
|+ Columns in "actor"
|-
! Name !! Type !! Nullable !! Documentation
|-
| actor_id || bigint || NO || [None]
|-
| actor_name || text || NO || [None]
|-
| actor_user || integer || YES || [None]
|}


Creates a relation between an [comment event](#rov.comment_event) and the [positions](#rov.position) nearest the start and end times of the event.
<span id="wiki.archive"></span>
=== Table: archive ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| end_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's end time, or null if one is not supplied. |
| event_id | int4 | False | None | The link to the [comment event's](#rov.comment_event)'s event ID. |
| start_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's start time. |


##### View: habitat_event_position <a name="rov.habitat_event_position"></a>
{| class="wikitable"  
|+ Columns in "archive"
|-
! Name !! Type !! Nullable !! Documentation
|-
| ar_actor || bigint || NO || [None]
|-
| ar_comment_id || bigint || NO || [None]
|-
| ar_deleted || smallint || NO || [None]
|-
| ar_id || integer || NO || [None]
|-
| ar_len || integer || YES || [None]
|-
| ar_minor_edit || smallint || NO || [None]
|-
| ar_namespace || integer || NO || [None]
|-
| ar_page_id || integer || YES || [None]
|-
| ar_parent_id || integer || YES || [None]
|-
| ar_rev_id || integer || NO || [None]
|-
| ar_sha1 || text || NO || [None]
|-
| ar_timestamp || timestamp with time zone || NO || [None]
|-
| ar_title || text || NO || [None]
|}


Creates a relation between an [habitat event](#rov.habitat_event) and the [positions](#rov.position) nearest the start and end times of the event.
<span id="wiki.bot_passwords"></span>
=== Table: bot_passwords ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| end_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's end time, or null if one is not supplied. |
| event_id | int4 | False | None | The link to the [habitat event's](#rov.habitat_event)'s event ID. |
| start_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's start time. |


##### View: observation_event_position <a name="rov.observation_event_position"></a>
{| class="wikitable"  
|+ Columns in "bot_passwords"
|-
! Name !! Type !! Nullable !! Documentation
|-
| bp_app_id || text || NO || [None]
|-
| bp_grants || text || NO || [None]
|-
| bp_password || text || NO || [None]
|-
| bp_restrictions || text || NO || [None]
|-
| bp_token || text || NO || [None]
|-
| bp_user || integer || NO || [None]
|}


Creates a relation between an [observation event](#rov.observation_event) and the [positions](#rov.position) nearest the start and end times of the event.
<span id="wiki.category"></span>
=== Table: category ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| end_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's end time, or null if one is not supplied. |
| event_id | int4 | False | None | The link to the [observation event's](#rov.observation_event)'s event ID. |
| start_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's start time. |


##### View: status_event_position <a name="rov.status_event_position"></a>
{| class="wikitable"  
|+ Columns in "category"
|-
! Name !! Type !! Nullable !! Documentation
|-
| cat_files || integer || NO || [None]
|-
| cat_id || integer || NO || [None]
|-
| cat_pages || integer || NO || [None]
|-
| cat_subcats || integer || NO || [None]
|-
| cat_title || text || NO || [None]
|}


Creates a relation between an [status event](#rov.status_event) and the [positions](#rov.position) nearest the start and end times of the event.
<span id="wiki.categorylinks"></span>
=== Table: categorylinks ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| end_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's end time, or null if one is not supplied. |
| event_id | int4 | False | None | The link to the [status event's](#rov.status_event)'s event ID. |
| start_position_id | int4 | False | None | The link to the [position](#rov.position) nearest the event's start time. |


#### Schema: ndst
{| class="wikitable"
|+ Columns in "categorylinks"
|-
! Name !! Type !! Nullable !! Documentation
|-
| cl_collation || text || NO || [None]
|-
| cl_from || integer || NO || [None]
|-
| cl_sortkey || text || NO || [None]
|-
| cl_sortkey_prefix || text || NO || [None]
|-
| cl_timestamp || timestamp with time zone || NO || [None]
|-
| cl_to || text || NO || [None]
|-
| cl_type || text || NO || [None]
|}


##### Table: cruise <a name="ndst.cruise"></a>  
<span id="wiki.change_tag"></span>
=== Table: change_tag ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| active | bool | False | None |  |
| created_on | timestamp | False | None |  |
| leg | text | False | None |  |
| name | text | False | None |  |
| note | text | False | None |  |
| objective | text | False | None |  |
| row_id | text | False | None |  |
| status | varchar | False | None |  |
| summary | text | False | None |  |
| updated_on | timestamp | False | None |  |


##### Table: diveconfig <a name="ndst.diveconfig"></a>
{| class="wikitable"  
|+ Columns in "change_tag"
|-
! Name !! Type !! Nullable !! Documentation
|-
| ct_id || integer || NO || [None]
|-
| ct_log_id || integer || YES || [None]
|-
| ct_params || text || YES || [None]
|-
| ct_rc_id || integer || YES || [None]
|-
| ct_rev_id || integer || YES || [None]
|-
| ct_tag_id || integer || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.change_tag_def"></span>
| --- | --- | --- | --- | --- |
=== Table: change_tag_def ===
| active | bool | False | None |  |
| name | text | False | None |  |
| note | text | False | None |  |
| row_id | text | False | None |  |
| ship_config | text | False | None |  |
| ship_instrument_configs | text | False | None |  |
| sub_config | text | False | None |  |
| sub_instrument_configs | text | False | None |  |


##### Table: dives <a name="ndst.dives"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "change_tag_def"
| active | bool | False | None | |
|-
| cruise_name | text | False | None |  |
! Name !! Type !! Nullable !! Documentation
| dive_config | text | False | None |  |
|-
| end_time | text | False | None | |
| ctd_count || bigint || NO || [None]
| leg | text | False | None |  |
|-
| name | text | False | None |  |
| ctd_id || integer || NO || [None]
| note | text | False | None |  |
|-
| objective | text | False | None | |
| ctd_name || text || NO || [None]
| pilot | text | False | None |  |
|-
| row_id | text | False | None |  |
| ctd_user_defined || smallint || NO || [None]
| site_name | text | False | None | |
|}
| start_time | text | False | None |  |
| summary | text | False | None |  |


##### Table: equipconfig <a name="ndst.equipconfig"></a>  
<span id="wiki.comment"></span>
=== Table: comment ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| active | bool | False | None |  |
| configuration | text | False | None |  |
| name | text | False | None |  |
| note | text | False | None |  |
| row_id | text | False | None |  |
| short_code | text | False | None |  |
| type | text | False | None |  |


##### Table: equipment <a name="ndst.equipment"></a>
{| class="wikitable"  
|+ Columns in "comment"
|-
! Name !! Type !! Nullable !! Documentation
|-
| comment_data || text || YES || [None]
|-
| comment_hash || integer || NO || [None]
|-
| comment_id || bigint || NO || [None]
|-
| comment_text || text || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.content"></span>
| --- | --- | --- | --- | --- |
=== Table: content ===
| active | bool | False | None |  |
| brand | text | False | None |  |
| instrument_id | int4 | False | None |  |
| model | text | False | None |  |
| note | text | False | None |  |
| platform_id | int4 | False | None |  |
| row_id | text | False | None |  |
| serial_number | text | False | None |  |
| short_code | text | False | None |  |
| short_code_mapped | varchar | False | None | An optional mapping from the origin short code to an internal short code. Not unique because multiple source items can map to a single internal item. |
| type | text | False | None |  |


##### Table: people <a name="ndst.people"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "content"
| active | bool | False | None | |
|-
| email | text | False | None | |
! Name !! Type !! Nullable !! Documentation
| first_name | text | False | None | |
|-
| initials | text | False | None | |
| content_address || text || NO || [None]
| last_name | text | False | None | |
|-
| person_id | int4 | False | None | |
| content_id || bigint || NO || [None]
| row_id | text | False | None | |
|-
| content_model || smallint || NO || [None]
|-
| content_sha1 || text || NO || [None]
|-
| content_size || integer || NO || [None]
|}


##### Table: transects <a name="ndst.transects"></a>  
<span id="wiki.content_models"></span>
=== Table: content_models ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| active | bool | False | None |  |
| cruise_name | text | False | None |  |
| dive_name | text | False | None |  |
| end_time | text | False | None |  |
| leg | text | False | None |  |
| name | text | False | None |  |
| note | text | False | None |  |
| objective | text | False | None |  |
| row_id | text | False | None |  |
| start_time | text | False | None |  |
| summary | text | False | None |  |


#### Schema:
{| class="wikitable"
|+ Columns in "content_models"
|-
! Name !! Type !! Nullable !! Documentation
|-
| model_id || integer || NO || [None]
|-
| model_name || text || NO || [None]
|}


### Protected Areas
<span id="wiki.externallinks"></span>
=== Table: externallinks ===


These tables relate to protected areas.
None


#### Schema: pa
{| class="wikitable"
|+ Columns in "externallinks"
|-
! Name !! Type !! Nullable !! Documentation
|-
| el_from || integer || NO || [None]
|-
| el_id || integer || NO || [None]
|-
| el_index || text || NO || [None]
|-
| el_index_60 || text || NO || [None]
|-
| el_to || text || NO || [None]
|-
| el_to_domain_index || text || NO || [None]
|-
| el_to_path || text || YES || [None]
|}


##### Table: mpa <a name="pa.mpa"></a>  
<span id="wiki.filearchive"></span>
=== Table: filearchive ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| aichi_t11 | varchar | False | None |  |
| biome | varchar | False | None |  |
| comments | varchar | False | None |  |
| delisdate | int4 | False | None |  |
| geom | geography | False | None |  |
| geometry | geometry | False | None |  |
| gov_type | varchar | False | None |  |
| iucn_cat | varchar | False | None |  |
| jur_id | varchar | False | None |  |
| legisl_e | varchar | False | None |  |
| legisl_f | varchar | False | None |  |
| loc_e | varchar | False | None |  |
| loc_f | varchar | False | None |  |
| mgmt_e | varchar | False | None |  |
| mgmt_f | varchar | False | None |  |
| name_e | varchar | False | None |  |
| name_f | varchar | False | None |  |
| name_ind | varchar | False | None |  |
| o_area | float8 | False | None |  |
| objectid | int8 | False | None |  |
| oecm | varchar | False | None |  |
| ogc_fid | int4 | False | None |  |
| owner_e | varchar | False | None |  |
| owner_f | varchar | False | None |  |
| parent_id | int4 | False | None |  |
| protdate | int4 | False | None |  |
| shape_area | float8 | False | None |  |
| shape_length | float8 | False | None |  |
| status_e | varchar | False | None |  |
| status_f | varchar | False | None |  |
| subs_right | varchar | False | None |  |
| type_e | varchar | False | None |  |
| type_f | varchar | False | None |  |
| url | varchar | False | None |  |
| zone_id | int4 | False | None |  |
| zonedesc_e | varchar | False | None |  |
| zonedesc_f | varchar | False | None |  |


##### Table: mpa_data_object <a name="pa.mpa_data_object"></a>
{| class="wikitable"  
|+ Columns in "filearchive"
|-
! Name !! Type !! Nullable !! Documentation
|-
| fa_actor || bigint || NO || [None]
|-
| fa_archive_name || text || YES || [None]
|-
| fa_bits || integer || YES || [None]
|-
| fa_deleted || smallint || NO || [None]
|-
| fa_deleted_reason_id || bigint || NO || [None]
|-
| fa_deleted_timestamp || timestamp with time zone || YES || [None]
|-
| fa_deleted_user || integer || YES || [None]
|-
| fa_description_id || bigint || NO || [None]
|-
| fa_height || integer || YES || [None]
|-
| fa_id || integer || NO || [None]
|-
| fa_major_mime || text || YES || [None]
|-
| fa_media_type || text || YES || [None]
|-
| fa_metadata || text || YES || [None]
|-
| fa_minor_mime || text || YES || [None]
|-
| fa_name || text || NO || [None]
|-
| fa_sha1 || text || NO || [None]
|-
| fa_size || integer || YES || [None]
|-
| fa_storage_group || text || YES || [None]
|-
| fa_storage_key || text || YES || [None]
|-
| fa_timestamp || timestamp with time zone || YES || [None]
|-
| fa_width || integer || YES || [None]
|}


A data object related to an [MPA](#mpa.mpa). This is the abstract, or top-level object, which may contain one or more physical objects (files) or documents.
<span id="wiki.image"></span>
=== Table: image ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| created_on | timestamp | False | None | The time of creation of the record. |
| description | text | False | None | A description of the object. |
| doi | varchar | False | None | The DOI of the object. |
| isbn | varchar | False | None | The ISBN of the object. |
| mpa_id | int4 | False | None | A reference to the [MPA](#mpa.mpa) record. |
| name | varchar | False | None | The name of the data object. |
| updated_on | timestamp | False | None | The last update time of the object. |


##### Table: mpa_data_object_file <a name="pa.mpa_data_object_file"></a>
{| class="wikitable"  
|+ Columns in "image"
|-
! Name !! Type !! Nullable !! Documentation
|-
| img_actor || bigint || NO || [None]
|-
| img_bits || integer || NO || [None]
|-
| img_description_id || bigint || NO || [None]
|-
| img_height || integer || NO || [None]
|-
| img_major_mime || text || NO || [None]
|-
| img_media_type || text || YES || [None]
|-
| img_metadata || text || NO || [None]
|-
| img_minor_mime || text || NO || [None]
|-
| img_name || text || NO || [None]
|-
| img_sha1 || text || NO || [None]
|-
| img_size || integer || NO || [None]
|-
| img_timestamp || timestamp with time zone || NO || [None]
|-
| img_width || integer || NO || [None]
|}


Gives the ability for more than one [data object](#mpa.data_object) to own a [file](#shared.file) and vice versa.
<span id="wiki.imagelinks"></span>
=== Table: imagelinks ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| data_object_id | int4 | False | None | A reference to the [data object](#mpa.data_object). |
| file_id | int4 | False | None | A reference to the [file](#shared.file). |


##### Table: protected_area <a name="pa.protected_area"></a>
{| class="wikitable"  
|+ Columns in "imagelinks"
|-
! Name !! Type !! Nullable !! Documentation
|-
| il_from || integer || NO || [None]
|-
| il_from_namespace || integer || NO || [None]
|-
| il_to || text || NO || [None]
|}


A unified table for protected areas.
<span id="wiki.interwiki"></span>
=== Table: interwiki ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| area | float4 | False | None | The nominal area in sq. km of the protected area. |
| geom | geography | False | None | The boundary geometry of the protected area. |
| name_e | varchar | False | None | The English name of the protected area. |
| name_f | varchar | False | None | The French name of the protected area. |
| note | text | False | None | An optional note about the protected area. |
| original_id | int4 | False | None | The original ID of the protected area, from the source database. |
| type | varchar | False | None | The type of protected area, including "RCA", "MPA", etc. |
| year_created | int4 | False | None | The year of creation of the protected area. |


##### Table: protected_area_data_object <a name="pa.protected_area_data_object"></a>
{| class="wikitable"  
|+ Columns in "interwiki"
|-
! Name !! Type !! Nullable !! Documentation
|-
| iw_api || text || NO || [None]
|-
| iw_local || smallint || NO || [None]
|-
| iw_prefix || character varying || NO || [None]
|-
| iw_trans || smallint || NO || [None]
|-
| iw_url || text || NO || [None]
|-
| iw_wikiid || character varying || NO || [None]
|}


A data object related to an [RCA](#rca.rca). This is the abstract, or top-level object, which may contain one or more physical objects (files) or documents.
<span id="wiki.ip_changes"></span>
=== Table: ip_changes ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| created_on | timestamp | False | None | The time of creation of the record. |
| description | text | False | None | A description of the object. |
| doi | varchar | False | None | The DOI of the object. |
| isbn | varchar | False | None | The ISBN of the object. |
| name | varchar | False | None | The name of the data object. |
| protected_area_id | int4 | False | None | A link to the [protected area](#pa.protected_area). |
| updated_on | timestamp | False | None | The last update time of the object. |


##### Table: protected_area_data_object_file <a name="pa.protected_area_data_object_file"></a>
{| class="wikitable"  
|+ Columns in "ip_changes"
|-
! Name !! Type !! Nullable !! Documentation
|-
| ipc_hex || text || NO || [None]
|-
| ipc_rev_id || integer || NO || [None]
|-
| ipc_rev_timestamp || timestamp with time zone || NO || [None]
|}


Gives the ability for more than one [data object](#rca.data_object) to own a [file](#shared.file) and vice versa.
<span id="wiki.ipblocks"></span>
=== Table: ipblocks ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| data_object_id | int4 | False | None | A reference to the [data object](#rca.data_object). |
| file_id | int4 | False | None | A reference to the [file](#shared.file). |


##### Table: rca <a name="pa.rca"></a>
{| class="wikitable"  
|+ Columns in "ipblocks"
|-
! Name !! Type !! Nullable !! Documentation
|-
| ipb_address || text || NO || [None]
|-
| ipb_allow_usertalk || smallint || NO || [None]
|-
| ipb_anon_only || smallint || NO || [None]
|-
| ipb_auto || smallint || NO || [None]
|-
| ipb_block_email || smallint || NO || [None]
|-
| ipb_by_actor || bigint || NO || [None]
|-
| ipb_create_account || smallint || NO || [None]
|-
| ipb_deleted || smallint || NO || [None]
|-
| ipb_enable_autoblock || smallint || NO || [None]
|-
| ipb_expiry || timestamp with time zone || NO || [None]
|-
| ipb_id || integer || NO || [None]
|-
| ipb_parent_block_id || integer || YES || [None]
|-
| ipb_range_end || text || NO || [None]
|-
| ipb_range_start || text || NO || [None]
|-
| ipb_reason_id || bigint || NO || [None]
|-
| ipb_sitewide || smallint || NO || [None]
|-
| ipb_timestamp || timestamp with time zone || NO || [None]
|-
| ipb_user || integer || NO || [None]
|}


Stores basic information about RCAs along with a boundary geometry.
<span id="wiki.ipblocks_restrictions"></span>
=== Table: ipblocks_restrictions ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| area | float4 | False | None | The area of the RCA (from source). |
| description | text | False | None | A description of the RCA. |
| formerid | int2 | False | None | The former ID of the RCA (from source). |
| geom | geography | False | None | The RCA geography. |
| hectares | float4 | False | None | The number of hectares in the RCA (from source). |
| len | float4 | False | None | The length (?) of the RCA (from source). |
| name | varchar | False | None | The name of the RCA. |
| rca_id | float8 | False | None | The RCA ID as defined by the provider. |
| sq_km | float4 | False | None | The area of the RCA (from source). |
| yr_created | int2 | False | None | The year the RCA was created (from source). |


### Wiki
{| class="wikitable"
|+ Columns in "ipblocks_restrictions"
|-
! Name !! Type !! Nullable !! Documentation
|-
| ir_ipb_id || integer || NO || [None]
|-
| ir_type || smallint || NO || [None]
|-
| ir_value || integer || NO || [None]
|}


These tables are owned by the Mediawiki installation.
<span id="wiki.iwlinks"></span>
=== Table: iwlinks ===


#### Schema: wiki
None


##### Table: actor <a name="wiki.actor"></a>
{| class="wikitable"  
|+ Columns in "iwlinks"
|-
! Name !! Type !! Nullable !! Documentation
|-
| iwl_from || integer || NO || [None]
|-
| iwl_prefix || text || NO || [None]
|-
| iwl_title || text || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.job"></span>
| --- | --- | --- | --- | --- |
=== Table: job ===
| actor_id | int8 | False | None |  |
| actor_name | text | False | None |  |
| actor_user | int4 | False | None |  |


##### Table: archive <a name="wiki.archive"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "job"
| ar_actor | int8 | False | None | |
|-
| ar_comment_id | int8 | False | None | |
! Name !! Type !! Nullable !! Documentation
| ar_deleted | int2 | False | None | |
|-
| ar_id | int4 | False | None | |
| job_attempts || integer || NO || [None]
| ar_len | int4 | False | None | |
|-
| ar_minor_edit | int2 | False | None | |
| job_cmd || text || NO || [None]
| ar_namespace | int4 | False | None | |
|-
| ar_page_id | int4 | False | None | |
| job_id || integer || NO || [None]
| ar_parent_id | int4 | False | None | |
|-
| ar_rev_id | int4 | False | None | |
| job_namespace || integer || NO || [None]
| ar_sha1 | text | False | None | |
|-
| ar_timestamp | timestamptz | False | None | |
| job_params || text || NO || [None]
| ar_title | text | False | None | |
|-
| job_random || integer || NO || [None]
|-
| job_sha1 || text || NO || [None]
|-
| job_timestamp || timestamp with time zone || YES || [None]
|-
| job_title || text || NO || [None]
|-
| job_token || text || NO || [None]
|-
| job_token_timestamp || timestamp with time zone || YES || [None]
|}


##### Table: bot_passwords <a name="wiki.bot_passwords"></a>  
<span id="wiki.l10n_cache"></span>
=== Table: l10n_cache ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| bp_app_id | text | False | None |  |
| bp_grants | text | False | None |  |
| bp_password | text | False | None |  |
| bp_restrictions | text | False | None |  |
| bp_token | text | False | None |  |
| bp_user | int4 | False | None |  |


##### Table: category <a name="wiki.category"></a>
{| class="wikitable"  
|+ Columns in "l10n_cache"
|-
! Name !! Type !! Nullable !! Documentation
|-
| lc_key || character varying || NO || [None]
|-
| lc_lang || text || NO || [None]
|-
| lc_value || text || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.langlinks"></span>
| --- | --- | --- | --- | --- |
=== Table: langlinks ===
| cat_files | int4 | False | None |  |
| cat_id | int4 | False | None |  |
| cat_pages | int4 | False | None |  |
| cat_subcats | int4 | False | None |  |
| cat_title | text | False | None |  |


##### Table: categorylinks <a name="wiki.categorylinks"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "langlinks"
| cl_collation | text | False | None | |
|-
| cl_from | int4 | False | None |  |
! Name !! Type !! Nullable !! Documentation
| cl_sortkey | text | False | None |  |
|-
| cl_sortkey_prefix | text | False | None |  |
| ll_from || integer || NO || [None]
| cl_timestamp | timestamptz | False | None |  |
|-
| cl_to | text | False | None |  |
| ll_lang || text || NO || [None]
| cl_type | text | False | None |  |
|-
| ll_title || text || NO || [None]
|}


##### Table: change_tag <a name="wiki.change_tag"></a>  
<span id="wiki.linktarget"></span>
=== Table: linktarget ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| ct_id | int4 | False | None |  |
| ct_log_id | int4 | False | None |  |
| ct_params | text | False | None |  |
| ct_rc_id | int4 | False | None |  |
| ct_rev_id | int4 | False | None |  |
| ct_tag_id | int4 | False | None |  |


##### Table: change_tag_def <a name="wiki.change_tag_def"></a>
{| class="wikitable"  
|+ Columns in "linktarget"
|-
! Name !! Type !! Nullable !! Documentation
|-
| lt_id || bigint || NO || [None]
|-
| lt_namespace || integer || NO || [None]
|-
| lt_title || text || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.log_search"></span>
| --- | --- | --- | --- | --- |
=== Table: log_search ===
| ctd_count | int8 | False | None |  |
| ctd_id | int4 | False | None |  |
| ctd_name | text | False | None |  |
| ctd_user_defined | int2 | False | None |  |


##### Table: comment <a name="wiki.comment"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "log_search"
| comment_data | text | False | None | |
|-
| comment_hash | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| comment_id | int8 | False | None | |
|-
| comment_text | text | False | None | |
| ls_field || text || NO || [None]
|-
| ls_log_id || integer || NO || [None]
|-
| ls_value || character varying || NO || [None]
|}


##### Table: content <a name="wiki.content"></a>  
<span id="wiki.logging"></span>
=== Table: logging ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| content_address | text | False | None |  |
| content_id | int8 | False | None |  |
| content_model | int2 | False | None |  |
| content_sha1 | text | False | None |  |
| content_size | int4 | False | None |  |


##### Table: content_models <a name="wiki.content_models"></a>
{| class="wikitable"  
|+ Columns in "logging"
|-
! Name !! Type !! Nullable !! Documentation
|-
| log_action || text || NO || [None]
|-
| log_actor || bigint || NO || [None]
|-
| log_comment_id || bigint || NO || [None]
|-
| log_deleted || smallint || NO || [None]
|-
| log_id || integer || NO || [None]
|-
| log_namespace || integer || NO || [None]
|-
| log_page || integer || YES || [None]
|-
| log_params || text || NO || [None]
|-
| log_timestamp || timestamp with time zone || NO || [None]
|-
| log_title || text || NO || [None]
|-
| log_type || text || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.module_deps"></span>
| --- | --- | --- | --- | --- |
=== Table: module_deps ===
| model_id | int4 | False | None |  |
| model_name | text | False | None |  |


##### Table: externallinks <a name="wiki.externallinks"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "module_deps"
| el_from | int4 | False | None | |
|-
| el_id | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| el_index | text | False | None | |
|-
| el_index_60 | text | False | None |  |
| md_deps || text || NO || [None]
| el_to | text | False | None |  |
|-
| el_to_domain_index | text | False | None |  |
| md_module || text || NO || [None]
| el_to_path | text | False | None |  |
|-
| md_skin || text || NO || [None]
|}


##### Table: filearchive <a name="wiki.filearchive"></a>  
<span id="wiki.objectcache"></span>
=== Table: objectcache ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| fa_actor | int8 | False | None |  |
| fa_archive_name | text | False | None |  |
| fa_bits | int4 | False | None |  |
| fa_deleted | int2 | False | None |  |
| fa_deleted_reason_id | int8 | False | None |  |
| fa_deleted_timestamp | timestamptz | False | None |  |
| fa_deleted_user | int4 | False | None |  |
| fa_description_id | int8 | False | None |  |
| fa_height | int4 | False | None |  |
| fa_id | int4 | False | None |  |
| fa_major_mime | text | False | None |  |
| fa_media_type | text | False | None |  |
| fa_metadata | text | False | None |  |
| fa_minor_mime | text | False | None |  |
| fa_name | text | False | None |  |
| fa_sha1 | text | False | None |  |
| fa_size | int4 | False | None |  |
| fa_storage_group | text | False | None |  |
| fa_storage_key | text | False | None |  |
| fa_timestamp | timestamptz | False | None |  |
| fa_width | int4 | False | None |  |


##### Table: image <a name="wiki.image"></a>
{| class="wikitable"  
|+ Columns in "objectcache"
|-
! Name !! Type !! Nullable !! Documentation
|-
| exptime || timestamp with time zone || NO || [None]
|-
| flags || integer || YES || [None]
|-
| keyname || text || NO || [None]
|-
| modtoken || character varying || NO || [None]
|-
| value || text || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.oldimage"></span>
| --- | --- | --- | --- | --- |
=== Table: oldimage ===
| img_actor | int8 | False | None |  |
| img_bits | int4 | False | None |  |
| img_description_id | int8 | False | None |  |
| img_height | int4 | False | None |  |
| img_major_mime | text | False | None |  |
| img_media_type | text | False | None |  |
| img_metadata | text | False | None |  |
| img_minor_mime | text | False | None |  |
| img_name | text | False | None |  |
| img_sha1 | text | False | None |  |
| img_size | int4 | False | None |  |
| img_timestamp | timestamptz | False | None |  |
| img_width | int4 | False | None |  |


##### Table: imagelinks <a name="wiki.imagelinks"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "oldimage"
| il_from | int4 | False | None | |
|-
| il_from_namespace | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| il_to | text | False | None | |
|-
| oi_actor || bigint || NO || [None]
|-
| oi_archive_name || text || NO || [None]
|-
| oi_bits || integer || NO || [None]
|-
| oi_deleted || smallint || NO || [None]
|-
| oi_description_id || bigint || NO || [None]
|-
| oi_height || integer || NO || [None]
|-
| oi_major_mime || text || NO || [None]
|-
| oi_media_type || text || YES || [None]
|-
| oi_metadata || text || NO || [None]
|-
| oi_minor_mime || text || NO || [None]
|-
| oi_name || text || NO || [None]
|-
| oi_sha1 || text || NO || [None]
|-
| oi_size || integer || NO || [None]
|-
| oi_timestamp || timestamp with time zone || NO || [None]
|-
| oi_width || integer || NO || [None]
|}


##### Table: interwiki <a name="wiki.interwiki"></a>  
<span id="wiki.page"></span>
=== Table: page ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| iw_api | text | False | None |  |
| iw_local | int2 | False | None |  |
| iw_prefix | varchar | False | None |  |
| iw_trans | int2 | False | None |  |
| iw_url | text | False | None |  |
| iw_wikiid | varchar | False | None |  |


##### Table: ip_changes <a name="wiki.ip_changes"></a>
{| class="wikitable"  
|+ Columns in "page"
|-
! Name !! Type !! Nullable !! Documentation
|-
| page_content_model || text || YES || [None]
|-
| page_id || integer || NO || [None]
|-
| page_is_new || smallint || NO || [None]
|-
| page_is_redirect || smallint || NO || [None]
|-
| page_lang || text || YES || [None]
|-
| page_latest || integer || NO || [None]
|-
| page_len || integer || NO || [None]
|-
| page_links_updated || timestamp with time zone || YES || [None]
|-
| page_namespace || integer || NO || [None]
|-
| page_random || double precision || NO || [None]
|-
| page_title || text || NO || [None]
|-
| page_touched || timestamp with time zone || NO || [None]
|-
| titlevector || tsvector || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.page_props"></span>
| --- | --- | --- | --- | --- |
=== Table: page_props ===
| ipc_hex | text | False | None |  |
| ipc_rev_id | int4 | False | None |  |
| ipc_rev_timestamp | timestamptz | False | None |  |


##### Table: ipblocks <a name="wiki.ipblocks"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "page_props"
| ipb_address | text | False | None |  |
|-
| ipb_allow_usertalk | int2 | False | None |  |
! Name !! Type !! Nullable !! Documentation
| ipb_anon_only | int2 | False | None | |
|-
| ipb_auto | int2 | False | None |  |
| pp_page || integer || NO || [None]
| ipb_block_email | int2 | False | None |  |
|-
| ipb_by_actor | int8 | False | None |  |
| pp_propname || text || NO || [None]
| ipb_create_account | int2 | False | None |  |
|-
| ipb_deleted | int2 | False | None |  |
| pp_sortkey || double precision || YES || [None]
| ipb_enable_autoblock | int2 | False | None | |
|-
| ipb_expiry | timestamptz | False | None |  |
| pp_value || text || NO || [None]
| ipb_id | int4 | False | None |  |
|}
| ipb_parent_block_id | int4 | False | None |  |
| ipb_range_end | text | False | None |  |
| ipb_range_start | text | False | None | |
| ipb_reason_id | int8 | False | None |  |
| ipb_sitewide | int2 | False | None |  |
| ipb_timestamp | timestamptz | False | None |  |
| ipb_user | int4 | False | None |  |


##### Table: ipblocks_restrictions <a name="wiki.ipblocks_restrictions"></a>  
<span id="wiki.page_restrictions"></span>
=== Table: page_restrictions ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| ir_ipb_id | int4 | False | None |  |
| ir_type | int2 | False | None |  |
| ir_value | int4 | False | None |  |


##### Table: iwlinks <a name="wiki.iwlinks"></a>
{| class="wikitable"  
|+ Columns in "page_restrictions"
|-
! Name !! Type !! Nullable !! Documentation
|-
| pr_cascade || smallint || NO || [None]
|-
| pr_expiry || timestamp with time zone || YES || [None]
|-
| pr_id || integer || NO || [None]
|-
| pr_level || text || NO || [None]
|-
| pr_page || integer || NO || [None]
|-
| pr_type || text || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.pagelinks"></span>
| --- | --- | --- | --- | --- |
=== Table: pagelinks ===
| iwl_from | int4 | False | None |  |
| iwl_prefix | text | False | None |  |
| iwl_title | text | False | None |  |


##### Table: job <a name="wiki.job"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "pagelinks"
| job_attempts | int4 | False | None | |
|-
| job_cmd | text | False | None | |
! Name !! Type !! Nullable !! Documentation
| job_id | int4 | False | None |  |
|-
| job_namespace | int4 | False | None |  |
| pl_from || integer || NO || [None]
| job_params | text | False | None | |
|-
| job_random | int4 | False | None |  |
| pl_from_namespace || integer || NO || [None]
| job_sha1 | text | False | None |  |
|-
| job_timestamp | timestamptz | False | None |  |
| pl_namespace || integer || NO || [None]
| job_title | text | False | None |  |
|-
| job_token | text | False | None |  |
| pl_title || text || NO || [None]
| job_token_timestamp | timestamptz | False | None |  |
|}


##### Table: l10n_cache <a name="wiki.l10n_cache"></a>  
<span id="wiki.protected_titles"></span>
=== Table: protected_titles ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| lc_key | varchar | False | None |  |
| lc_lang | text | False | None |  |
| lc_value | text | False | None |  |


##### Table: langlinks <a name="wiki.langlinks"></a>
{| class="wikitable"  
|+ Columns in "protected_titles"
|-
! Name !! Type !! Nullable !! Documentation
|-
| pt_create_perm || text || NO || [None]
|-
| pt_expiry || timestamp with time zone || NO || [None]
|-
| pt_namespace || integer || NO || [None]
|-
| pt_reason_id || bigint || NO || [None]
|-
| pt_timestamp || timestamp with time zone || NO || [None]
|-
| pt_title || text || NO || [None]
|-
| pt_user || integer || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.querycache"></span>
| --- | --- | --- | --- | --- |
=== Table: querycache ===
| ll_from | int4 | False | None |  |
| ll_lang | text | False | None |  |
| ll_title | text | False | None |  |


##### Table: linktarget <a name="wiki.linktarget"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "querycache"
| lt_id | int8 | False | None | |
|-
| lt_namespace | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| lt_title | text | False | None | |
|-
| qc_namespace || integer || NO || [None]
|-
| qc_title || text || NO || [None]
|-
| qc_type || text || NO || [None]
|-
| qc_value || integer || NO || [None]
|}


##### Table: log_search <a name="wiki.log_search"></a>  
<span id="wiki.querycache_info"></span>
=== Table: querycache_info ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| ls_field | text | False | None |  |
| ls_log_id | int4 | False | None |  |
| ls_value | varchar | False | None |  |


##### Table: logging <a name="wiki.logging"></a>
{| class="wikitable"  
|+ Columns in "querycache_info"
|-
! Name !! Type !! Nullable !! Documentation
|-
| qci_timestamp || timestamp with time zone || NO || [None]
|-
| qci_type || text || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.querycachetwo"></span>
| --- | --- | --- | --- | --- |
=== Table: querycachetwo ===
| log_action | text | False | None |  |
| log_actor | int8 | False | None |  |
| log_comment_id | int8 | False | None |  |
| log_deleted | int2 | False | None |  |
| log_id | int4 | False | None |  |
| log_namespace | int4 | False | None |  |
| log_page | int4 | False | None |  |
| log_params | text | False | None |  |
| log_timestamp | timestamptz | False | None |  |
| log_title | text | False | None |  |
| log_type | text | False | None |  |


##### Table: module_deps <a name="wiki.module_deps"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "querycachetwo"
| md_deps | text | False | None | |
|-
| md_module | text | False | None | |
! Name !! Type !! Nullable !! Documentation
| md_skin | text | False | None | |
|-
| qcc_namespace || integer || NO || [None]
|-
| qcc_namespacetwo || integer || NO || [None]
|-
| qcc_title || text || NO || [None]
|-
| qcc_titletwo || text || NO || [None]
|-
| qcc_type || text || NO || [None]
|-
| qcc_value || integer || NO || [None]
|}


##### Table: objectcache <a name="wiki.objectcache"></a>  
<span id="wiki.recentchanges"></span>
=== Table: recentchanges ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| exptime | timestamptz | False | None |  |
| flags | int4 | False | None |  |
| keyname | text | False | None |  |
| modtoken | varchar | False | None |  |
| value | text | False | None |  |


##### Table: oldimage <a name="wiki.oldimage"></a>
{| class="wikitable"  
|+ Columns in "recentchanges"
|-
! Name !! Type !! Nullable !! Documentation
|-
| rc_actor || bigint || NO || [None]
|-
| rc_bot || smallint || NO || [None]
|-
| rc_comment_id || bigint || NO || [None]
|-
| rc_cur_id || integer || NO || [None]
|-
| rc_deleted || smallint || NO || [None]
|-
| rc_id || integer || NO || [None]
|-
| rc_ip || text || NO || [None]
|-
| rc_last_oldid || integer || NO || [None]
|-
| rc_log_action || text || YES || [None]
|-
| rc_log_type || text || YES || [None]
|-
| rc_logid || integer || NO || [None]
|-
| rc_minor || smallint || NO || [None]
|-
| rc_namespace || integer || NO || [None]
|-
| rc_new || smallint || NO || [None]
|-
| rc_new_len || integer || YES || [None]
|-
| rc_old_len || integer || YES || [None]
|-
| rc_params || text || YES || [None]
|-
| rc_patrolled || smallint || NO || [None]
|-
| rc_source || text || NO || [None]
|-
| rc_this_oldid || integer || NO || [None]
|-
| rc_timestamp || timestamp with time zone || NO || [None]
|-
| rc_title || text || NO || [None]
|-
| rc_type || smallint || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.redirect"></span>
| --- | --- | --- | --- | --- |
=== Table: redirect ===
| oi_actor | int8 | False | None |  |
| oi_archive_name | text | False | None |  |
| oi_bits | int4 | False | None |  |
| oi_deleted | int2 | False | None |  |
| oi_description_id | int8 | False | None |  |
| oi_height | int4 | False | None |  |
| oi_major_mime | text | False | None |  |
| oi_media_type | text | False | None |  |
| oi_metadata | text | False | None |  |
| oi_minor_mime | text | False | None |  |
| oi_name | text | False | None |  |
| oi_sha1 | text | False | None |  |
| oi_size | int4 | False | None |  |
| oi_timestamp | timestamptz | False | None |  |
| oi_width | int4 | False | None |  |


##### Table: page <a name="wiki.page"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "redirect"
| page_content_model | text | False | None | |
|-
| page_id | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| page_is_new | int2 | False | None | |
|-
| page_is_redirect | int2 | False | None |  |
| rd_fragment || text || YES || [None]
| page_lang | text | False | None |  |
|-
| page_latest | int4 | False | None |  |
| rd_from || integer || NO || [None]
| page_len | int4 | False | None | |
|-
| page_links_updated | timestamptz | False | None |  |
| rd_interwiki || character varying || YES || [None]
| page_namespace | int4 | False | None |  |
|-
| page_random | float8 | False | None | |
| rd_namespace || integer || NO || [None]
| page_title | text | False | None |  |
|-
| page_touched | timestamptz | False | None |  |
| rd_title || text || NO || [None]
| titlevector | tsvector | False | None |  |
|}


##### Table: page_props <a name="wiki.page_props"></a>  
<span id="wiki.revision"></span>
=== Table: revision ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| pp_page | int4 | False | None |  |
| pp_propname | text | False | None |  |
| pp_sortkey | float8 | False | None |  |
| pp_value | text | False | None |  |


##### Table: page_restrictions <a name="wiki.page_restrictions"></a>
{| class="wikitable"  
|+ Columns in "revision"
|-
! Name !! Type !! Nullable !! Documentation
|-
| rev_actor || bigint || NO || [None]
|-
| rev_comment_id || bigint || NO || [None]
|-
| rev_deleted || smallint || NO || [None]
|-
| rev_id || integer || NO || [None]
|-
| rev_len || integer || YES || [None]
|-
| rev_minor_edit || smallint || NO || [None]
|-
| rev_page || integer || NO || [None]
|-
| rev_parent_id || integer || YES || [None]
|-
| rev_sha1 || text || NO || [None]
|-
| rev_timestamp || timestamp with time zone || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.revision_comment_temp"></span>
| --- | --- | --- | --- | --- |
=== Table: revision_comment_temp ===
| pr_cascade | int2 | False | None |  |
| pr_expiry | timestamptz | False | None |  |
| pr_id | int4 | False | None |  |
| pr_level | text | False | None |  |
| pr_page | int4 | False | None |  |
| pr_type | text | False | None |  |


##### Table: pagelinks <a name="wiki.pagelinks"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "revision_comment_temp"
| pl_from | int4 | False | None | |
|-
| pl_from_namespace | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| pl_namespace | int4 | False | None |  |
|-
| pl_title | text | False | None |  |
| revcomment_comment_id || bigint || NO || [None]
|-
| revcomment_rev || integer || NO || [None]
|}


##### Table: protected_titles <a name="wiki.protected_titles"></a>  
<span id="wiki.searchindex"></span>
=== Table: searchindex ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| pt_create_perm | text | False | None |  |
| pt_expiry | timestamptz | False | None |  |
| pt_namespace | int4 | False | None |  |
| pt_reason_id | int8 | False | None |  |
| pt_timestamp | timestamptz | False | None |  |
| pt_title | text | False | None |  |
| pt_user | int4 | False | None |  |


##### Table: querycache <a name="wiki.querycache"></a>
{| class="wikitable"  
|+ Columns in "searchindex"
|-
! Name !! Type !! Nullable !! Documentation
|-
| si_page || integer || NO || [None]
|-
| si_text || text || NO || [None]
|-
| si_title || character varying || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.site_identifiers"></span>
| --- | --- | --- | --- | --- |
=== Table: site_identifiers ===
| qc_namespace | int4 | False | None |  |
| qc_title | text | False | None |  |
| qc_type | text | False | None |  |
| qc_value | int4 | False | None |  |


##### Table: querycache_info <a name="wiki.querycache_info"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "site_identifiers"
| qci_timestamp | timestamptz | False | None | |
|-
| qci_type | text | False | None | |
! Name !! Type !! Nullable !! Documentation
|-
| si_key || text || NO || [None]
|-
| si_site || integer || NO || [None]
|-
| si_type || text || NO || [None]
|}


##### Table: querycachetwo <a name="wiki.querycachetwo"></a>  
<span id="wiki.site_stats"></span>
=== Table: site_stats ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| qcc_namespace | int4 | False | None |  |
| qcc_namespacetwo | int4 | False | None |  |
| qcc_title | text | False | None |  |
| qcc_titletwo | text | False | None |  |
| qcc_type | text | False | None |  |
| qcc_value | int4 | False | None |  |


##### Table: recentchanges <a name="wiki.recentchanges"></a>
{| class="wikitable"  
|+ Columns in "site_stats"
|-
! Name !! Type !! Nullable !! Documentation
|-
| ss_active_users || bigint || YES || [None]
|-
| ss_good_articles || bigint || YES || [None]
|-
| ss_images || bigint || YES || [None]
|-
| ss_row_id || integer || NO || [None]
|-
| ss_total_edits || bigint || YES || [None]
|-
| ss_total_pages || bigint || YES || [None]
|-
| ss_users || bigint || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.sites"></span>
| --- | --- | --- | --- | --- |
=== Table: sites ===
| rc_actor | int8 | False | None |  |
| rc_bot | int2 | False | None |  |
| rc_comment_id | int8 | False | None |  |
| rc_cur_id | int4 | False | None |  |
| rc_deleted | int2 | False | None |  |
| rc_id | int4 | False | None |  |
| rc_ip | text | False | None |  |
| rc_last_oldid | int4 | False | None |  |
| rc_log_action | text | False | None |  |
| rc_log_type | text | False | None |  |
| rc_logid | int4 | False | None |  |
| rc_minor | int2 | False | None |  |
| rc_namespace | int4 | False | None |  |
| rc_new | int2 | False | None |  |
| rc_new_len | int4 | False | None |  |
| rc_old_len | int4 | False | None |  |
| rc_params | text | False | None |  |
| rc_patrolled | int2 | False | None |  |
| rc_source | text | False | None |  |
| rc_this_oldid | int4 | False | None |  |
| rc_timestamp | timestamptz | False | None |  |
| rc_title | text | False | None |  |
| rc_type | int2 | False | None |  |


##### Table: redirect <a name="wiki.redirect"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "sites"
| rd_fragment | text | False | None | |
|-
| rd_from | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| rd_interwiki | varchar | False | None | |
|-
| rd_namespace | int4 | False | None | |
| site_config || text || NO || [None]
| rd_title | text | False | None | |
|-
| site_data || text || NO || [None]
|-
| site_domain || character varying || NO || [None]
|-
| site_forward || smallint || NO || [None]
|-
| site_global_key || text || NO || [None]
|-
| site_group || text || NO || [None]
|-
| site_id || integer || NO || [None]
|-
| site_language || text || NO || [None]
|-
| site_protocol || text || NO || [None]
|-
| site_source || text || NO || [None]
|-
| site_type || text || NO || [None]
|}


##### Table: revision <a name="wiki.revision"></a>  
<span id="wiki.slot_roles"></span>
=== Table: slot_roles ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| rev_actor | int8 | False | None |  |
| rev_comment_id | int8 | False | None |  |
| rev_deleted | int2 | False | None |  |
| rev_id | int4 | False | None |  |
| rev_len | int4 | False | None |  |
| rev_minor_edit | int2 | False | None |  |
| rev_page | int4 | False | None |  |
| rev_parent_id | int4 | False | None |  |
| rev_sha1 | text | False | None |  |
| rev_timestamp | timestamptz | False | None |  |


##### Table: revision_comment_temp <a name="wiki.revision_comment_temp"></a>
{| class="wikitable"  
|+ Columns in "slot_roles"
|-
! Name !! Type !! Nullable !! Documentation
|-
| role_id || integer || NO || [None]
|-
| role_name || text || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.slots"></span>
| --- | --- | --- | --- | --- |
=== Table: slots ===
| revcomment_comment_id | int8 | False | None |  |
| revcomment_rev | int4 | False | None |  |


##### Table: searchindex <a name="wiki.searchindex"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "slots"
| si_page | int4 | False | None | |
|-
| si_text | text | False | None | |
! Name !! Type !! Nullable !! Documentation
| si_title | varchar | False | None | |
|-
| slot_content_id || bigint || NO || [None]
|-
| slot_origin || bigint || NO || [None]
|-
| slot_revision_id || bigint || NO || [None]
|-
| slot_role_id || smallint || NO || [None]
|}


##### Table: site_identifiers <a name="wiki.site_identifiers"></a>  
<span id="wiki.templatelinks"></span>
=== Table: templatelinks ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| si_key | text | False | None |  |
| si_site | int4 | False | None |  |
| si_type | text | False | None |  |


##### Table: site_stats <a name="wiki.site_stats"></a>
{| class="wikitable"  
|+ Columns in "templatelinks"
|-
! Name !! Type !! Nullable !! Documentation
|-
| tl_from || integer || NO || [None]
|-
| tl_from_namespace || integer || NO || [None]
|-
| tl_target_id || bigint || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.text"></span>
| --- | --- | --- | --- | --- |
=== Table: text ===
| ss_active_users | int8 | False | None |  |
| ss_good_articles | int8 | False | None |  |
| ss_images | int8 | False | None |  |
| ss_row_id | int4 | False | None |  |
| ss_total_edits | int8 | False | None |  |
| ss_total_pages | int8 | False | None |  |
| ss_users | int8 | False | None |  |


##### Table: sites <a name="wiki.sites"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "text"
| site_config | text | False | None | |
|-
| site_data | text | False | None | |
! Name !! Type !! Nullable !! Documentation
| site_domain | varchar | False | None |  |
|-
| site_forward | int2 | False | None |  |
| old_flags || text || NO || [None]
| site_global_key | text | False | None |  |
|-
| site_group | text | False | None |  |
| old_id || integer || NO || [None]
| site_id | int4 | False | None |  |
|-
| site_language | text | False | None |  |
| old_text || text || NO || [None]
| site_protocol | text | False | None | |
|-
| site_source | text | False | None |  |
| textvector || tsvector || YES || [None]
| site_type | text | False | None |  |
|}


##### Table: slot_roles <a name="wiki.slot_roles"></a>  
<span id="wiki.updatelog"></span>
=== Table: updatelog ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| role_id | int4 | False | None |  |
| role_name | text | False | None |  |


##### Table: slots <a name="wiki.slots"></a>
{| class="wikitable"  
|+ Columns in "updatelog"
|-
! Name !! Type !! Nullable !! Documentation
|-
| ul_key || character varying || NO || [None]
|-
| ul_value || text || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.uploadstash"></span>
| --- | --- | --- | --- | --- |
=== Table: uploadstash ===
| slot_content_id | int8 | False | None |  |
| slot_origin | int8 | False | None |  |
| slot_revision_id | int8 | False | None |  |
| slot_role_id | int2 | False | None |  |


##### Table: templatelinks <a name="wiki.templatelinks"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "uploadstash"
| tl_from | int4 | False | None | |
|-
| tl_from_namespace | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| tl_target_id | int8 | False | None | |
|-
| us_chunk_inx || integer || YES || [None]
|-
| us_id || integer || NO || [None]
|-
| us_image_bits || smallint || YES || [None]
|-
| us_image_height || integer || YES || [None]
|-
| us_image_width || integer || YES || [None]
|-
| us_key || character varying || NO || [None]
|-
| us_media_type || USER-DEFINED || YES || [None]
|-
| us_mime || character varying || YES || [None]
|-
| us_orig_path || character varying || NO || [None]
|-
| us_path || character varying || NO || [None]
|-
| us_props || text || YES || [None]
|-
| us_sha1 || character varying || NO || [None]
|-
| us_size || integer || NO || [None]
|-
| us_source_type || character varying || YES || [None]
|-
| us_status || character varying || NO || [None]
|-
| us_timestamp || timestamp with time zone || NO || [None]
|-
| us_user || integer || NO || [None]
|}


##### Table: text <a name="wiki.text"></a>  
<span id="wiki.user"></span>
=== Table: user ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| old_flags | text | False | None |  |
| old_id | int4 | False | None |  |
| old_text | text | False | None |  |
| textvector | tsvector | False | None |  |


##### Table: updatelog <a name="wiki.updatelog"></a>
{| class="wikitable"  
|+ Columns in "user"
|-
! Name !! Type !! Nullable !! Documentation
|-
| user_editcount || integer || YES || [None]
|-
| user_email || text || NO || [None]
|-
| user_email_authenticated || timestamp with time zone || YES || [None]
|-
| user_email_token || text || YES || [None]
|-
| user_email_token_expires || timestamp with time zone || YES || [None]
|-
| user_id || integer || NO || [None]
|-
| user_name || text || NO || [None]
|-
| user_newpass_time || timestamp with time zone || YES || [None]
|-
| user_newpassword || text || NO || [None]
|-
| user_password || text || NO || [None]
|-
| user_password_expires || timestamp with time zone || YES || [None]
|-
| user_real_name || text || NO || [None]
|-
| user_registration || timestamp with time zone || YES || [None]
|-
| user_token || text || NO || [None]
|-
| user_touched || timestamp with time zone || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.user_autocreate_serial"></span>
| --- | --- | --- | --- | --- |
=== Table: user_autocreate_serial ===
| ul_key | varchar | False | None |  |
| ul_value | text | False | None |  |


##### Table: uploadstash <a name="wiki.uploadstash"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "user_autocreate_serial"
| us_chunk_inx | int4 | False | None |  |
|-
| us_id | int4 | False | None |  |
! Name !! Type !! Nullable !! Documentation
| us_image_bits | int2 | False | None | |
|-
| us_image_height | int4 | False | None |  |
| uas_shard || integer || NO || [None]
| us_image_width | int4 | False | None |  |
|-
| us_key | varchar | False | None | |
| uas_value || integer || NO || [None]
| us_media_type | us_media_type_enum | False | None |  |
|}
| us_mime | varchar | False | None |  |
| us_orig_path | varchar | False | None |  |
| us_path | varchar | False | None |  |
| us_props | text | False | None |  |
| us_sha1 | varchar | False | None |  |
| us_size | int4 | False | None |  |
| us_source_type | varchar | False | None |  |
| us_status | varchar | False | None |  |
| us_timestamp | timestamptz | False | None |  |
| us_user | int4 | False | None |  |


##### Table: user <a name="wiki.user"></a>  
<span id="wiki.user_former_groups"></span>
=== Table: user_former_groups ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| user_editcount | int4 | False | None |  |
| user_email | text | False | None |  |
| user_email_authenticated | timestamptz | False | None |  |
| user_email_token | text | False | None |  |
| user_email_token_expires | timestamptz | False | None |  |
| user_id | int4 | False | None |  |
| user_name | text | False | None |  |
| user_newpass_time | timestamptz | False | None |  |
| user_newpassword | text | False | None |  |
| user_password | text | False | None |  |
| user_password_expires | timestamptz | False | None |  |
| user_real_name | text | False | None |  |
| user_registration | timestamptz | False | None |  |
| user_token | text | False | None |  |
| user_touched | timestamptz | False | None |  |


##### Table: user_autocreate_serial <a name="wiki.user_autocreate_serial"></a>
{| class="wikitable"  
|+ Columns in "user_former_groups"
|-
! Name !! Type !! Nullable !! Documentation
|-
| ufg_group || text || NO || [None]
|-
| ufg_user || integer || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.user_groups"></span>
| --- | --- | --- | --- | --- |
=== Table: user_groups ===
| uas_shard | int4 | False | None |  |
| uas_value | int4 | False | None |  |


##### Table: user_former_groups <a name="wiki.user_former_groups"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "user_groups"
| ufg_group | text | False | None | |
|-
| ufg_user | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
|-
| ug_expiry || timestamp with time zone || YES || [None]
|-
| ug_group || text || NO || [None]
|-
| ug_user || integer || NO || [None]
|}


##### Table: user_groups <a name="wiki.user_groups"></a>  
<span id="wiki.user_newtalk"></span>
=== Table: user_newtalk ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| ug_expiry | timestamptz | False | None |  |
| ug_group | text | False | None |  |
| ug_user | int4 | False | None |  |


##### Table: user_newtalk <a name="wiki.user_newtalk"></a>
{| class="wikitable"
|+ Columns in "user_newtalk"
|-
! Name !! Type !! Nullable !! Documentation
|-
| user_id || integer || NO || [None]
|-
| user_ip || text || NO || [None]
|-
| user_last_timestamp || timestamp with time zone || YES || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.user_properties"></span>
| --- | --- | --- | --- | --- |
=== Table: user_properties ===
| user_id | int4 | False | None |  |
| user_ip | text | False | None |  |
| user_last_timestamp | timestamptz | False | None |  |


##### Table: user_properties <a name="wiki.user_properties"></a>
None


| Column Name | Type | Not Null | Default | Description |
{| class="wikitable"
| --- | --- | --- | --- | --- |
|+ Columns in "user_properties"
| up_property | text | False | None | |
|-
| up_user | int4 | False | None | |
! Name !! Type !! Nullable !! Documentation
| up_value | text | False | None | |
|-
| up_property || text || NO || [None]
|-
| up_user || integer || NO || [None]
|-
| up_value || text || YES || [None]
|}


##### Table: watchlist <a name="wiki.watchlist"></a>  
<span id="wiki.watchlist"></span>
=== Table: watchlist ===


| Column Name | Type | Not Null | Default | Description |
None
| --- | --- | --- | --- | --- |
| wl_id | int4 | False | None |  |
| wl_namespace | int4 | False | None |  |
| wl_notificationtimestamp | timestamptz | False | None |  |
| wl_title | text | False | None |  |
| wl_user | int4 | False | None |  |


##### Table: watchlist_expiry <a name="wiki.watchlist_expiry"></a>
{| class="wikitable"  
|+ Columns in "watchlist"
|-
! Name !! Type !! Nullable !! Documentation
|-
| wl_id || integer || NO || [None]
|-
| wl_namespace || integer || NO || [None]
|-
| wl_notificationtimestamp || timestamp with time zone || YES || [None]
|-
| wl_title || text || NO || [None]
|-
| wl_user || integer || NO || [None]
|}


| Column Name | Type | Not Null | Default | Description |
<span id="wiki.watchlist_expiry"></span>
| --- | --- | --- | --- | --- |
=== Table: watchlist_expiry ===
| we_expiry | timestamptz | False | None |  |
| we_item | int4 | False | None |  |


None


</markdown>
{| class="wikitable"
<!-- END GENERATED CONTENT -->
|+ Columns in "watchlist_expiry"
|-
! Name !! Type !! Nullable !! Documentation
|-
| we_expiry || timestamp with time zone || NO || [None]
|-
| we_item || integer || NO || [None]
|}

Latest revision as of 05:34, 16 March 2024

The database is large, complex and relational with a lot of entities describing many facets of ROV operations, measurements and observations.

Notes About Specific Entities

These notes about specific entities complement the generated documentation below.

rov.dive and rov.transect

Dives represent the span of time during which an ROV, submersible or drop camera is in the water, but may also represent the time during which the instruments are operating. In cases when the instrument data are contained entirely within the time span logged by the operator, the times are recorded unchanged. When the instrument data extend beyond the recorded times of the dive, they may be extended. Occasionally, the operator will record an erroneous time, or omit a time altogether. The instrument times can help to reconstruct this history. Dives also relate to important configuration information, objectives, crew and operational notes.

Transects are defined by their start and end times, contained entirely within dives and do not cross the boundaries between dives. They do not have any related entities and function mainly as accounting items. However, they are extremely important in the analysis of observations and measurements collected during the dive. For example, if one is calculating the density of a particular population of organisms, one must know the precise geographic extent of the region. Transects accomplish this and store objectives and operational notes.

In instances where the times of transects are not recorded, or lost, they can sometimes be reconstructed from status events in the observation record (e.g., a VideoMiner database may have transect start/end events). Otherwise, they are not recorded at all. Ideally, transect records are present and their start and end times are recorded without modification, so long as they are reasonable (i.e., the end time occurs after the start time).

Generated Documentation

Database entity documentation is generated from the production database by the script, db_generate_docs.py. The script outputs a file whose contents can be copied into this page after the <!-- BEGIN GENERATED CONTENT --> tag.

The documentation is arranged into conceptual groupings with the following structure.

  • Schema
    • Table
    • Materialized View
    • View

System and Django tables aren't included. The ID column of each table is also excluded.

Database Comments

Documentation resides in the database itself, in the form of comments on the relations and columns. Documentations can be created by executing SQL statements in the form,

   COMMENT ON SHCEMA [schema] IS 'This is a schema comment.'
   COMMENT ON TABLE [schema].[table name] IS 'This is a table comment.'
   COMMENT ON COLUMN [schema].[table name].[column name] IS 'This is a column comment.'

Comments are managed using DDL, as described on the Database Upgrades page.

Generated Entity Documentation

Note: this page is auto-generated from the documentation comments in the actual database. Do not edit it directly.

Schema: inaturalist

Stores data from the iNaturalist taxonomy catalogue.

Table: observation

Stores observations from the iNaturalist species guide. TODO: This table isn't linked to the taxon table by a foreign key relation because the taxon ID is not unique in this table.

Columns in "observation"
Name Type Nullable Documentation
captive_cultivated boolean YES True, if the observation is of a captive or farmed organism.
common_name character varying YES The common name of the organism.
coordinates_obscured boolean YES Indicates whether the coordinate is obscured for the public.
created_at timestamp with time zone YES The time of creation of the record.
description text YES A description of the observation.
geoprivacy character varying YES Set to private if the record is not public. TODO: Other values?
iconic_taxon_name character varying YES Grouping by arbitrary taxonomic level.
image_url text YES A URL for an image of the observation.
latitude real YES The latitude of the observation.
license character varying YES The license applied to the record.
longitude real YES The longitude of the observation.
num_identification_agreements smallint YES The number of votes for the identifaction.
num_identification_disagreements smallint YES Number of votes against the identification.
oauth_application_id character varying YES The ID of an OAUTH application used to modify the record.
observed_on date YES The time of observation. Created by combining the observed_on and time_observed_at and time_zone fields.
place_guess character varying YES The informal name of the site of the observation.
positional_accuracy integer YES The positional accuracy of the observation position (m).
positioning_device character varying YES The device used to collect the position.
positioning_method character varying YES The positioning method.
public_positional_accuracy integer YES The positional accuracy of the position showed to the public (m).
quality_grade character varying YES The quality of the report. 'research' indicates that the record is authoritative.
scientific_name character varying YES The scientific name given to the observation.
sound_url text YES A URL for a sound file for the record.
species_guess character varying YES A guess at the species name.
tag_list jsonb YES A list of tags associated with the observation. Represented as a JSON list.
taxon_class_name character varying YES The name of the taxon's class.
taxon_family_name character varying YES The family of the taxon.
taxon_form_name character varying YES The form of the taxon.
taxon_genus_name character varying YES The genus of the taxon.
taxon_genushybrid_name character varying YES The hybrid genus of the taxon.
taxon_geoprivacy character varying YES The privacy setting of the taxon. 'open' or 'obscured'.
taxon_hybrid_name character varying YES The hybrid name of the taxon.
taxon_id integer NO The iNaturalist taxon ID.
taxon_kingdom_name character varying YES The taxon' kingdom.
taxon_order_name character varying YES The order of the taxon.
taxon_phylum_name character varying YES The taxon phylum.
taxon_species_name character varying YES The species of the taxon.
taxon_subclass_name character varying YES The taxon's subclass.
taxon_subfamily_name character varying YES The subfamily of the taxon.
taxon_suborder_name character varying YES The suborder of a taxon.
taxon_subphylum_name character varying YES The taxon subphylum.
taxon_subspecies_name character varying YES The subspecies of the taxon.
taxon_subtribe_name character varying YES The subtribe of the taxon.
taxon_superclass_name character varying YES The taxon superclass.
taxon_superfamily_name character varying YES The taxon's superfamily.
taxon_superorder_name character varying YES The superorder of the taxon.
taxon_supertribe_name character varying YES The supertribe of the taxon.
taxon_tribe_name character varying YES The tribe of the taxon.
taxon_variety_name character varying YES The variety name of the taxon.
updated_at timestamp with time zone YES The time of update of the record.
url text YES A URL pointing to the online record.
user_id integer YES The ID of the iNaturalist user.
user_login character varying YES The login name of the iNaturalist user.

Schema: intertidal

Stores data for the intertidal database. Contains information about UAS flights, surveys and other derivative data.

Table: quadrat

A record of observations within an intertidal quadrat.

Columns in "quadrat"
Name Type Nullable Documentation
centroid_height real YES The elevation of the corner position in m (ellipsoidal).
centroid_lat double precision YES The corner latitude.
centroid_lon double precision YES The corner longitude.
corner_height1 real YES The elevation of the corner position in m (ellipsoidal).
corner_height2 real YES The elevation of the corner position in m (ellipsoidal).
corner_height3 real YES The elevation of the corner position in m (ellipsoidal).
corner_height4 real YES The elevation of the corner position in m (ellipsoidal).
corner_lat1 double precision YES The corner latitude.
corner_lat2 double precision YES The corner latitude.
corner_lat3 double precision YES The corner latitude.
corner_lat4 double precision YES The corner latitude.
corner_lon1 double precision YES The corner longitude.
corner_lon2 double precision YES The corner longitude.
corner_lon3 double precision YES The corner longitude.
corner_lon4 double precision YES The corner longitude.
created_on timestamp without time zone NO created_on = models.DateTimeField(default = datetime.utcnow, null = False)
flag_number character varying NO The number of the flag used to mark the quadrat. May be non-numeric if necessary.
geom geometry YES A geometry representing either the corners of the quadrat (multipoint) or the centroid.
name character varying NO A unique name for the quadrat.
note text YES An optional note about the quadrat.
survey_id integer NO A reference to the intertidal suvey.
time timestamp without time zone NO The time of the quadrat (UTC).
transect integer NO The transect number. This is an integer corresponding to whatever rubric was chosen for the survey.
zone integer NO The zone number. This is an integer corresponding to whatever rubric was chosen for the survey.

Table: quadrat_observation

Records observations within quadrats. The observation type enumeration is defined in the database export panel.

Columns in "quadrat_observation"
Name Type Nullable Documentation
cell integer YES The quadrat cell, typically from 0 - 100.
count integer YES The number of organisms observed.
coverage real YES The percent coverage by the organism, 0-100. TODO: Not part of the specification.
length real YES The measured length of an organism.
quadrat_id integer NO A link to the quadrat.
surveytaxon_id integer NO A link to the survey taxon.
type integer YES The type of observation; one of quadrat_obs_type.

Table: quadrat_substrate

List substrates observed in intertidal quadrats.

Columns in "quadrat_substrate"
Name Type Nullable Documentation
name character varying NO The name of the substrate.

Table: quadrat_substrate_coverage

Associates quadrat substrate coverages with quadrats.

Columns in "quadrat_substrate_coverage"
Name Type Nullable Documentation
coverage real NO The coverage amount between 0% and 100%.
quadrat_id integer NO A reference to the quadrat.
substrate_id integer NO A reference to the substrate.

Table: survey

Stores metadata about intertidal surveys.

Columns in "survey"
Name Type Nullable Documentation
created_on timestamp without time zone NO The time of creation of this record.
end_date timestamp without time zone YES The end date of the survey.
name character varying NO The name of the survey.
note text YES Notes about the survey.
objective text YES The survey objective.
site_id integer YES Relates the survey to a site entity.
start_date timestamp without time zone NO The start date of the survey.

Table: survey_crew

Associates intertidal survey crew members with roles.

Columns in "survey_crew"
Name Type Nullable Documentation
note text YES An optional note about the survey role.
person_id integer NO A reference to the person with this role.
role_id integer NO A reference to the role.
survey_id integer NO A reference to the survey.

Table: survey_role

A list of roles available to intertidal survey crew members.

Columns in "survey_role"
Name Type Nullable Documentation
name character varying NO The name of the role.
note text YES A note about the role.

Table: survey_taxon

Links taxon records to intertidal surveys.

Columns in "survey_taxon"
Name Type Nullable Documentation
survey_id integer NO A link to the survey.
taxon_id integer NO A link to the taxon record.

Schema: ndst

Contains tables that store transient data loaded from the Dive Logging App so it can be loaded into the ROV database.

Table: cruise

None

Columns in "cruise"
Name Type Nullable Documentation
active boolean NO [None]
created_on timestamp without time zone NO [None]
leg text YES [None]
name text YES [None]
note text YES [None]
objective text YES [None]
row_id text YES [None]
status character varying YES [None]
summary text YES [None]
updated_on timestamp without time zone NO [None]

Table: diveconfig

None

Columns in "diveconfig"
Name Type Nullable Documentation
active boolean NO [None]
name text YES [None]
note text YES [None]
row_id text YES [None]
ship_config text YES [None]
ship_instrument_configs text YES [None]
sub_config text YES [None]
sub_instrument_configs text YES [None]

Table: dives

None

Columns in "dives"
Name Type Nullable Documentation
active boolean NO [None]
cruise_name text YES [None]
dive_config text YES [None]
end_time text YES [None]
leg text YES [None]
name text YES [None]
note text YES [None]
objective text YES [None]
pilot text YES [None]
row_id text YES [None]
site_name text YES [None]
start_time text YES [None]
summary text YES [None]

Table: equipconfig

None

Columns in "equipconfig"
Name Type Nullable Documentation
active boolean NO [None]
configuration text YES [None]
name text YES [None]
note text YES [None]
row_id text YES [None]
short_code text YES [None]
type text YES [None]

Table: equipment

None

Columns in "equipment"
Name Type Nullable Documentation
active boolean NO [None]
brand text YES [None]
instrument_id integer YES [None]
model text YES [None]
note text YES [None]
platform_id integer YES [None]
row_id text YES [None]
serial_number text YES [None]
short_code text YES [None]
short_code_mapped character varying YES An optional mapping from the origin short code to an internal short code. Not unique because multiple source items can map to a single internal item.
type text YES [None]

Table: people

None

Columns in "people"
Name Type Nullable Documentation
active boolean NO [None]
email text YES [None]
first_name text YES [None]
initials text YES [None]
last_name text YES [None]
person_id integer YES [None]
row_id text YES [None]

Table: transects

None

Columns in "transects"
Name Type Nullable Documentation
active boolean NO [None]
cruise_name text YES [None]
dive_name text YES [None]
end_time text YES [None]
leg text YES [None]
name text YES [None]
note text YES [None]
objective text YES [None]
row_id text YES [None]
start_time text YES [None]
summary text YES [None]

Schema: obis

Stores data from the OBIS taxonomy and observation database.

Table: taxon

OBIS taxonomy records imported directly from the OBIS observation data, but filtered for uniqueness on the Aphia ID.

Columns in "taxon"
Name Type Nullable Documentation
aphiaid integer NO [None]
class character varying YES [None]
domain character varying YES [None]
family character varying YES [None]
forma character varying YES [None]
genus character varying YES [None]
gigaclass character varying YES [None]
infraclass character varying YES [None]
infrakingdom character varying YES [None]
infraorder character varying YES [None]
infraphylum character varying YES [None]
kingdom character varying YES [None]
megaclass character varying YES [None]
natio character varying YES [None]
order character varying YES [None]
organismname character varying YES [None]
originalscientificname character varying YES [None]
parvorder character varying YES [None]
parvphylum character varying YES [None]
phylum character varying YES [None]
phylum_division character varying YES [None]
scientificname character varying NO [None]
section character varying YES [None]
series character varying YES [None]
species character varying YES [None]
subclass character varying YES [None]
subfamily character varying YES [None]
subforma character varying YES [None]
subgenus character varying YES [None]
subkingdom character varying YES [None]
suborder character varying YES [None]
subphylum character varying YES [None]
subphylum_subdivision character varying YES [None]
subsection character varying YES [None]
subspecies character varying YES [None]
subterclass character varying YES [None]
subtribe character varying YES [None]
subvariety character varying YES [None]
superclass character varying YES [None]
superdomain character varying YES [None]
superfamily character varying YES [None]
superorder character varying YES [None]
supertribe character varying YES [None]
taxonid character varying YES [None]
taxonomicstatus character varying YES [None]
taxonrank character varying YES [None]
taxonremarks text YES [None]
tribe character varying YES [None]
type character varying YES [None]
variety character varying YES [None]
vernacularname character varying YES [None]

Schema: pa

Stores data about protected areas, including RCAs, parks, etc.

Table: mpa

None

Columns in "mpa"
Name Type Nullable Documentation
aichi_t11 character varying YES [None]
biome character varying YES [None]
comments character varying YES [None]
delisdate integer YES [None]
geom geometry YES [None]
geometry USER-DEFINED YES [None]
gov_type character varying YES [None]
iucn_cat character varying YES [None]
jur_id character varying YES [None]
legisl_e character varying YES [None]
legisl_f character varying YES [None]
loc_e character varying YES [None]
loc_f character varying YES [None]
mgmt_e character varying YES [None]
mgmt_f character varying YES [None]
name_e character varying YES [None]
name_f character varying YES [None]
name_ind character varying YES [None]
o_area double precision YES [None]
objectid bigint NO [None]
oecm character varying YES [None]
ogc_fid integer NO [None]
owner_e character varying YES [None]
owner_f character varying YES [None]
parent_id integer YES [None]
protdate integer YES [None]
shape_area double precision YES [None]
shape_length double precision YES [None]
status_e character varying YES [None]
status_f character varying YES [None]
subs_right character varying YES [None]
type_e character varying YES [None]
type_f character varying YES [None]
url character varying YES [None]
zone_id integer YES [None]
zonedesc_e character varying YES [None]
zonedesc_f character varying YES [None]

Table: mpa_data_object

A data object related to an MPA. This is the abstract, or top-level object, which may contain one or more physical objects (files) or documents.

Columns in "mpa_data_object"
Name Type Nullable Documentation
created_on timestamp without time zone NO The time of creation of the record.
description text YES A description of the object.
doi character varying YES The DOI of the object.
isbn character varying YES The ISBN of the object.
mpa_id integer NO A reference to the MPA record.
name character varying NO The name of the data object.
updated_on timestamp without time zone NO The last update time of the object.

Table: mpa_data_object_file

Gives the ability for more than one data object to own a file and vice versa.

Columns in "mpa_data_object_file"
Name Type Nullable Documentation
data_object_id integer NO A reference to the data object.
file_id integer NO A reference to the file.

Table: protected_area

A unified table for protected areas.

Columns in "protected_area"
Name Type Nullable Documentation
area real YES The nominal area in sq. km of the protected area.
geom geometry NO The boundary geometry of the protected area.
name_e character varying NO The English name of the protected area.
name_f character varying NO The French name of the protected area.
note text YES An optional note about the protected area.
original_id integer YES The original ID of the protected area, from the source database.
type character varying NO The type of protected area, including "RCA", "MPA", etc.
year_created integer YES The year of creation of the protected area.

Table: protected_area_data_object

A data object related to an RCA. This is the abstract, or top-level object, which may contain one or more physical objects (files) or documents.

Columns in "protected_area_data_object"
Name Type Nullable Documentation
created_on timestamp without time zone NO The time of creation of the record.
description text YES A description of the object.
doi character varying YES The DOI of the object.
isbn character varying YES The ISBN of the object.
name character varying NO The name of the data object.
protected_area_id integer YES A link to the protected area.
updated_on timestamp without time zone NO The last update time of the object.

Table: protected_area_data_object_file

Gives the ability for more than one data object to own a file and vice versa.

Columns in "protected_area_data_object_file"
Name Type Nullable Documentation
data_object_id integer NO A reference to the data object.
file_id integer NO A reference to the file.

Table: rca

Stores basic information about RCAs along with a boundary geometry.

Columns in "rca"
Name Type Nullable Documentation
area real YES The area of the RCA (from source).
description text YES A description of the RCA.
formerid smallint YES The former ID of the RCA (from source).
geom geometry YES The RCA geography.
hectares real YES The number of hectares in the RCA (from source).
len real YES The length (?) of the RCA (from source).
name character varying YES The name of the RCA.
rca_id double precision YES The RCA ID as defined by the provider.
sq_km real YES The area of the RCA (from source).
yr_created smallint YES The year the RCA was created (from source).

Schema: rov

The main schema of the ROV database, stores information about all relevant entities including cruise metadata, personnel, dives, transects, equipment configuration, telemetry, water properties and observations.

Table: abundance

Stores a list of abundance labels from the ACFOR scale.

Columns in "abundance"
Name Type Nullable Documentation
name character varying NO A descriptive label for the abundance level.
note text YES An optional note about the abundance level.
rank integer YES A rank used to objectively interpret the abundance label as an ordinal rank. It doesn't matter what the values are so long as they increase monotonically and do not overlap.
short_code character varying NO Contains a short code that can be used to look up an abundance (e.g., during import) without relying on the primary key.
source character varying NO A source label to distinguish abundance labels with the same names. TODO: Provisional, pending determination of how abundance codes are handled.

Table: annotation_protocol

A table to record annotation protocols for annotation projects. Stores information such as the author of the protocol, the observation interval, the medium used and the types of observations to be made.

Columns in "annotation_protocol"
Name Type Nullable Documentation
algae_species character varying YES Whether all algae species are identified: "all", "subset" or "none".
annotation_software_id integer NO Software used to annotate the video or images. Looked up in the annotation software table.
biogenic_habitat boolean YES True if any habitat categories include fauna (e.g., sponge reefs).
created_on timestamp without time zone NO The date of creation of this record.
creator_id integer YES Records the identity of the person who created this protocol.
fish_species character varying YES Whether all fish species are identified: "all", "subset" or "none".
fov_interval real YES [None]
fov_interval_unit character varying NO A unit for the field of view interval, such as 's' for seconds or 'm' for metres.
habitat_interval real YES [None]
habitat_interval_unit character varying NO A unit for the habitat interval, such as 's' for seconds or 'm' for metres.
habitat_only boolean YES Set to true if only habitat variables were recorded.
image_interval real YES The interval between images or frame grabs. Typically 3 to 10 seconds.
image_interval_unit character varying NO A unit for the image interval, such as 's' for seconds or 'm' for metres.
image_overlap boolean YES Is there overlap between the images (true) or do they represent independent non-overlapping space (false).
invertebrate_species character varying YES Whether all invertebrate species are identified: "all", "subset" or "none".
is_template boolean NO If this is meant to be a template that is copied for use, mark this column `true`.
medium_type_id integer NO The type of media used for annotation. Looked up in media type table.
name character varying NO The name of the annotation protocol. Should be unique.
note text YES If only a subset of invert, fish or algae species were identified, note here which groups were the primary focus (target species). For example, benthic fish or corals and sponges. Also for other notes of interest.
observation_interval real YES [None]
observation_interval_unit character varying NO A unit for the observation interval, such as 's' for seconds or 'm' for metres.
protocol_document character varying YES Link, title, DOI, etc. of a document describing the protocol in full.
species_guide character varying YES A URL to the iNaturalist species guide that was used for annotation.
updated_on timestamp without time zone NO The date of update of this record.

Table: annotation_protocol_document

Contains documents related to an annotation protocol. These can be a URL or actual file data. If the file data are present in the database, the URL can still be used to provide the origin of the file, etc.

Columns in "annotation_protocol_document"
Name Type Nullable Documentation
annotation_protocol_id integer NO A reference to the annotation protocol.
created_on timestamp without time zone NO The time of creation of the record.
file_name character varying YES The original name of the document file.
file_type character varying YES The mime type of the file. Required if file data are given.
note text YES An optional note about the document.
title character varying NO The title of the document.
updated_on timestamp without time zone NO The time of update of the record.
url character varying YES An optional URL for the document. If file data are not given, this field is required.

Table: annotation_software

The software used for annotation.

Columns in "annotation_software"
Name Type Nullable Documentation
name character varying NO The name of the annotation software.
note text YES An optional note about the annotation software.
short_code character NO Provides a short code for looking up the entity.

Table: biocover

A lookup table listing the available biocover types for the habitat_event table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity. TODO: Should perhaps refer to the taxon table.

Columns in "biocover"
Name Type Nullable Documentation
name character varying NO The name of the biocover.
note text YES An optional description of the biocover.
short_code character varying NO Contains a short code that can be used to look up a biocover (e.g., during import) without relying on the primary key.

Table: comment_event

Provides a way to record comments rather than using a sparse note field on the event.

Columns in "comment_event"
Name Type Nullable Documentation
event_id integer NO A reference to the parent event.
note text YES A text comment or note.

Table: complexity

A lookup table listing the available habitat complexity types for the habitat_event table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.

Columns in "complexity"
Name Type Nullable Documentation
name character varying NO The name of the complexity type.
note text YES An optional description of the complexity type.
short_code character varying NO Contains a short code that can be used to look up a complexity (e.g., during import) without relying on the primary key.

Table: coverage

A lookup table listing the percentage of coverage for the habitat_event table. The coverages are given as ranges so the text of the level is given in the name field and the values in the min and max fields contain the bounding values.

Columns in "coverage"
Name Type Nullable Documentation
maximum real NO The minimum value in the range.
minimum real NO The minimum value in the range.
name character varying NO A characterization of percent coverage. Presented as a range of percentages.
note text YES An optional note about the coverage percentage.
short_code character varying NO Contains a short code that can be used to look up a coverage (e.g., during import) without relying on the primary key.

Table: cruise

Cruise legs occur within a cruise and are assigned specific crews, scientific programs, etc. A single leg can cover an entire cruise, legs can be spaced end-to-end, or can theoretically overlap. Legs can share members or equipment, and crew members can have specific roles related to a leg. Cruise legs can be created without a scientific program or a cruise because imported data sets may only list the name of the cruise and not indicate whether it was part of a longer cruise.

Columns in "cruise"
Name Type Nullable Documentation
approved integer NO If zero, the record is not approved and should not be shown or used. Currently a non-zero value represents approval, but may be expanded to various levels of approval in the future.
created_on timestamp without time zone NO The date of creation of this record.
end_time timestamp without time zone YES The end time of the leg.
leg integer NO Cruise legs are numbered from 1.
name character varying NO A name for this leg of the cruise.
note text YES Notes about the cruise.
objective text YES A statement of the operational or scientific objectives of the cruise.
planned_track USER-DEFINED YES A multilinestring containing the planned track of the leg. TODO: Not known whether this is necessary.
ship_id integer NO [None]
start_time timestamp without time zone NO The start time of the leg.
summary text YES A summary of the cruise, with information about whether the objectives were met and any other pertinent information.
updated_on timestamp without time zone NO The date of update of this record.

Table: cruise_crew

Associates crew members with a cruise leg and their roles. A crew member can have multiple roles. Note: these roles are distinct from members of programs, such as Chief Scientist. It may be necessary to revisit this structure or the division of roles.

Columns in "cruise_crew"
Name Type Nullable Documentation
cruise_id integer NO Reference to the cruise leg to which the member is assigned.
cruise_role_id integer NO Reference to the cruise role.
note text YES An optional note about the crew member.
person_id integer NO Reference to the person on the crew.

Table: cruise_document

None

Columns in "cruise_document"
Name Type Nullable Documentation
created_on timestamp without time zone NO [None]
cruise_id integer NO [None]
file_name character varying YES [None]
file_type character varying YES [None]
note text YES [None]
title character varying NO [None]
updated_on timestamp without time zone NO [None]
url character varying YES [None]

Table: cruise_fn_contact

A table for associating First Nations contacts with a cruise.

Columns in "cruise_fn_contact"
Name Type Nullable Documentation
contact_name character varying NO The full name of the contact.
cruise_id integer NO A reference to the cruise.
email character varying YES The email address of the contact.
nation text YES The name of the nation or group represented by the contact.
note text YES A note about the contact.
phone character varying YES The phone number of the contact.

Table: cruise_library

This table creates an association between a cruise leg and documents in the library that may be relevant to its research objectives.

Columns in "cruise_library"
Name Type Nullable Documentation
cruiseleg_id integer NO A reference to the cruise leg.
library_id integer NO A reference to the document in the library.
note text YES An optional note about the document with respect to the cruise leg. May be used to reference points of interest in a paper, etc.

Table: cruise_program

A table to link programs and cruises. A cruise can be under the auspices of more than one program or none.

Columns in "cruise_program"
Name Type Nullable Documentation
cruise_id integer NO The ID of a cruise.
program_id integer NO The ID of a program.

Table: cruise_role

A lookup table of roles available to members of cruise leg crews.

Columns in "cruise_role"
Name Type Nullable Documentation
name character varying NO The name of the role.
note text YES An optional note about the role and its responsibilities.
short_code character varying NO [None]

Table: disturbance

Provides a nominal level of disturbance for habitat events.

Columns in "disturbance"
Name Type Nullable Documentation
name character varying NO The textual representation of the disturbance level.
note text YES A note about the disturbance level.
short_code character varying NO Contains a short code that can be used to look up a disturbance (e.g., during import) without relying on the primary key.

Table: dive

A dive is what an ROV does. The dive has a start and end time (not necessarily submerge/resurface), a crew and possibly a name. Transects occur during dives.

Columns in "dive"
Name Type Nullable Documentation
attributes jsonb YES A JSON column used for recording structured attributes that do not fit with the regular table structure.
created_on timestamp without time zone NO The date of creation of this record.
cruise_id integer NO A reference to the cruise leg during which the dive was performed.
end_time timestamp without time zone NO The end of the dive.
name character varying NO A name for the dive.
note text YES An optional note about the dive.
objective text YES A statement of the practical or research objectives for this dive.
ship_config_id integer NO A reference to the platform config for the ship.
site_id integer YES Optional reference to the geographic site of the dive.
start_time timestamp without time zone NO The start of the dive. Not necessarily the time the vehicle is placed in the water.
sub_config_id integer NO A reference to the platform config for the submersible or ROV.
summary text YES A summary of the dive; whether objectives were met, problems encountered, etc.
updated_on timestamp without time zone NO The date of update of this record.

Table: dive_crew

Assigns roles to dive crew members. Crew members are selected from the person.

Columns in "dive_crew"
Name Type Nullable Documentation
dive_id integer NO The dive to which the crew member is assigned.
dive_role_id integer NO A reference to the dive role.
note text YES An optional note about the crew member.
person_id integer NO A reference to the person.

Table: dive_role

A list of roles available to crew members on a dive via the dive_crew table.

Columns in "dive_role"
Name Type Nullable Documentation
name character varying NO The name of the role.
note text YES An optional description of the role.
short_code character varying NO [None]

Table: equipment_type

This is a lookup table to provide the names of types of equipment for the model_equipment_type table, e.g., "Digital Still Camera", "Thermometer," "ROV," etc.

Columns in "equipment_type"
Name Type Nullable Documentation
category USER-DEFINED YES An enumeration column identifying the equipment as platform, instrument or some other type.
name character varying NO A name for the equipment type.
note text YES An optional note about the equipment type.
short_code character varying NO A short code for referencing the equipment type in import documents.

Table: event

The event table is a parent or abstract table that provides properties common to habitat, observation, status and measurement events. Each of those event records must have a reference to one event record. Conceptually, the event row and its child entity row are considered to be one object.

Columns in "event"
Name Type Nullable Documentation
attributes jsonb YES [None]
created_on timestamp without time zone NO The time of creation of this record.
dive_id integer NO A reference to a dive.
end_time timestamp without time zone YES The end time of the event. If the event is instantaneous, this field is null.
frames jsonb YES Preserves the frames from the Biigle annotation.
medium_filename character varying YES The name of the media file from which this event is derived.
medium_id integer YES A reference to the medium on which this annotation was created.
original_id integer NO The original ID of the event if read from a source that has IDs.
original_labels jsonb YES Optionally stores information about annotation labels used to generate this event. For Biigle, stores the label IDs.
shape jsonb YES The shape used for annotations (e.g., Biigle). The coordinates for this shape should have been converted to metres. GeoJSON doesn't support circles, so we use a format that encapsulates the shape type and the raw list of coordinates, something like: { "type": "circle", "shape": [1.0, 1.0, 1.0] } which is a circle with radius 1 at position 1,1. A whole-screen annotation will be a rectangle the size of the screen.
shape_area double precision YES The area of the shape in square metres, calculated from the screenand shape dimensions and the laser point distance.
start_time timestamp without time zone NO The time at the start of the event. If the event is instantaneous, this is the time at which it occurred.
tags jsonb YES Stores a list of tags relevant to this event.
transect_id integer YES An optional reference to a transect. TODO: Clarify the use of transects and whether this column is nullable.

Table: event_logger

This table tracks the people who contributed to annotation, which may be composed of a number of separate labels.

Columns in "event_logger"
Name Type Nullable Documentation
event_id integer NO The event that was created from the annotation(s).
person_id integer NO A person who contributed to the annotation.

Table: habitat_event

The habitat event table records information about the biocover, thickness, substrate and complexity of the habitat. Some survey protocols record the taxon with biocover observations. A reference to the taxon table is provided. This table is a realization of the event table.

Columns in "habitat_event"
Name Type Nullable Documentation
annotation_protocol_id integer NO A reference to the annotation protocol used in the creation of this observation.
biocover_coverage_id integer YES A coverage value for the biocover.
biocover_id integer YES A reference to the biocover lookup.
complexity_id integer YES A reference to the habitat complexity lookup.
disturbance_id integer YES Indicates the level of disturbance of the substrate and/or biota.
event_id integer NO A reference to the parent event.
relief_id integer YES A reference to the relief level.
substrate_coverage_id integer YES A coverage value for the substrate.
substrate_id integer YES A reference to the dominant substrate lookup.
taxon_id integer YES A reference to the taxon used in the creation of this observation.
thickness_id integer YES A reference to the biocover thickness lookup.

Table: image_quality

Nominal image quality levels, originally used by VideoMiner but applicable to new records.

Columns in "image_quality"
Name Type Nullable Documentation
name character varying NO A name for the quality level.
note text YES An optional note.
rank integer YES An ordinal rank (zero is high) for the quality level.
short_code character varying NO Contains a short code that can be used to look up an image quality (e.g., during import) without relying on the primary key.

Table: import_queue_annotator

Stores the import packages created by annotators.

Columns in "import_queue_annotator"
Name Type Nullable Documentation
created_on timestamp without time zone NO The date of creation of the record.
cruise_name character varying NO The name of the cruise to which this record is linked. A lookup is not used because the cruise record may not have been created yet.
data jsonb NO Stores the JSON representation of the import job.
mseauser_id integer NO A reference to the MSEA user that created the record.
name character varying NO A unique name for the import queue record.
note text YES An optional note about the import package.
status character varying YES A short description of the processing status of the job.
updated_on timestamp without time zone NO The date of update of the record.

Table: import_queue_annotator_label_map_prefill

A table to store the last configured tags and values for labels. Provides pre-filling in label mapping application.

Columns in "import_queue_annotator_label_map_prefill"
Name Type Nullable Documentation
created_on timestamp without time zone YES [None]
label_tree_name character varying YES The label tree name. If given identifies the label uniquely with the tree name.
name character varying NO The text of the label.
tag_data jsonb NO The the tag data.
tags jsonb NO The list of tags.
updated_on timestamp without time zone YES [None]

Table: import_queue_pi

Stores the import packages created by principal investigators.

Columns in "import_queue_pi"
Name Type Nullable Documentation
created_on timestamp without time zone NO The date of creation of the record.
cruise_id integer NO A reference to the cruise.
mseauser_id integer NO A reference to the MSEA user that created the record.
name character varying NO A name of the import job
note text YES An optional note about the import package.
status character varying YES A short description of the processing status of the job.
updated_on timestamp without time zone NO The date of update of the record.

Table: instrument

This table represents instruments, which are concrete instances of the types represented in the model table. instruments tend to be things that generate data, be it a thermometer or a camera. For the purposes of this database, an instrument is anything that is not a platform.

Columns in "instrument"
Name Type Nullable Documentation
attributes jsonb YES A freeform list of attributes for this instrument.
created_on timestamp without time zone NO The date of creation of this record.
model_id integer NO A reference to the instrument model.
note text YES An optional note about this instrument.
organisation_id integer NO A reference to the organisation that owns and operates the instrument.
retired date YES If the instrument is retired, this records the retirement date. If null, the instrument is assumed to be active.
serial_number character varying NO The serial number of the instrument. If a serial number is not available, some unique identifier can be substituted. No two instruments of the same model may have the same serial number.
short_code character varying NO Contains a short code that can be used to look up an instrument (e.g., during import) without relying on the primary key.
updated_on timestamp without time zone NO The date of update of this record.

Table: instrument_config

This table records the configuration of an instrument, including settings and its spatial relationship to a parent entity -- another configured vehicle or instrument upon which this instrument is mounted.

Columns in "instrument_config"
Name Type Nullable Documentation
configuration jsonb YES Configuration information about the instrument config.
created_on timestamp without time zone NO The date of creation of this record.
instrument_id integer NO Reference to the instrument targeted by the configuration.
name character varying NO The name of the instrument config. Need not be unique: used to identify the config within the platform config.
note text YES An optional note about this configuration.
platform_config_id integer YES [None]
updated_on timestamp without time zone NO The date of update of this record.

Table: measurement

This table preserves time-stamped measurements generated by instruments. Each measurement has an associated quantity and unit. TODO: At this point multi-part measurement would be stored separately as the ability to store vectors isn't universal across DBMSes.

Columns in "measurement"
Name Type Nullable Documentation
instrument_config_id integer NO The configured instrument used to generate this item.
is_modelled boolean NO A flag to indicate whether the value is derived from measurements by some modelling process.
measurement_type_id integer NO A reference to the type of this measurement.
quantity real NO The scalar quantity or magnitude of the measurement.
signal_quality real YES A quality of the measurement as reported by the instrument. TODO: Requires clarification.
timestamp timestamp without time zone NO The time that the measurement was recorded.

Table: measurement_event

A table for storing human-created measurements.

Columns in "measurement_event"
Name Type Nullable Documentation
event_id integer NO A reference to the parent event.
measurement_type_id integer NO A reference to the measurement type.
quantity real NO The measurement value in the measurement type unit.

Table: measurement_type

This is a lookup table of types of measurement types for the measurement or measurement_event tables. This is fairly open-ended and can represent something like salinity with a specific unit, be it the SI unit or a discipline-specific unit. It is provided to allow users to easily select units for a measurement category when importing data.

Columns in "measurement_type"
Name Type Nullable Documentation
maximum real YES An optional upper bound on the value of the measurement. Null implies no limit.
minimum real YES An optional lower bound on the value of the measurement. Null implies no limit.
name character varying NO The type of measurement. E.g., "Density" or "Salinity."
note text YES An optional note about this measurement type.
short_code character varying NO Contains a short code that can be used to look up a measurement type (e.g., during import) without relying on the primary key.
unit character varying NO The unit. SI units are preferred but not required. The unit selection should probably depend on field-specific idiomatic or cultural preferences.

Table: medium

This table represents videos, photographs or other media. It may store acoustic data in the future. The table is designed with a hierarchical structure to allow the preservation of links between original data and derived (i.e., cropped or otherwise modified) data. For example, if a ten minute segment of a one hour video is extracted, the new segment can be stored with a reference to its parent.

Columns in "medium"
Name Type Nullable Documentation
biigle_video_id integer YES Provisional: the ID of the video as represented in Biigle.de.
created_on timestamp without time zone NO The date of creation of this record.
file_id integer NO A required reference to the file.
geostamp_source_id integer YES The source of the geostamp information on photo or video data. Refers to an instrument, e.g., a GPS.
height integer YES The height of the video frame in pixels.
instrument_config_id integer NO An instrument configuration for the instrument that generated this media.
length real YES If a video or acoustic file (etc.), the length in seconds.
medium_format_id integer YES A reference to the format of the data.
note text YES An optional note about this data.
parent_id integer YES If the video or photo is derived or cropped from another, this refers to the source record (optional).
source_time real YES If this is an extract from a video or a frame grab, indicates the zero-based start time with respect to the source video.
start_time timestamp without time zone NO The start date/time of this video, or the instantaneous time if it's a photograph.
thumbnail bytea YES An optional thumbnail to represent the stored medium.
width integer YES The width of the video frame in pixels.

Table: medium_format

A lookup table for data formats for the medium table. This will include things like video, photo and acoustic. TODO: To be determined whether medium formats should be discriminated more granularly than this. TODO: Should maybe be categorised into video/photo/acoustic/etc. along with things like the format (JPG, MP4, AAC) and possibly more specific encoding parameters.

Columns in "medium_format"
Name Type Nullable Documentation
extensions jsonb NO A list of file extensions that correspond to this medium type. For example, the JPEG image type may have extensions "jpg" or "jpeg" in any case. This list will help applications guess the correct format of a file if it isn't known. Note that more than one media type can have the same extension, so this feature doesn't provide a guaranteed one-to-one mapping. Use it only as a guide.
medium_type_id integer NO A reference to the medium type (e.g., video or photo).
name character varying NO The name of the format.
note text YES An optional note about the format.
short_code character varying NO Contains a short code that can be used to look up a medium format (e.g., during import) without relying on the primary key.

Table: medium_type

A simple lookup to provide media types to the annotation_protocol table. These are not specific media formats (as stored in medium_format), but provided a higher-level distinction.

Columns in "medium_type"
Name Type Nullable Documentation
name character varying NO The name of the media type.
note text YES An optional note about the media type.
short_code character NO Provides a short code for looking up the entity.

Table: model

This table records the brand and model of equipment in the inventory. This data is abstract, which is to say, there is only one record for "GoPro Hero4" but there will be one record for each concrete instance of the model in the instrument table. The model table stores both instruments and platforms.

Columns in "model"
Name Type Nullable Documentation
attributes jsonb YES A free-form JSON field for attributes of this model.
brand_name character varying NO The brand name.
equipment_type_id integer NO A reference to the equipment type.
model_name character varying NO The model name.
note text YES An optional note about the model.

Table: model_documentation

This table creates an association between a model and documentation in the library.

Columns in "model_documentation"
Name Type Nullable Documentation
library_id integer NO A reference to the document in the library.
model_id integer NO A reference to the model.
note text YES An optional note about the document with respect to the cruise leg. May be used to reference points of interest in a paper, etc.

Table: model_equipment_type

This table associates an equipment model with the abstract type of equipment it represents. For example, a GoPro Hero4 is both a digital video camera and a digital still camera. These values are taken from the equipment_type table.

Columns in "model_equipment_type"
Name Type Nullable Documentation
equipment_type_id integer NO The equipment type ID.
model_id integer NO A reference to the model.

Table: observation_category

Observation categories are used by annotation protocols.

Columns in "observation_category"
Name Type Nullable Documentation
name character varying NO The name of the observation category.
note text YES An optional note about the observation category.
short_code character varying NO A short code for referencing the observation category in import documents.

Table: observation_confidence

Provides a nominal observation confidence level for observation events.

Columns in "observation_confidence"
Name Type Nullable Documentation
name character varying NO The textual representation of the confidence level.
note text YES A note about the confidence level.
rank integer NO This field is a way of ranking confidence levels so that an ordering can be established.
short_code character varying NO Contains a short code that can be used to look up a observation confidence (e.g., during import) without relying on the primary key.

Table: observation_event

An observation event records the occurrence of a phenomenon as a result of observation by a human user, usually by analyzing a video recording or photograph. Observations can relate to a species taxonomy or an element in a label tree. This table will be "sparse," that is, certain a value will be given for only one or two columns in each row, and the interpretation of the values will be informed by the information in the annotation protocol table. This table is a realization of the event table.

Columns in "observation_event"
Name Type Nullable Documentation
abundance_id integer YES Link to an abundance level.
annotation_protocol_id integer NO A reference to the annotation protocol used in the creation of this observation.
category character varying YES A free-form category label used for distinguishing types of labels within an annotation project. Useful for flagging records for review.
count integer YES The number of individuals observed. TODO: Interpretation depends on the observation interval as recorded in theannotation protocol table.
coverage_id integer YES Provides an indication of the amount of a scene covered by an organism. Implies habitat forming.
event_id integer NO A reference to the parent event.
observation_confidence_id integer YES References the observation confidence lookup to indicate the user's confidence in the observation.
taxon_id integer YES A reference to the taxon used in the creation of this observation.

Table: orientation

This table preserves time-stamped orientation measurements from instruments. These are interpreted according to a specified type. Ship and ROV orientation will be recorded here, though ships don't ordinarily have an orientation.

Columns in "orientation"
Name Type Nullable Documentation
instrument_config_id integer NO The configured instrument used to generate this item.
is_modelled boolean NO A flag to indicate whether the value is derived from measurements by some modelling process.
orientation jsonb NO The orientation vector.
orientation_type_id integer NO A reference to the orientation type of this orientation.
signal_quality real YES The signal quality of the position as reported by the instrument. TODO: Requires clarification.
timestamp timestamp without time zone NO The time the position was recorded.

Table: orientation_type

These entities describe the interpretation of the orientation vector in the instrument_config and orientation tables. This can be a 3- or 4-element vector representing yaw, pitch roll; Tait-Bryan angles; Euler angles or a Quaternion.

Columns in "orientation_type"
Name Type Nullable Documentation
name character varying NO The name of the orientation type (e.g., "Quaternion").
note text YES An optional note about the orientation type.
short_code character varying NO Contains a short code that can be used to look up an orientation type (e.g., during import) without relying on the primary key.
unit character varying NO The units used to interpret the elements of the vector.

Table: platform

This table maintains the inventory of vehicles, that is, ships and ROVs.

Columns in "platform"
Name Type Nullable Documentation
attributes jsonb YES A freeform list of attributes for this platform.
created_on timestamp without time zone NO The date of creation of this record.
model_id integer NO A reference to the model of the platform.
name character varying NO The name of the platform. If this is a ship, it might be "CCGS Vector" or if it's an ROV, it might be given an arbitrary name by the maintainer.
note text YES An optional note about this platform.
organisation_id integer NO A reference to the organisation that owns and operates the platform.
retired date YES If the platform is retired, this records the date. If null, the platform is assumed to be active.
serial_number character varying YES The serial number of the platform. If this is an ROV it will be the manufacturer's serial number. If it's a vessel, this might be the IMO number. In any case, it must be unique.
short_code character varying NO Contains a short code that can be used to look up a platform (e.g., during import) without relying on the primary key.
updated_on timestamp without time zone NO The date of update of this record.

Table: platform_config

This table stores configuration information about vehicles (ships, ROVs,etc.) used for surveys. All references to vehicles are made through this table rather than directly to the platform table, because the disposition of equipment on the platform is essential to understanding how data has been generated, as well as for simple record-keeping purposes.

Columns in "platform_config"
Name Type Nullable Documentation
configuration jsonb YES The configuration data as a JSON object.
created_on timestamp without time zone NO The date of creation of this record.
note text YES An optional note about the configuration record.
platform_id integer NO A reference to the platform.
updated_on timestamp without time zone NO The date of update of this record.

Table: position

This table preserves time-stamped position measurements from instruments. These can be linear (e.g., UTM) or angular (e.g., Geographic) positions in a specified unit. Ship and ROV positions will be recorded here. TODO: Should this table have a spatial object (point) as well, or be split into two tables, one for absolute georeferenced positions and one for relative positions and orientations?

Columns in "position"
Name Type Nullable Documentation
geom geometry YES The point geometry.
instrument_config_id integer NO The configured instrument used to generate this item.
is_modelled boolean NO A flag to indicate whether the value is derived from measurements by some modelling process.
position_type_id integer NO A reference to the position type of this position.
signal_quality real YES The signal quality of the position as reported by the instrument. TODO: Requires clarification.
timestamp timestamp without time zone NO The time the position was recorded.

Table: position_type

Describes the interpretation of a coordinate vector in the position table. These can be geographic or Cartesian positions or orientations and have defined linear or angular units.

Columns in "position_type"
Name Type Nullable Documentation
name character varying NO The name of the position type. E.g., "Geographic" or "Yaw, Pitch, Roll."
note text YES An optional note about this position type.
short_code character varying NO Contains a short code that can be used to look up a position type (e.g., during import) without relying on the primary key.
unit character varying NO The unit. Linear or angular. E.g., "m" or "radians."

Table: program

This is a listing of scientific programs that can be associated with cruise legs, and gives information about the governorship and funding of specific research activities. Label trees and taxonomies may be associated with programs, since some trees are relevant to specific research objectives and not others. TODO: Currently a lable tree/taxonomy can only be linked to one program. Need to study further.

Columns in "program"
Name Type Nullable Documentation
created_on timestamp without time zone NO The date of creation of this item.
end_date date YES The optional end date of the program.
name character varying NO The name of the program.
note text YES An optional note about the program.
objective character varying YES The objective or mandate of the program.
start_date date NO The starting date of the program.
summary text YES A summary of the program; whether objectives were met, problems encountered, etc.
updated_on timestamp without time zone NO The date of update of this record.

Table: program_library

A table to associate programs with library documents.

Columns in "program_library"
Name Type Nullable Documentation
library_id integer NO A reference to the library item.
program_id integer NO A reference to the program item.

Table: program_member

Assigns user roles to a program.

Columns in "program_member"
Name Type Nullable Documentation
person_id integer NO A reference to the person.
program_id integer NO The reference to the program.
role_id integer NO A reference to the program role.

Table: program_role

Represents the roles a person might perform in respect to a program. A person can be assigned multiple roles within a single program, and multiple people can work on a program with the same role.

Columns in "program_role"
Name Type Nullable Documentation
name character varying NO The name of the role. E.g., "Chief Scientist."
note text YES An optional note about the role.

Table: protocol

This table stores "(survey) protocol" entries from the source data. TODO: Used by events though it's not yet clear if it should stay this way.

Columns in "protocol"
Name Type Nullable Documentation
name character varying NO A name for the survey protocol.
note text YES An optional note about the protocol.
short_code character varying NO Contains a short code that can be used to look up a survey protocol (e.g., during import) without relying on the primary key.

Table: relief

Provides a nominal level of terrain relief for habitat events.

Columns in "relief"
Name Type Nullable Documentation
name character varying NO The textual representation of the relief level.
note text YES A note about the relief level.
short_code character varying NO Contains a short code that can be used to look up a relief (e.g., during import) without relying on the primary key.

Table: status_event

This table records status events with names given by the status_type_detail table. Status events represent a state that changes at some time and persists until another state preempts it. For example, "on bottom" would persist until an "off bottom" event is recorded. A status_event is a specialization of an event.

Columns in "status_event"
Name Type Nullable Documentation
event_id integer NO The associated event.
status_type_detail_id integer NO The detailed status type.

Table: status_type

This is a lookup table for available status types, such as "on bottom" or "off bottom." These are specialized in the status_type_detail table where a note distinguishes different flavours of a given type. For example, there can be multiple types of "Off Transect" events with a different explanation for each.

Columns in "status_type"
Name Type Nullable Documentation
name character varying NO The name of the status event.
note text YES An optional description of the status type.
short_code character varying NO A short code for referencing the status type in import documents.

Table: status_type_detail

This table associates a status type with a status event. The point of this indirection is to allow the addition of detail relative to the status type. For example, there are multiple reasons why an ROV might be "off transect", including that the vehicle has experienced a failure, or the pilot is investigating some interesting object with no research value. The status type value is the discriminator for the event, but the detail adds context the doesn't interfere with it.

Columns in "status_type_detail"
Name Type Nullable Documentation
detail character varying NO The status type detail. This field distinguishes different uses for status types. For example, there can be more than one reason to record an "Off Transect" event.
note text YES Optional extended description of detail.
short_code character varying NO Contains a short code that can be used to look up a status type detail (e.g., during import) without relying on the primary key.
status_type_id integer NO A reference to the status type.

Table: substrate

A lookup table listing the available substrate types for the habitat_event table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.

Columns in "substrate"
Name Type Nullable Documentation
name character varying NO The name of the substrate.
note text YES An optional description of the substrate.
short_code character varying NO Contains a short code that can be used to look up a substrate (e.g., during import) without relying on the primary key.

Table: survey_mode

This table stores "survey mode" entries from the source data. TODO: Used by events though it's not yet clear if it should stay this way.

Columns in "survey_mode"
Name Type Nullable Documentation
name character varying NO The name of the survey mode.
note text YES An optional note about the survey mode.
short_code character varying NO Contains a short code that can be used to look up a survey mode (e.g., during import) without relying on the primary key.

Table: thickness

A lookup table listing the available substrate thicknesses for the habitat_event table. TODO: This table may be altered to provide a hierarchical list of types with increasing specificity.

Columns in "thickness"
Name Type Nullable Documentation
maximum real YES The maximum value in the range.
minimum real YES The minimum value in the range.
name character varying NO A characterization of biocover thickness.
note text YES An optional note about the biocover thickness.
short_code character varying NO Contains a short code that can be used to look up a thickness (e.g., during import) without relying on the primary key.

Table: transect

A transect is a section of a dive during which interesting data are collected. Every transect is associated with a dive.

Columns in "transect"
Name Type Nullable Documentation
attributes jsonb YES A JSON column used for recording structured attributes that do not fit with the regular table structure.
dive_id integer NO A reference to the dive during which this transect occurred.
end_time timestamp without time zone YES The end time of the transect.
name character varying NO The name of the transect.
note text YES An optional note about the transect.
objective text YES A statement of the practical or research objectives for this true.
start_time timestamp without time zone NO The start time of the transect.
summary text YES A summary of the transect; whether objectives were met, problems encountered, etc.

Table: weather_observation

Surface weather observations can be recorded by any crew member aboard a ship during a cruise leg.

Columns in "weather_observation"
Name Type Nullable Documentation
cruise_crew_id integer YES A reference to the cruise leg crew member who is making the report.
cruise_id integer NO A link to the cruise during which this record was recorded.
note text YES An optional note about the observation
pressure real YES The air pressure.
swell character varying YES Description of swell.
temperature real YES The air temperature.
time timestamp without time zone NO An optional note about the weather.
wind_direction real YES The wind direction.
wind_speed real YES The wind speed.

Materialized View: cruise_track

Constructs a geometry for each cruise which describes the path of the ship.

Columns in "cruise_track"
Name Type Nullable Documentation
colour text False The a colour code generated from the cruise's ID used for cartography.
cruise_id integer False The reference to the cruise.
cruise_name text False The cruise name and leg.
geom geometry False The cruise track geometry.
instrument_config_id integer False The reference to the instrument configuration.

Materialized View: depth

A view on the measurements table containing only depths.

Columns in "depth"
Name Type Nullable Documentation
dive_id integer False The ID of the dive during which the depth was measured.
quantity real False [None]
timestamp timestamp(6) without time zone False The timestamp of the record.

Materialized View: dive_track

Constructs a geometry for each dive which describes the path of the submersible.

Columns in "dive_track"
Name Type Nullable Documentation
colour text False The a colour code generated from the cruise's ID. Used for cartography.
cruise_id integer False The reference to the cruise.
cruise_name text False The cruise name.
dive_id integer False The reference to the dive.
dive_name character varying(64) False The dive name.
geom geometry False The dive track geometry.
transect_id integer False The reference to the transect. Zero if there is no corresponding transect.
transect_name character varying(64) False The transect name.

Materialized View: evt_depth

Creates a relation between an event and the depth nearest the start and end times of the event.

Columns in "evt_depth"
Name Type Nullable Documentation
end_diff interval False [None]
end_measurement_id integer False The link to the depth nearest the event's end time, or null if one is not supplied.
event_id integer False The link to the event's's event ID.
start_diff interval False [None]
start_measurement_id integer False The link to the depth nearest the event's start time.

Materialized View: evt_pos

Creates a relation between an event and the positions nearest the start and end times of the event.

Columns in "evt_pos"
Name Type Nullable Documentation
end_diff interval False [None]
end_position_id integer False The link to the position nearest the event's end time, or null if one is not supplied.
event_id integer False The link to the event's's event ID.
start_diff interval False [None]
start_position_id integer False The link to the position nearest the event's start time.

Materialized View: measurement_position

Creates a relation between a measurement and the temporally-nearest position.

Columns in "measurement_position"
Name Type Nullable Documentation
measurement_id integer False The link to the measurement.
position_id integer False The link to the position.

Schema: shared

Stores data that are shared between other schemas, such as personnel information, taxonomy, etc.

Table: db_version

Stores the current database version so that upgrade scripts can perform migrations appropriately.

Columns in "db_version"
Name Type Nullable Documentation
revision integer NO The revision number.
updated_on timestamp without time zone NO The time the upgrade was performed.
version_major integer NO The major version.
version_minor integer NO The minor version number.

Table: file

Stores a record of a file object and its location on disk, along with some metadata. This entity is used by all other entities in all schemas that refer to a file object. This should make it easier to audit file stores and e.g., find duplicates using the hash.

Columns in "file"
Name Type Nullable Documentation
blob_url character varying YES A URL referencing the file in online blob storage. This field is subject to change depending on where the files reside and will change if they're moved.
created_on timestamp without time zone NO The creation time of the file record, not necessarily the file itself (this should be stored in metadata).
description text YES An optional description for the file.
file_type_id integer YES An optional reference to the file type.
hash character varying NO And MD5 hash of the file data. Used to compare files and search for identical versions.
metadata jsonb YES A JSON dictionary containing metadata relating to the file.
name character varying NO The name for the file.
path character varying NO A path of the file, relative to the root directory where files are stored.
updated_on timestamp without time zone NO The update time of the file record, not necessarily the file itself (this should be stored in metadata).

Table: file_type

A list of file types.

Columns in "file_type"
Name Type Nullable Documentation
name character varying NO The name of the file type.
short_code character varying NO A short code for referencing the file type in import documents.

Table: hart_taxon

Species from wherever the Hart codes are from? This table contains records loaded from the VideoMiner species table. This appears to be related to whatever the source of Hart codes is, but at this point VM is the only source. If the name needs to be changed in the future, so be it. Records in this table have a one-to-one relationship with records in the taxon table, and it serves as a metadata table for records stored there.

Columns in "hart_taxon"
Name Type Nullable Documentation
authority text YES The identification authority.
common_name character varying YES The common name.
from_date date YES ?
grouping_id integer YES The grouping. * B - Bird * F - Fish * I - Invertebrate * M - Mammal * O - Object? * R - Reptile
latin_name character varying YES The Latin name of the item, which is distinct in this table from the scientific name. Appears to be informal, and not necessarily Latin.
nodc_code_v7 real YES The NODC code, v7.
nodc_code_v8 integer YES The NODC code, V8. Identical to the ITIS ID.
rank_id integer YES A three-letter code indicating the taxonomic level.
scientific_name character varying YES The scientific (e.g., Linnean) name.
sp_species_code character varying YES Another species code whose purpose/origin is not known.
species_code character varying NO The species, or Hart, code.
species_prov_code character varying YES ?
taxa_reference text YES The reference for the identification.
to_date date YES ?

Table: library

This table stores a partial record of documents, books and papers that can be referenced by other entities. The ISBN and DOI fields are set to unique, but these may vary (in representation, at least) for a single document so care should be taken not to add duplicates. However, updated papers with the same title and author, but different date, are not disallowed.

Columns in "library"
Name Type Nullable Documentation
abstract text YES The abstract of the entry.
authors jsonb YES The (list of) author(s) of the document. This is a JSON list of objects containing whatever information is necessary. Authors should be listed with at least first_name and last_name, and any other relevant information, such as email or institution.
created_on timestamp without time zone YES The creation time of the file record, not necessarily the file itself (this should be stored in metadata).
doi character varying YES The DOI of the document.
file_id integer NO An optional reference to a file.
institution character varying YES The name of the institution or publisher responsible for the document.
isbn character varying YES The ISBN of the book, if it is a book.
issn character varying YES The ISSN of the entry.
keywords jsonb YES A list of keywords relating to the entry.
mendeley_id character varying YES The ID of the record in Mendeley.
publication character varying YES The name of the publication in which the document appeared.
title text NO The title of the book, paper, or other document.
type character varying YES Describes the type of entry: book, article, etc.
updated_on timestamp without time zone YES The update time of the file record, not necessarily the file itself (this should be stored in metadata).
year character varying YES The publishing date of the document.

Table: mseauser

Represents an MSEA user and is linked to a single Django auth User. Stores extra application-related properties such as the Biigle API key.

Columns in "mseauser"
Name Type Nullable Documentation
biigle_api_key character varying YES The Biigle API key.
biigle_username character varying YES The Biigle username.
pg_role character varying YES The name of the PostgreSQL role that the user will use to log in directly to the database.
user_id integer NO A reference to the Django user.

Table: mseauser_restriction

Links an MSEA user to a restriction. The user will have access to records related to this group.

Columns in "mseauser_restriction"
Name Type Nullable Documentation
created_on timestamp without time zone NO The creation time of the record.
mseauser_id integer NO The ID of the MSEA user.
restriction_id integer NO The ID of the restriction.
updated_on timestamp without time zone NO The last update time of the record.

Table: news_item

A table for news items related to each sub-site.

Columns in "news_item"
Name Type Nullable Documentation
content text NO The content of the item.
created_on timestamp without time zone NO The date of creation of the item.
sites character varying YES An optional comma-delimited list of sites the item refers to. The current list is 'rca', 'rov', 'intertidal'. Leave empty to apply to all sites. TODO: Currently not standardized or enforced.
title character varying NO A title for the item.

Table: organisation

Convenient storage for organisations involved in MSEA activities.

Columns in "organisation"
Name Type Nullable Documentation
country character varying NO The code for the country where the organisation is based (e.g., "CA" for Canada).
name character varying NO The full name of the organisation.
note text YES An optional note about the organisation.
short_code character varying NO A short code for looking up the entity; usually the organisation's acronym.

Table: person

Stores information about people involved in all aspects of the application. This is not intended to be a comprehensive duplicate of the individual's HR dossier, just a means of representing a person and providing a means of associating it with a real-world individual, e.g., by their email.

Columns in "person"
Name Type Nullable Documentation
biigle_user_id integer YES The Biigle database ID of a user. The UUID should be used instead.
biigle_uuid character YES The Biigle UUID is used to identify the user in Biigle apps.
bio text YES A brief biography of the person.
email character varying NO Email address.
first_name character varying NO First name.
last_name character varying NO Last name.
photo bytea YES A photo of the person.

Table: restriction

Provides a list of restrictions that can be applied to individual observation rows, to restrict access to allowed roles.

Columns in "restriction"
Name Type Nullable Documentation
created_on timestamp without time zone NO The creation time of the restriction.
name character varying NO The name of the restriction.
note text YES An optional note about the restriction.
short_code character varying NO A short code used to reference the restriction.
updated_on timestamp without time zone NO The last update time of the restriction.

Table: site

Contains the names and geographic boundaries of study sites. This will be useful not only for mapping but for querying data by spatial extent.

Columns in "site"
Name Type Nullable Documentation
name character varying NO A name for the site.
note text YES An optional note about the site.
spatial_library_id integer YES A reference to the spatial library entry.

Table: spatial_library

Maintains a library of spatial data.

Columns in "spatial_library"
Name Type Nullable Documentation
created_on timestamp without time zone NO The time when this record was created.
file_id integer YES A reference to a related file.
geom geometry YES A vector representation of the object(s), projected into WGS84 (lat/lon) and stored as a geography type.
metadata jsonb YES A JSON object containing metadata related to the spatial object.
name character varying NO A name for the entry.
note text YES A note about this library item.
rast bytea YES A raster.
thumbnail bytea YES A small thumbnail in binary (JPG) form.
updated_on timestamp without time zone NO The date of update of this record.

Table: spatial_library_file

Allows a spatial library entity to own more than one file.

Columns in "spatial_library_file"
Name Type Nullable Documentation
file_id integer NO A link to the file.
spatial_library_id integer NO A link to the spatial library.

Table: survey_suggestion

A table of suggestions supplied by users for upgrades to the database.

Columns in "survey_suggestion"
Name Type Nullable Documentation
created_on timestamp without time zone NO [None]
down_votes integer NO A count of the down votes on the suggestion.
email character varying YES The email of the suggesting user.
screen_name character varying YES A screen name for the suggesting user.
suggestion text NO The text of the suggestion.
up_votes integer NO A count of the up votes on the suggestion.

Table: taxon

The taxon table stores information about the identification of observed specimens. A taxon record stores the name of the taxonomic unit (e.g., the species or genus name), or an open nomenclature (ON) identifier using *sp.* or *cf.*; an optional operational taxonomic unit (OTU), and a reference to any known taxa in the Hart, ITIS, iNaturalist or WoRMS databases. The original label stores the name as imported. The label, OTU and Hart code are updated at audit time from the original label and the scientific and common names are updated if available. The auditing process is necessary to produce reasonable data. Some of this work can be performed automatically. Multiple records in this table can refer to the same species or subspecies. It *may or may not be known whether the species referred to by a record are the same or different.* Some amount of auditing will probably be necessary on this table. The contents of this table are driven by observations; it is not populated from existing catalogues but from observations, and the authoritative entity IDs are populated as a post-processing step from existing catalogs. If a match in one of the authoritative catalogue is not found, the relation fields are left empty and the taxon should be audited, to correct spelling or assign a correct identifier.

Columns in "taxon"
Name Type Nullable Documentation
aphia_id integer YES A reference to the WoRMs database. The actual Aphia ID used by WoRMs is used as the primary key in the WoRMs taxon table.
common_name character varying YES The common name of the taxon.
hart_code character varying YES Used when there's not ref in the hart code table.
hart_id integer YES A reference to the Hart code table. This is an identification with species used by VideoMiner and other tools that use that list.
inaturalist_id integer YES A reference to the iNaturalist taxon. The iNaturalist taxon ID is used as the primary key in the iNaturalist taxon table.
label character varying YES The label given to the species at audit time. May be modified from the original label. May differ from the scientific or common names.
original_label character varying NO The original label as entered by the annotator or observer. On review or audit, the label, hart_code and otu fields will be populated and references to outside databases updated. This field will not be edited.
otu character varying YES The operational taxonomic unit is a unique identifier for this instances of an observation whose identification isn't certain.
review_note text YES Optional note about the review.
reviewed_by_id integer YES Relates to the person who reviewed the record.
reviewed_on timestamp without time zone YES Gives the time that the record was reviewed.
scientific_name character varying YES The scientific (binomial, trinomial) name of the taxon. Updated at audit time, based on the label or other fields.

Table: taxon_restriction

Links an MSEA user to a restriction. The user will have access to records related to this group.

Columns in "taxon_restriction"
Name Type Nullable Documentation
created_on timestamp without time zone NO The creation time of the record.
restriction_id integer NO The ID of the restriction.
taxon_id integer NO The ID of the taxon.
updated_on timestamp without time zone NO The last update time of the record.

Table: taxonomic_grouping

Provides a lookup for the taxonomic grouping (Invertebrate, Fish, etc.) Used by VideoMiner.

Columns in "taxonomic_grouping"
Name Type Nullable Documentation
code character YES A one-letter code for the grouping.
name character varying NO The name of the taxonomic grouping.
note text YES A note about the taxonomic grouping.

Table: taxonomic_rank

Provides a lookup for the taxonomic rank (Kingdom, Class, Species, etc.) Used by VideoMiner.

Columns in "taxonomic_rank"
Name Type Nullable Documentation
code character YES A three-letter code for the rank.
name character varying NO The name of the taxonomic rank.
note text YES A note about the taxonomic rank.

Table: uploaded_file

A table to store uploaded files that can be associated with other entities in separate requests. This table is intended to store temporary entities: when an uploaded file has been handled, these records should be deleted.

Columns in "uploaded_file"
Name Type Nullable Documentation
created_on timestamp without time zone NO The time of creation of the record.
expires_on timestamp without time zone NO The expiry time of the file. It may be deleted by a maintenance script after this time.
name character varying NO The original name of the file.
path character varying NO The path to the temporary location of the file.
type character varying NO The guessed MIME type of the file.

Schema: wiki

Stores data related to the Wiki using the standard MediaWiki structure.

Table: actor

None

Columns in "actor"
Name Type Nullable Documentation
actor_id bigint NO [None]
actor_name text NO [None]
actor_user integer YES [None]

Table: archive

None

Columns in "archive"
Name Type Nullable Documentation
ar_actor bigint NO [None]
ar_comment_id bigint NO [None]
ar_deleted smallint NO [None]
ar_id integer NO [None]
ar_len integer YES [None]
ar_minor_edit smallint NO [None]
ar_namespace integer NO [None]
ar_page_id integer YES [None]
ar_parent_id integer YES [None]
ar_rev_id integer NO [None]
ar_sha1 text NO [None]
ar_timestamp timestamp with time zone NO [None]
ar_title text NO [None]

Table: bot_passwords

None

Columns in "bot_passwords"
Name Type Nullable Documentation
bp_app_id text NO [None]
bp_grants text NO [None]
bp_password text NO [None]
bp_restrictions text NO [None]
bp_token text NO [None]
bp_user integer NO [None]

Table: category

None

Columns in "category"
Name Type Nullable Documentation
cat_files integer NO [None]
cat_id integer NO [None]
cat_pages integer NO [None]
cat_subcats integer NO [None]
cat_title text NO [None]

Table: categorylinks

None

Columns in "categorylinks"
Name Type Nullable Documentation
cl_collation text NO [None]
cl_from integer NO [None]
cl_sortkey text NO [None]
cl_sortkey_prefix text NO [None]
cl_timestamp timestamp with time zone NO [None]
cl_to text NO [None]
cl_type text NO [None]

Table: change_tag

None

Columns in "change_tag"
Name Type Nullable Documentation
ct_id integer NO [None]
ct_log_id integer YES [None]
ct_params text YES [None]
ct_rc_id integer YES [None]
ct_rev_id integer YES [None]
ct_tag_id integer NO [None]

Table: change_tag_def

None

Columns in "change_tag_def"
Name Type Nullable Documentation
ctd_count bigint NO [None]
ctd_id integer NO [None]
ctd_name text NO [None]
ctd_user_defined smallint NO [None]

Table: comment

None

Columns in "comment"
Name Type Nullable Documentation
comment_data text YES [None]
comment_hash integer NO [None]
comment_id bigint NO [None]
comment_text text NO [None]

Table: content

None

Columns in "content"
Name Type Nullable Documentation
content_address text NO [None]
content_id bigint NO [None]
content_model smallint NO [None]
content_sha1 text NO [None]
content_size integer NO [None]

Table: content_models

None

Columns in "content_models"
Name Type Nullable Documentation
model_id integer NO [None]
model_name text NO [None]

Table: externallinks

None

Columns in "externallinks"
Name Type Nullable Documentation
el_from integer NO [None]
el_id integer NO [None]
el_index text NO [None]
el_index_60 text NO [None]
el_to text NO [None]
el_to_domain_index text NO [None]
el_to_path text YES [None]

Table: filearchive

None

Columns in "filearchive"
Name Type Nullable Documentation
fa_actor bigint NO [None]
fa_archive_name text YES [None]
fa_bits integer YES [None]
fa_deleted smallint NO [None]
fa_deleted_reason_id bigint NO [None]
fa_deleted_timestamp timestamp with time zone YES [None]
fa_deleted_user integer YES [None]
fa_description_id bigint NO [None]
fa_height integer YES [None]
fa_id integer NO [None]
fa_major_mime text YES [None]
fa_media_type text YES [None]
fa_metadata text YES [None]
fa_minor_mime text YES [None]
fa_name text NO [None]
fa_sha1 text NO [None]
fa_size integer YES [None]
fa_storage_group text YES [None]
fa_storage_key text YES [None]
fa_timestamp timestamp with time zone YES [None]
fa_width integer YES [None]

Table: image

None

Columns in "image"
Name Type Nullable Documentation
img_actor bigint NO [None]
img_bits integer NO [None]
img_description_id bigint NO [None]
img_height integer NO [None]
img_major_mime text NO [None]
img_media_type text YES [None]
img_metadata text NO [None]
img_minor_mime text NO [None]
img_name text NO [None]
img_sha1 text NO [None]
img_size integer NO [None]
img_timestamp timestamp with time zone NO [None]
img_width integer NO [None]

Table: imagelinks

None

Columns in "imagelinks"
Name Type Nullable Documentation
il_from integer NO [None]
il_from_namespace integer NO [None]
il_to text NO [None]

Table: interwiki

None

Columns in "interwiki"
Name Type Nullable Documentation
iw_api text NO [None]
iw_local smallint NO [None]
iw_prefix character varying NO [None]
iw_trans smallint NO [None]
iw_url text NO [None]
iw_wikiid character varying NO [None]

Table: ip_changes

None

Columns in "ip_changes"
Name Type Nullable Documentation
ipc_hex text NO [None]
ipc_rev_id integer NO [None]
ipc_rev_timestamp timestamp with time zone NO [None]

Table: ipblocks

None

Columns in "ipblocks"
Name Type Nullable Documentation
ipb_address text NO [None]
ipb_allow_usertalk smallint NO [None]
ipb_anon_only smallint NO [None]
ipb_auto smallint NO [None]
ipb_block_email smallint NO [None]
ipb_by_actor bigint NO [None]
ipb_create_account smallint NO [None]
ipb_deleted smallint NO [None]
ipb_enable_autoblock smallint NO [None]
ipb_expiry timestamp with time zone NO [None]
ipb_id integer NO [None]
ipb_parent_block_id integer YES [None]
ipb_range_end text NO [None]
ipb_range_start text NO [None]
ipb_reason_id bigint NO [None]
ipb_sitewide smallint NO [None]
ipb_timestamp timestamp with time zone NO [None]
ipb_user integer NO [None]

Table: ipblocks_restrictions

None

Columns in "ipblocks_restrictions"
Name Type Nullable Documentation
ir_ipb_id integer NO [None]
ir_type smallint NO [None]
ir_value integer NO [None]

Table: iwlinks

None

Columns in "iwlinks"
Name Type Nullable Documentation
iwl_from integer NO [None]
iwl_prefix text NO [None]
iwl_title text NO [None]

Table: job

None

Columns in "job"
Name Type Nullable Documentation
job_attempts integer NO [None]
job_cmd text NO [None]
job_id integer NO [None]
job_namespace integer NO [None]
job_params text NO [None]
job_random integer NO [None]
job_sha1 text NO [None]
job_timestamp timestamp with time zone YES [None]
job_title text NO [None]
job_token text NO [None]
job_token_timestamp timestamp with time zone YES [None]

Table: l10n_cache

None

Columns in "l10n_cache"
Name Type Nullable Documentation
lc_key character varying NO [None]
lc_lang text NO [None]
lc_value text NO [None]

Table: langlinks

None

Columns in "langlinks"
Name Type Nullable Documentation
ll_from integer NO [None]
ll_lang text NO [None]
ll_title text NO [None]

Table: linktarget

None

Columns in "linktarget"
Name Type Nullable Documentation
lt_id bigint NO [None]
lt_namespace integer NO [None]
lt_title text NO [None]

Table: log_search

None

Columns in "log_search"
Name Type Nullable Documentation
ls_field text NO [None]
ls_log_id integer NO [None]
ls_value character varying NO [None]

Table: logging

None

Columns in "logging"
Name Type Nullable Documentation
log_action text NO [None]
log_actor bigint NO [None]
log_comment_id bigint NO [None]
log_deleted smallint NO [None]
log_id integer NO [None]
log_namespace integer NO [None]
log_page integer YES [None]
log_params text NO [None]
log_timestamp timestamp with time zone NO [None]
log_title text NO [None]
log_type text NO [None]

Table: module_deps

None

Columns in "module_deps"
Name Type Nullable Documentation
md_deps text NO [None]
md_module text NO [None]
md_skin text NO [None]

Table: objectcache

None

Columns in "objectcache"
Name Type Nullable Documentation
exptime timestamp with time zone NO [None]
flags integer YES [None]
keyname text NO [None]
modtoken character varying NO [None]
value text YES [None]

Table: oldimage

None

Columns in "oldimage"
Name Type Nullable Documentation
oi_actor bigint NO [None]
oi_archive_name text NO [None]
oi_bits integer NO [None]
oi_deleted smallint NO [None]
oi_description_id bigint NO [None]
oi_height integer NO [None]
oi_major_mime text NO [None]
oi_media_type text YES [None]
oi_metadata text NO [None]
oi_minor_mime text NO [None]
oi_name text NO [None]
oi_sha1 text NO [None]
oi_size integer NO [None]
oi_timestamp timestamp with time zone NO [None]
oi_width integer NO [None]

Table: page

None

Columns in "page"
Name Type Nullable Documentation
page_content_model text YES [None]
page_id integer NO [None]
page_is_new smallint NO [None]
page_is_redirect smallint NO [None]
page_lang text YES [None]
page_latest integer NO [None]
page_len integer NO [None]
page_links_updated timestamp with time zone YES [None]
page_namespace integer NO [None]
page_random double precision NO [None]
page_title text NO [None]
page_touched timestamp with time zone NO [None]
titlevector tsvector YES [None]

Table: page_props

None

Columns in "page_props"
Name Type Nullable Documentation
pp_page integer NO [None]
pp_propname text NO [None]
pp_sortkey double precision YES [None]
pp_value text NO [None]

Table: page_restrictions

None

Columns in "page_restrictions"
Name Type Nullable Documentation
pr_cascade smallint NO [None]
pr_expiry timestamp with time zone YES [None]
pr_id integer NO [None]
pr_level text NO [None]
pr_page integer NO [None]
pr_type text NO [None]

Table: pagelinks

None

Columns in "pagelinks"
Name Type Nullable Documentation
pl_from integer NO [None]
pl_from_namespace integer NO [None]
pl_namespace integer NO [None]
pl_title text NO [None]

Table: protected_titles

None

Columns in "protected_titles"
Name Type Nullable Documentation
pt_create_perm text NO [None]
pt_expiry timestamp with time zone NO [None]
pt_namespace integer NO [None]
pt_reason_id bigint NO [None]
pt_timestamp timestamp with time zone NO [None]
pt_title text NO [None]
pt_user integer NO [None]

Table: querycache

None

Columns in "querycache"
Name Type Nullable Documentation
qc_namespace integer NO [None]
qc_title text NO [None]
qc_type text NO [None]
qc_value integer NO [None]

Table: querycache_info

None

Columns in "querycache_info"
Name Type Nullable Documentation
qci_timestamp timestamp with time zone NO [None]
qci_type text NO [None]

Table: querycachetwo

None

Columns in "querycachetwo"
Name Type Nullable Documentation
qcc_namespace integer NO [None]
qcc_namespacetwo integer NO [None]
qcc_title text NO [None]
qcc_titletwo text NO [None]
qcc_type text NO [None]
qcc_value integer NO [None]

Table: recentchanges

None

Columns in "recentchanges"
Name Type Nullable Documentation
rc_actor bigint NO [None]
rc_bot smallint NO [None]
rc_comment_id bigint NO [None]
rc_cur_id integer NO [None]
rc_deleted smallint NO [None]
rc_id integer NO [None]
rc_ip text NO [None]
rc_last_oldid integer NO [None]
rc_log_action text YES [None]
rc_log_type text YES [None]
rc_logid integer NO [None]
rc_minor smallint NO [None]
rc_namespace integer NO [None]
rc_new smallint NO [None]
rc_new_len integer YES [None]
rc_old_len integer YES [None]
rc_params text YES [None]
rc_patrolled smallint NO [None]
rc_source text NO [None]
rc_this_oldid integer NO [None]
rc_timestamp timestamp with time zone NO [None]
rc_title text NO [None]
rc_type smallint NO [None]

Table: redirect

None

Columns in "redirect"
Name Type Nullable Documentation
rd_fragment text YES [None]
rd_from integer NO [None]
rd_interwiki character varying YES [None]
rd_namespace integer NO [None]
rd_title text NO [None]

Table: revision

None

Columns in "revision"
Name Type Nullable Documentation
rev_actor bigint NO [None]
rev_comment_id bigint NO [None]
rev_deleted smallint NO [None]
rev_id integer NO [None]
rev_len integer YES [None]
rev_minor_edit smallint NO [None]
rev_page integer NO [None]
rev_parent_id integer YES [None]
rev_sha1 text NO [None]
rev_timestamp timestamp with time zone NO [None]

Table: revision_comment_temp

None

Columns in "revision_comment_temp"
Name Type Nullable Documentation
revcomment_comment_id bigint NO [None]
revcomment_rev integer NO [None]

Table: searchindex

None

Columns in "searchindex"
Name Type Nullable Documentation
si_page integer NO [None]
si_text text NO [None]
si_title character varying NO [None]

Table: site_identifiers

None

Columns in "site_identifiers"
Name Type Nullable Documentation
si_key text NO [None]
si_site integer NO [None]
si_type text NO [None]

Table: site_stats

None

Columns in "site_stats"
Name Type Nullable Documentation
ss_active_users bigint YES [None]
ss_good_articles bigint YES [None]
ss_images bigint YES [None]
ss_row_id integer NO [None]
ss_total_edits bigint YES [None]
ss_total_pages bigint YES [None]
ss_users bigint YES [None]

Table: sites

None

Columns in "sites"
Name Type Nullable Documentation
site_config text NO [None]
site_data text NO [None]
site_domain character varying NO [None]
site_forward smallint NO [None]
site_global_key text NO [None]
site_group text NO [None]
site_id integer NO [None]
site_language text NO [None]
site_protocol text NO [None]
site_source text NO [None]
site_type text NO [None]

Table: slot_roles

None

Columns in "slot_roles"
Name Type Nullable Documentation
role_id integer NO [None]
role_name text NO [None]

Table: slots

None

Columns in "slots"
Name Type Nullable Documentation
slot_content_id bigint NO [None]
slot_origin bigint NO [None]
slot_revision_id bigint NO [None]
slot_role_id smallint NO [None]

Table: templatelinks

None

Columns in "templatelinks"
Name Type Nullable Documentation
tl_from integer NO [None]
tl_from_namespace integer NO [None]
tl_target_id bigint NO [None]

Table: text

None

Columns in "text"
Name Type Nullable Documentation
old_flags text NO [None]
old_id integer NO [None]
old_text text NO [None]
textvector tsvector YES [None]

Table: updatelog

None

Columns in "updatelog"
Name Type Nullable Documentation
ul_key character varying NO [None]
ul_value text YES [None]

Table: uploadstash

None

Columns in "uploadstash"
Name Type Nullable Documentation
us_chunk_inx integer YES [None]
us_id integer NO [None]
us_image_bits smallint YES [None]
us_image_height integer YES [None]
us_image_width integer YES [None]
us_key character varying NO [None]
us_media_type USER-DEFINED YES [None]
us_mime character varying YES [None]
us_orig_path character varying NO [None]
us_path character varying NO [None]
us_props text YES [None]
us_sha1 character varying NO [None]
us_size integer NO [None]
us_source_type character varying YES [None]
us_status character varying NO [None]
us_timestamp timestamp with time zone NO [None]
us_user integer NO [None]

Table: user

None

Columns in "user"
Name Type Nullable Documentation
user_editcount integer YES [None]
user_email text NO [None]
user_email_authenticated timestamp with time zone YES [None]
user_email_token text YES [None]
user_email_token_expires timestamp with time zone YES [None]
user_id integer NO [None]
user_name text NO [None]
user_newpass_time timestamp with time zone YES [None]
user_newpassword text NO [None]
user_password text NO [None]
user_password_expires timestamp with time zone YES [None]
user_real_name text NO [None]
user_registration timestamp with time zone YES [None]
user_token text NO [None]
user_touched timestamp with time zone NO [None]

Table: user_autocreate_serial

None

Columns in "user_autocreate_serial"
Name Type Nullable Documentation
uas_shard integer NO [None]
uas_value integer NO [None]

Table: user_former_groups

None

Columns in "user_former_groups"
Name Type Nullable Documentation
ufg_group text NO [None]
ufg_user integer NO [None]

Table: user_groups

None

Columns in "user_groups"
Name Type Nullable Documentation
ug_expiry timestamp with time zone YES [None]
ug_group text NO [None]
ug_user integer NO [None]

Table: user_newtalk

None

Columns in "user_newtalk"
Name Type Nullable Documentation
user_id integer NO [None]
user_ip text NO [None]
user_last_timestamp timestamp with time zone YES [None]

Table: user_properties

None

Columns in "user_properties"
Name Type Nullable Documentation
up_property text NO [None]
up_user integer NO [None]
up_value text YES [None]

Table: watchlist

None

Columns in "watchlist"
Name Type Nullable Documentation
wl_id integer NO [None]
wl_namespace integer NO [None]
wl_notificationtimestamp timestamp with time zone YES [None]
wl_title text NO [None]
wl_user integer NO [None]

Table: watchlist_expiry

None

Columns in "watchlist_expiry"
Name Type Nullable Documentation
we_expiry timestamp with time zone NO [None]
we_item integer NO [None]