inherit.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. <Chapter Id="inherit">
  2. <Title>Inheritance</Title>
  3. <Para>
  4.      Let's create two classes. The capitals  class  contains
  5.      state  capitals  which  are also cities. Naturally, the
  6.      capitals class should inherit from cities.
  7.      
  8. <ProgramListing>
  9. CREATE TABLE cities (
  10.     name            text,
  11.     population      float,
  12.     altitude        int            -- (in ft)
  13. );
  14. CREATE TABLE capitals (
  15.     state           char2
  16. ) INHERITS (cities);
  17. </ProgramListing>
  18.      In this case, an  instance  of  capitals  <FirstTerm>inherits</FirstTerm>  all
  19.      attributes  (name,  population,  and altitude) from its
  20.      parent, cities.  The type  of  the  attribute  name  is
  21.      <Type>text</Type>,  a  native  <ProductName>Postgres</ProductName>  type  for variable length
  22.      ASCII strings.  The type of the attribute population is
  23.      <Type>float</Type>,  a  native <ProductName>Postgres</ProductName> type for double precision
  24.      floating point numbers.  State capitals have  an  extra
  25.      attribute, state, that shows their state.  In <ProductName>Postgres</ProductName>,
  26.      a  class  can inherit from zero or more other classes,
  27.      and a query can reference either  all  instances  of  a
  28.      class  or  all  instances  of  a  class plus all of its
  29.      descendants. 
  30. <Note>
  31. <Para>
  32. The inheritance hierarchy is a actually a directed acyclic graph.
  33. </Para>
  34. </Note>
  35. For example, the  following  query  finds
  36.      all  the cities that are situated at an attitude of 500ft or higher:
  37.      
  38. <ProgramListing>
  39. SELECT name, altitude
  40.     FROM cities
  41.     WHERE altitude &gt; 500;
  42. +----------+----------+
  43. |name      | altitude |
  44. +----------+----------+
  45. |Las Vegas | 2174     |
  46. +----------+----------+
  47. |Mariposa  | 1953     |
  48. +----------+----------+
  49. </ProgramListing>         
  50. </para>
  51. <Para>
  52.      On the other hand, to find the  names  of  all  cities,
  53.      including  state capitals, that are located at an altitude 
  54.      over 500ft, the query is:
  55. <ProgramListing>
  56. SELECT c.name, c.altitude
  57.     FROM cities* c
  58.     WHERE c.altitude > 500;
  59. </ProgramListing>
  60.      which returns:
  61.      
  62. <ProgramListing>
  63. +----------+----------+
  64. |name      | altitude |
  65. +----------+----------+
  66. |Las Vegas | 2174     |
  67. +----------+----------+
  68. |Mariposa  | 1953     |
  69. +----------+----------+
  70. |Madison   | 845      |
  71. +----------+----------+
  72. </ProgramListing>
  73.      Here the <Quote>*</Quote> after cities indicates that the query should
  74.      be  run over cities and all classes below cities in the
  75.      inheritance hierarchy.  Many of the  commands  that  we
  76.      have  already discussed -- <Command>select</Command>, <Command>update</Command> and <Command>delete</Command> --
  77.      support this <Quote>*</Quote> notation, as do others, like <Command>alter</Command>.
  78. </Para>
  79. </Chapter>