diff options
Diffstat (limited to 'doc/src/sgml/inherit.sgml')
-rw-r--r-- | doc/src/sgml/inherit.sgml | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/doc/src/sgml/inherit.sgml b/doc/src/sgml/inherit.sgml new file mode 100644 index 00000000000..be2bcfa237f --- /dev/null +++ b/doc/src/sgml/inherit.sgml @@ -0,0 +1,87 @@ +<Chapter> +<Title>Inheritance</Title> + +<Para> + Let's create two classes. The capitals class contains + state capitals which are also cities. Naturally, the + capitals class should inherit from cities. + +<ProgramListing> +CREATE TABLE cities ( + name text, + population float, + altitude int -- (in ft) +); + +CREATE TABLE capitals ( + state char2 +) INHERITS (cities); +</ProgramListing> + + In this case, an instance of capitals <FirstTerm>inherits</FirstTerm> all + attributes (name, population, and altitude) from its + parent, cities. The type of the attribute name is + <Type>text</Type>, a native <ProductName>Postgres</ProductName> type for variable length + ASCII strings. The type of the attribute population is + <Type>float</Type>, a native <ProductName>Postgres</ProductName> type for double precision + floating point numbers. State capitals have an extra + attribute, state, that shows their state. In <ProductName>Postgres</ProductName>, + a class can inherit from zero or more other classes, + and a query can reference either all instances of a + class or all instances of a class plus all of its + descendants. +<Note> +<Para> +The inheritance hierarchy is a actually a directed acyclic graph. +</Para> +</Note> +For example, the following query finds + all the cities that are situated at an attitude of 500ft or higher: + +<ProgramListing> +SELECT name, altitude + FROM cities + WHERE altitude > 500; + ++----------+----------+ +|name | altitude | ++----------+----------+ +|Las Vegas | 2174 | ++----------+----------+ +|Mariposa | 1953 | ++----------+----------+ +</ProgramListing> + +<Para> + On the other hand, to find the names of all cities, + including state capitals, that are located at an altitude + over 500ft, the query is: + +<ProgramListing> +SELECT c.name, c.altitude + FROM cities* c + WHERE c.altitude > 500; +</ProgramListing> + + which returns: + +<ProgramListing> ++----------+----------+ +|name | altitude | ++----------+----------+ +|Las Vegas | 2174 | ++----------+----------+ +|Mariposa | 1953 | ++----------+----------+ +|Madison | 845 | ++----------+----------+ +</ProgramListing> + + Here the <Quote>*</Quote> after cities indicates that the query should + be run over cities and all classes below cities in the + inheritance hierarchy. Many of the commands that we + have already discussed -- <Command>select</Command>, <Command>update</Command> and <Command>delete</Command> -- + support this <Quote>*</Quote> notation, as do others, like <Command>alter</Command>. +</Para> + +</Chapter> |