3.6. ÐаÑледование #
ÐаÑледование â ÑÑо конÑепÑиÑ, взÑÑÐ°Ñ Ð¸Ð· обÑекÑно-оÑиенÑиÑованнÑÑ Ð±Ð°Ð· даннÑÑ . Ðна оÑкÑÑÐ²Ð°ÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво инÑеÑеÑнÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑей пÑи пÑоекÑиÑовании баз даннÑÑ .
ÐавайÑе Ñоздадим две ÑаблиÑÑ: cities (гоÑода) и capitals (ÑÑолиÑÑ ÑÑаÑов). ÐÑÑеÑÑвенно, ÑÑолиÑÑ ÑÑаÑов Ñакже ÑвлÑÑÑÑÑ Ð³Ð¾Ñодами, поÑÑÐ¾Ð¼Ñ Ð½Ð°Ð¼ нÑжно ÑвнÑм обÑазом добавлÑÑÑ Ð¸Ñ
в ÑезÑлÑÑаÑ, когда Ð¼Ñ Ñ
оÑим пÑоÑмоÑÑеÑÑ Ð²Ñе гоÑода. ÐÑли Ð²Ñ Ð¿ÑоÑвиÑе ÑмекалкÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑедложиÑÑ, напÑимеÑ, Ñакое ÑеÑение:
CREATE TABLE capitals (
name text,
population real,
elevation int, -- (вÑÑоÑа в ÑÑÑаÑ
)
state char(2)
);
CREATE TABLE non_capitals (
name text,
population real,
elevation int -- (вÑÑоÑа в ÑÑÑаÑ
)
);
CREATE VIEW cities AS
SELECT name, population, elevation FROM capitals
UNION
SELECT name, population, elevation FROM non_capitals;Ðно Ð¼Ð¾Ð¶ÐµÑ ÑÑÑÑаиваÑÑ, пока Ð¼Ñ Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÐ¼ даннÑе, но еÑли нам поÑÑебÑеÑÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð½ÐµÑколÑко ÑÑÑок, ÑÑо бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð½ÐµÐºÑаÑиво.
ÐоÑÑÐ¾Ð¼Ñ ÐµÑÑÑ Ð»ÑÑÑее ÑеÑение:
CREATE TABLE cities ( name text, population real, elevation int -- (вÑÑоÑа в ÑÑÑÐ°Ñ ) ); CREATE TABLE capitals ( state char(2) UNIQUE NOT NULL ) INHERITS (cities);
Рданном ÑлÑÑае ÑÑÑока ÑаблиÑÑ capitals наÑледÑÐµÑ Ð²Ñе ÑÑолбÑÑ (name, population и elevation) Ð¾Ñ ÑодиÑелÑÑкой ÑаблиÑÑ cities. СÑÐ¾Ð»Ð±ÐµÑ name Ð¸Ð¼ÐµÐµÑ Ñип text, ÑобÑÑвеннÑй Ñип Postgres Pro Ð´Ð»Ñ ÑекÑÑовÑÑ
ÑÑÑок пеÑеменной длинÑ. Рв ÑаблиÑÑ capitals добавлен дополниÑелÑнÑй ÑÑÐ¾Ð»Ð±ÐµÑ state, в коÑоÑом бÑÐ´ÐµÑ Ñказан бÑквеннÑй код ÑÑаÑа. Ð Postgres Pro ÑаблиÑа Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑледоваÑÑÑÑ Ð¾Ñ Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ неÑколÑкиÑ
дÑÑгиÑ
ÑаблиÑ.
ÐапÑимеÑ, ÑледÑÑÑий запÑÐ¾Ñ Ð²ÑÐ²ÐµÐ´ÐµÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð²ÑÐµÑ Ð³Ð¾Ñодов, вклÑÑÐ°Ñ ÑÑолиÑÑ, Ð½Ð°Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑ Ð²ÑÑе 500 ÑÑÑов над ÑÑовнем моÑÑ:
SELECT name, elevation FROM cities WHERE elevation > 500;
РезÑлÑÑÐ°Ñ ÐµÐ³Ð¾ вÑполнениÑ:
name | elevation -----------+---------- Las Vegas | 2174 Mariposa | 1953 Madison | 845 (3 rows)
Ð ÑледÑÑÑий запÑÐ¾Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸Ñ Ð²Ñе гоÑода, коÑоÑÑе не ÑвлÑÑÑÑÑ ÑÑолиÑами ÑÑаÑов, но Ñакже Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð²ÑÑе 500 ÑÑÑов:
SELECT name, elevation
FROM ONLY cities
WHERE elevation > 500;name | elevation -----------+---------- Las Vegas | 2174 Mariposa | 1953 (2 rows)
ÐдеÑÑ Ñлово ONLY пеÑед названием ÑаблиÑÑ cities ÑказÑваеÑ, ÑÑо запÑÐ¾Ñ ÑледÑÐµÑ Ð²ÑполнÑÑÑ ÑолÑко Ð´Ð»Ñ ÑÑÑок ÑаблиÑÑ cities, не вклÑÑÐ°Ñ ÑаблиÑÑ, ÑнаÑледованнÑе Ð¾Ñ cities. Ðногие опеÑаÑоÑÑ, коÑоÑÑе Ð¼Ñ Ñже обÑÑдили â SELECT, UPDATE и DELETE â поддеÑживаÑÑ Ñказание ONLY.
ÐÑимеÑание
ХоÑÑ Ð½Ð°Ñледование ÑаÑÑо бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, оно не инÑегÑиÑовано Ñ Ð¾Ð³ÑаниÑениÑми ÑникалÑноÑÑи и внеÑними клÑÑами, ÑÑо огÑаниÑÐ¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ пÑименимоÑÑÑ. ÐодÑобнее ÑÑо опиÑÑваеÑÑÑ Ð² Разделе 5.10.