arctic-species-portal/data_architecture_may2025.md
Magnus Smari Smarason 7c3d65dadf
Some checks failed
Build, Lint, and Deploy Arctic Species Portal / test-and-build (push) Failing after 1m0s
Build, Lint, and Deploy Arctic Species Portal / deploy (push) Has been skipped
Fixed CRUD operations for CITES listings, common names, and IUCN assessments. Added admin routes and authentication context. Updated UI components and added new pages for admin functionalities.
2025-05-17 20:58:29 +00:00

13 KiB

Supabase Database Schema (Arctic Species)

This document outlines the data architecture of the Arctic Species Supabase database.

Tables

The database contains the following tables:

  • catch_records
  • cites_listings
  • cites_trade_records
  • common_names
  • conservation_measures
  • distribution_ranges
  • iucn_assessments
  • profiles
  • species
  • species_threats
  • subpopulations
  • timeline_events

Table Structures

Below is a preliminary structure for each table, inferred by querying a single record.


species

Column Name Data Type (Inferred) Notes
id UUID Primary Key
scientific_name TEXT Scientific name of the species
common_name TEXT Common name of the species
kingdom TEXT Taxonomic kingdom
phylum TEXT Taxonomic phylum
class TEXT Taxonomic class
order_name TEXT Taxonomic order
family TEXT Taxonomic family
genus TEXT Taxonomic genus
species_name TEXT Specific epithet
authority TEXT Authority who named the species
sis_id INTEGER Species Information Service ID (IUCN)
created_at TIMESTAMP WITH TIME ZONE Timestamp of record creation
inaturalist_id INTEGER iNaturalist taxon ID (nullable)
default_image_url TEXT URL for a default image (nullable)
description TEXT General description (nullable)
habitat_description TEXT Description of habitat (nullable)
population_trend TEXT Population trend (e.g., decreasing, stable) (nullable)
population_size TEXT Estimated population size (nullable)
generation_length TEXT Generation length in years (nullable)
movement_patterns TEXT Description of movement patterns (nullable)
use_and_trade TEXT Information on use and trade (nullable)
threats_overview TEXT Overview of threats (nullable)
conservation_overview TEXT Overview of conservation efforts (nullable)

catch_records

Column Name Data Type (Inferred) Notes
id INTEGER Primary Key
species_id UUID Foreign Key referencing species.id
country TEXT Country where the catch was recorded
year INTEGER Year of the catch record
area TEXT Specific area of catch (nullable)
catch_total INTEGER Total catch amount
quota INTEGER Catch quota, if applicable (nullable)
source TEXT Source of the catch data (e.g., NAMMCO)
created_at TIMESTAMP WITH TIME ZONE Timestamp of record creation

cites_listings

Column Name Data Type (Inferred) Notes
id UUID Primary Key
species_id UUID Foreign Key referencing species.id
appendix TEXT CITES Appendix (e.g., I, II, III)
listing_date DATE Date the species was listed on the appendix
notes TEXT Notes regarding the CITES listing (nullable)
is_current BOOLEAN Indicates if the listing is current

cites_trade_records

Column Name Data Type (Inferred) Notes
id UUID Primary Key
species_id UUID Foreign Key referencing species.id
record_id TEXT Unique ID for the trade record
year INTEGER Year the trade occurred
appendix TEXT CITES Appendix at the time of trade
taxon TEXT Scientific name of the taxon in trade
class TEXT Taxonomic class
order_name TEXT Taxonomic order
family TEXT Taxonomic family
genus TEXT Taxonomic genus
term TEXT Description of the traded item (e.g., skins)
quantity FLOAT Quantity of the item traded
unit TEXT Unit of measurement for quantity (nullable)
importer TEXT Importing country code (ISO 2-letter)
exporter TEXT Exporting country code (ISO 2-letter)
origin TEXT Country of origin code (nullable)
purpose TEXT Purpose of trade code (e.g., P for Personal)
source TEXT Source of specimen code (e.g., W for Wild)
reporter_type TEXT E for Exporter, I for Importer
import_permit TEXT Import permit number (nullable)
export_permit TEXT Export permit number (nullable)
origin_permit TEXT Origin permit number (nullable)

common_names

Column Name Data Type (Inferred) Notes
id UUID Primary Key
species_id UUID Foreign Key referencing species.id
name TEXT Common name of the species
language TEXT Language code for the common name (e.g., eng)
is_main BOOLEAN Indicates if this is the primary common name

conservation_measures

Structure for this table could not be determined by querying a single record (the table might be empty or access is restricted in this manner). Further investigation or direct schema inspection is required.


profiles

Structure for this table could not be determined by querying a single record (the table might be empty or access is restricted in this manner). Further investigation or direct schema inspection is required.


distribution_ranges

Structure for this table could not be determined by querying a single record (the table might be empty or access is restricted in this manner). Further investigation or direct schema inspection is required.


iucn_assessments

Column Name Data Type (Inferred) Notes
id UUID Primary Key
species_id UUID Foreign Key referencing species.id
year_published INTEGER Year the IUCN assessment was published
is_latest BOOLEAN Indicates if this is the latest assessment for the species
possibly_extinct BOOLEAN Indicates if the species is possibly extinct
possibly_extinct_in_wild BOOLEAN Indicates if the species is possibly extinct in the wild
status TEXT IUCN Red List status code (e.g., LC, VU, EN)
url TEXT URL to the assessment on the IUCN Red List website
assessment_id INTEGER Unique ID for the assessment from IUCN
scope_code TEXT Code indicating the geographic scope of the assessment
scope_description TEXT Description of the geographic scope (e.g., Europe, Global)

species_threats

Structure for this table could not be determined by querying a single record (the table might be empty or access is restricted in this manner). Further investigation or direct schema inspection is required.


subpopulations

Column Name Data Type (Inferred) Notes
id UUID Primary Key
species_id UUID Foreign Key referencing species.id
scientific_name TEXT Full scientific name including subpopulation
subpopulation_name TEXT Name of the subpopulation
sis_id INTEGER Species Information Service ID (IUCN)
authority TEXT Authority who named the subpopulation (nullable)

timeline_events

Column Name Data Type (Inferred) Notes
id UUID Primary Key
species_id UUID Foreign Key referencing species.id
event_date DATE Date of the event
year INTEGER Year of the event (can be derived from event_date)
event_type TEXT Type of event (e.g., iucn_assessment, cites_listing)
title TEXT Title of the event
description TEXT Description of the event (nullable)
status TEXT Status associated with the event (e.g., LC, Appendix II) (nullable)
source_type TEXT Type of the source table (e.g., iucn_assessments) (nullable)
source_id UUID Foreign Key to the source record (e.g., iucn_assessments.id) (nullable)

Authentication (auth schema)

Supabase provides a built-in authentication system that operates within its own auth schema. This schema is separate from the public schema detailed above but is integral to managing user identities, sessions, and access control.

Key tables typically found in the auth schema include:

  • users: Stores user identity information (e.g., email, phone, password hash, user metadata). Each user is assigned a unique UUID.
  • sessions: Manages active user sessions.
  • instances: Information about authentication instances.
  • refresh_tokens: Stores refresh tokens for maintaining sessions.
  • audit_log_entries: Logs significant authentication events.

While these tables are managed by Supabase, the id from auth.users is commonly used as a foreign key in public schema tables (like profiles) to link user-specific data to their authentication record. For example, a profiles table would typically have a user_id column that references auth.users.id.