# Description of Schema

## Tables
cv
cvterm
cvterm_relationship
cvtermpath
cvtermsynonym
cvterm_dbxref
cvtermprop
dbxrefprop
cvprop
chadoprop

### cv | Top

Comments:
$Id: cv.sql,v 1.37 2007-02-28 15:08:48 briano Exp $
==========================================
Chado cv module
=================================================================
Dependencies:
:import dbxref from general
=================================================================
================================================
TABLE: cv
================================================
A controlled vocabulary or ontology. A cv is composed of cvterms (AKA terms, classes, types, universals - relations and properties are also stored in cvterm) and the relationships between them.

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
cv_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
name | varchar | 255 |  | UNIQUE, NOT NULL, The name of the ontology. This corresponds to the obo-format -namespace-. cv names uniquely identify the cv. In OBO file format, the cv.name is known as the namespace. |
definition | text | 64000 |  | A text description of the criteria for membership of this ontology. |

### Constraints

Type | Fields
--- | ---
NOT NULL | cv_id
NOT NULL | name
UNIQUE | name

### cvterm | Top

Comments:
================================================
TABLE: cvterm
================================================
A term, class, universal or type within an ontology or controlled vocabulary. This table is also used for relations and properties. cvterms constitute nodes in the graph defined by the collection of cvterms and cvterm_relationships.

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
cvterm_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
cv_id | integer | 10 |  | UNIQUE, NOT NULL, The cv or ontology or namespace to which this cvterm belongs. | cv.cv_id
name | varchar | 1024 |  | UNIQUE, NOT NULL, A concise human-readable name or label for the cvterm. Uniquely identifies a cvterm within a cv. |
definition | text | 64000 |  | A human-readable text definition. |
dbxref_id | integer | 10 |  | UNIQUE, NOT NULL, Primary identifier dbxref - The unique global OBO identifier for this cvterm. Note that a cvterm may have multiple secondary dbxrefs - see also table: cvterm_dbxref. | dbxref.dbxref_id
is_obsolete | integer | 10 | 0 | UNIQUE, NOT NULL, Boolean 0=false,1=true; see GO documentation for details of obsoletion. Note that two terms with different primary dbxrefs may exist if one is obsolete. |
is_relationshiptype | integer | 10 | 0 | NOT NULL, Boolean 0=false,1=true relations or relationship types (also known as Typedefs in OBO format, or as properties or slots) form a cv/ontology in themselves. We use this flag to indicate whether this cvterm is an actual term/class/universal or a relation. Relations may be drawn from the OBO Relations ontology, but are not exclusively drawn from there. |

### Indices

Name | Fields
--- | ---
cvterm_idx1 | cv_id
cvterm_idx2 | name
cvterm_idx3 | dbxref_id

### Constraints

Type | Fields
--- | ---
NOT NULL | cvterm_id
NOT NULL | cv_id
FOREIGN KEY | cv_id
NOT NULL | name
NOT NULL | dbxref_id
FOREIGN KEY | dbxref_id
NOT NULL | is_obsolete
NOT NULL | is_relationshiptype
UNIQUE | name, cv_id, is_obsolete
UNIQUE | dbxref_id

### cvterm_relationship | Top

Comments:
A name can mean different things in different contexts; for example "chromosome" in SO and GO. A name should be unique within an ontology or cv. A name may exist twice in a cv, in both obsolete and non-obsolete forms - these will be for different cvterms with different OBO identifiers; so GO documentation for more details on obsoletion. Note that occasionally multiple obsolete terms with the same name will exist in the same cv. If this is a possibility for the ontology under consideration (e.g. GO) then the ID should be appended to the name to ensure uniqueness.
The OBO identifier is globally unique.
================================================
TABLE: cvterm_relationship
================================================
A relationship linking two cvterms. Each cvterm_relationship constitutes an edge in the graph defined by the collection of cvterms and cvterm_relationships. The meaning of the cvterm_relationship depends on the definition of the cvterm R refered to by type_id. However, in general the definitions are such that the statement "all SUBJs REL some OBJ" is true. The cvterm_relationship statement is about the subject, not the object. For example "insect wing part_of thorax".

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
cvterm_relationship_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
type_id | integer | 10 |  | UNIQUE, NOT NULL, The nature of the relationship between subject and object. Note that relations are also housed in the cvterm table, typically from the OBO relationship ontology, although other relationship types are allowed. | cvterm.cvterm_id
subject_id | integer | 10 |  | UNIQUE, NOT NULL, The subject of the subj-predicate-obj sentence. The cvterm_relationship is about the subject. In a graph, this typically corresponds to the child node. | cvterm.cvterm_id
object_id | integer | 10 |  | UNIQUE, NOT NULL, The object of the subj-predicate-obj sentence. The cvterm_relationship refers to the object. In a graph, this typically corresponds to the parent node. | cvterm.cvterm_id

### Indices

Name | Fields
--- | ---
cvterm_relationship_idx1 | type_id
cvterm_relationship_idx2 | subject_id
cvterm_relationship_idx3 | object_id

### Constraints

Type | Fields
--- | ---
NOT NULL | cvterm_relationship_id
NOT NULL | type_id
FOREIGN KEY | type_id
NOT NULL | subject_id
FOREIGN KEY | subject_id
NOT NULL | object_id
FOREIGN KEY | object_id
UNIQUE | subject_id, object_id, type_id

### cvtermpath | Top

Comments:
================================================
TABLE: cvtermpath
================================================
The reflexive transitive closure of the cvterm_relationship relation.

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
cvtermpath_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
type_id | integer | 10 |  | UNIQUE, The relationship type that this is a closure over. If null, then this is a closure over ALL relationship types. If non-null, then this references a relationship cvterm - note that the closure will apply to both this relationship AND the OBO_REL:is_a (subclass) relationship. | cvterm.cvterm_id
subject_id | integer | 10 |  | UNIQUE, NOT NULL | cvterm.cvterm_id
object_id | integer | 10 |  | UNIQUE, NOT NULL | cvterm.cvterm_id
cv_id | integer | 10 |  | NOT NULL, Closures will mostly be within one cv. If the closure of a relationship traverses a cv, then this refers to the cv of the object_id cvterm. | cv.cv_id
pathdistance | integer | 10 |  | UNIQUE, The number of steps required to get from the subject cvterm to the object cvterm, counting from zero (reflexive relationship). |

### Indices

Name | Fields
--- | ---
cvtermpath_idx1 | type_id
cvtermpath_idx2 | subject_id
cvtermpath_idx3 | object_id
cvtermpath_idx4 | cv_id

### Constraints

Type | Fields
--- | ---
NOT NULL | cvtermpath_id
FOREIGN KEY | type_id
NOT NULL | subject_id
FOREIGN KEY | subject_id
NOT NULL | object_id
FOREIGN KEY | object_id
NOT NULL | cv_id
FOREIGN KEY | cv_id
UNIQUE | subject_id, object_id, type_id, pathdistance

### cvtermsynonym | Top

Comments:
================================================
TABLE: cvtermsynonym
================================================
A cvterm actually represents a distinct class or concept. A concept can be refered to by different phrases or names. In addition to the primary name (cvterm.name) there can be a number of alternative aliases or synonyms. For example, "T cell" as a synonym for "T lymphocyte".

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
cvtermsynonym_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
cvterm_id | integer | 10 |  | UNIQUE, NOT NULL | cvterm.cvterm_id
synonym | varchar | 1024 |  | UNIQUE, NOT NULL |
type_id | integer | 10 |  | A synonym can be exact, narrower, or broader than. | cvterm.cvterm_id

### Indices

Name | Fields
--- | ---
cvtermsynonym_idx1 | cvterm_id

### Constraints

Type | Fields
--- | ---
NOT NULL | cvtermsynonym_id
NOT NULL | cvterm_id
FOREIGN KEY | cvterm_id
NOT NULL | synonym
FOREIGN KEY | type_id
UNIQUE | cvterm_id, synonym

### cvterm_dbxref | Top

Comments:
================================================
TABLE: cvterm_dbxref
================================================
In addition to the primary identifier (cvterm.dbxref_id) a cvterm can have zero or more secondary identifiers/dbxrefs, which may refer to records in external databases. The exact semantics of cvterm_dbxref are not fixed. For example: the dbxref could be a pubmed ID that is pertinent to the cvterm, or it could be an equivalent or similar term in another ontology. For example, GO cvterms are typically linked to InterPro IDs, even though the nature of the relationship between them is largely one of statistical association. The dbxref may be have data records attached in the same database instance, or it could be a "hanging" dbxref pointing to some external database. NOTE: If the desired objective is to link two cvterms together, and the nature of the relation is known and holds for all instances of the subject cvterm then consider instead using cvterm_relationship together with a well-defined relation.

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
cvterm_dbxref_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
cvterm_id | integer | 10 |  | UNIQUE, NOT NULL | cvterm.cvterm_id
dbxref_id | integer | 10 |  | UNIQUE, NOT NULL | dbxref.dbxref_id
is_for_definition | integer | 10 | 0 | NOT NULL, A cvterm.definition should be supported by one or more references. If this column is true, the dbxref is not for a term in an external database - it is a dbxref for provenance information for the definition. |

### Indices

Name | Fields
--- | ---
cvterm_dbxref_idx1 | cvterm_id
cvterm_dbxref_idx2 | dbxref_id

### Constraints

Type | Fields
--- | ---
NOT NULL | cvterm_dbxref_id
NOT NULL | cvterm_id
FOREIGN KEY | cvterm_id
NOT NULL | dbxref_id
FOREIGN KEY | dbxref_id
NOT NULL | is_for_definition
UNIQUE | cvterm_id, dbxref_id

### cvtermprop | Top

Comments:
================================================
TABLE: cvtermprop
================================================
Additional extensible properties can be attached to a cvterm using this table. Corresponds to -AnnotationProperty- in W3C OWL format.

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
cvtermprop_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
cvterm_id | integer | 10 |  | UNIQUE, NOT NULL | cvterm.cvterm_id
type_id | integer | 10 |  | UNIQUE, NOT NULL, The name of the property or slot is a cvterm. The meaning of the property is defined in that cvterm. | cvterm.cvterm_id
value | text | 64000 |  | UNIQUE, NOT NULL, The value of the property, represented as text. Numeric values are converted to their text representation. |
rank | integer | 10 | 0 | UNIQUE, NOT NULL, Property-Value ordering. Any cvterm can have multiple values for any particular property type - these are ordered in a list using rank, counting from zero. For properties that are single-valued rather than multi-valued, the default 0 value should be used. |

### Indices

Name | Fields
--- | ---
cvtermprop_idx1 | cvterm_id
cvtermprop_idx2 | type_id

### Constraints

Type | Fields
--- | ---
NOT NULL | cvtermprop_id
NOT NULL | cvterm_id
FOREIGN KEY | cvterm_id
NOT NULL | type_id
FOREIGN KEY | type_id
NOT NULL | value
NOT NULL | rank
UNIQUE | cvterm_id, type_id, value, rank

### dbxrefprop | Top

Comments:
================================================
TABLE: dbxrefprop
================================================
Metadata about a dbxref. Note that this is not defined in the dbxref module, as it depends on the cvterm table. This table has a structure analagous to cvtermprop.

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
dbxrefprop_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
dbxref_id | integer | 10 |  | UNIQUE, NOT NULL | dbxref.dbxref_id
type_id | integer | 10 |  | UNIQUE, NOT NULL | cvterm.cvterm_id
value | text | 64000 |  | NOT NULL |
rank | integer | 10 | 0 | UNIQUE, NOT NULL |

### Indices

Name | Fields
--- | ---
dbxrefprop_idx1 | dbxref_id
dbxrefprop_idx2 | type_id

### Constraints

Type | Fields
--- | ---
NOT NULL | dbxrefprop_id
NOT NULL | dbxref_id
FOREIGN KEY | dbxref_id
NOT NULL | type_id
FOREIGN KEY | type_id
NOT NULL | value
NOT NULL | rank
UNIQUE | dbxref_id, type_id, rank

### cvprop | Top

Comments:
================================================
TABLE: cvprop
================================================
Additional extensible properties can be attached to a cv using this table. A notable example would be the cv version

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
cvprop_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
cv_id | integer | 10 |  | UNIQUE, NOT NULL | cv.cv_id
type_id | integer | 10 |  | UNIQUE, NOT NULL, The name of the property or slot is a cvterm. The meaning of the property is defined in that cvterm. | cvterm.cvterm_id
value | text | 64000 |  | The value of the property, represented as text. Numeric values are converted to their text representation. |
rank | integer | 10 | 0 | UNIQUE, NOT NULL, Property-Value ordering. Any cv can have multiple values for any particular property type - these are ordered in a list using rank, counting from zero. For properties that are single-valued rather than multi-valued, the default 0 value should be used. |

### Constraints

Type | Fields
--- | ---
NOT NULL | cvprop_id
NOT NULL | cv_id
FOREIGN KEY | cv_id
NOT NULL | type_id
FOREIGN KEY | type_id
NOT NULL | rank
UNIQUE | cv_id, type_id, rank

### chadoprop | Top

Comments:
================================================
TABLE: chadoprop
================================================
This table is different from other prop tables in the database, as it is for storing information about the database itself, like schema version

Field Name | Data Type | Size | Default Value | Other | Foreign Key
--- | --- | --- | --- | --- | ---
chadoprop_id | integer | 11 |  | PRIMARY KEY, NOT NULL |
type_id | integer | 10 |  | UNIQUE, NOT NULL, The name of the property or slot is a cvterm. The meaning of the property is defined in that cvterm. | cvterm.cvterm_id
value | text | 64000 |  | The value of the property, represented as text. Numeric values are converted to their text representation. |
rank | integer | 10 | 0 | UNIQUE, NOT NULL, Property-Value ordering. Any cv can have multiple values for any particular property type - these are ordered in a list using rank, counting from zero. For properties that are single-valued rather than multi-valued, the default 0 value should be used. |

### Constraints

Type | Fields
--- | ---
NOT NULL | chadoprop_id
NOT NULL | type_id
FOREIGN KEY | type_id
NOT NULL | rank
UNIQUE | type_id, rank

Created by SQL::Translator 0.11003