inherit.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
- <Chapter Id="inherit">
- <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>
- <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>