5.9. ÐаÑледование
Postgres Pro ÑеализÑÐµÑ Ð½Ð°Ñледование ÑаблиÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð¿ÑоекÑиÑовÑиков баз даннÑÑ . (СÑандаÑÑ SQL:1999 и более поздние веÑÑии опÑеделÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ñипов, но ÑÑо во многом оÑлиÑаеÑÑÑ Ð¾Ñ Ñого, ÑÑо опиÑано здеÑÑ.)
ÐавайÑе наÑнÑм Ñо ÑледÑÑÑего пÑимеÑа: пÑедположим, ÑÑо Ð¼Ñ ÑоздаÑм Ð¼Ð¾Ð´ÐµÐ»Ñ Ð´Ð°Ð½Ð½ÑÑ
Ð´Ð»Ñ Ð³Ð¾Ñодов. Ркаждом ÑÑаÑе еÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво гоÑодов, но лиÑÑ Ð¾Ð´Ð½Ð° ÑÑолиÑа. ÐÑ Ñ
оÑим имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð±ÑÑÑÑо полÑÑаÑÑ Ð³Ð¾Ñод-ÑÑолиÑÑ Ð´Ð»Ñ Ð»Ñбого ÑÑаÑа. ÐÑо можно ÑделаÑÑ, Ñоздав две ÑаблиÑÑ: Ð¾Ð´Ð½Ñ Ð´Ð»Ñ ÑÑÐ¾Ð»Ð¸Ñ ÑÑаÑов, а дÑÑгÑÑ Ð´Ð»Ñ Ð³Ð¾Ñодов, не ÑвлÑÑÑиÑ
ÑÑ ÑÑолиÑами. Ðднако ÑÑо делаÑÑ, еÑли нам нÑжно полÑÑиÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ лÑбом гоÑоде, бÑÐ´Ñ Ñо ÑÑолиÑа ÑÑаÑа или неÑ? Ð ÑеÑении ÑÑой пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð½Ð°Ñледование. ÐÑ Ð¾Ð¿Ñеделим ÑаблиÑÑ capitals как наÑледника cities:
CREATE TABLE cities (
name text,
population float,
elevation int -- в ÑÑÑаÑ
);
CREATE TABLE capitals (
state char(2)
) INHERITS (cities); Ð ÑÑом ÑлÑÑае ÑаблиÑа capitals наÑледÑÐµÑ Ð²Ñе ÑÑолбÑÑ Ñвоей ÑодиÑелÑÑкой ÑаблиÑÑ, cities. СÑолиÑÑ ÑÑаÑов Ñакже имеÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй ÑÑÐ¾Ð»Ð±ÐµÑ state, в коÑоÑом бÑÐ´ÐµÑ Ñказан ÑÑаÑ.
Ð Postgres Pro ÑаблиÑа Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑледоваÑÑÑÑ Ð¾Ñ Ð½ÑÐ»Ñ Ð¸Ð»Ð¸ неÑколÑÐºÐ¸Ñ Ð´ÑÑÐ³Ð¸Ñ ÑаблиÑ, а запÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð²ÑбиÑаÑÑ Ð²Ñе ÑÑÑоки ÑодиÑелÑÑкой ÑаблиÑÑ Ð¸Ð»Ð¸ вÑе ÑÑÑоки ÑодиÑелÑÑкой и вÑÐµÑ Ð´Ð¾ÑеÑÐ½Ð¸Ñ ÑаблиÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑинÑÑ Ð¿Ð¾Ñледний ваÑианÑ. ÐапÑимеÑ, ÑледÑÑÑий запÑÐ¾Ñ Ð½Ð°Ð¹Ð´ÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð²ÑÐµÑ Ð³Ð¾Ñодов, вклÑÑÐ°Ñ ÑÑолиÑÑ ÑÑаÑов, ÑаÑположеннÑÑ Ð²ÑÑе 500 ÑÑÑов:
SELECT name, elevation
FROM cities
WHERE elevation > 500;ÐÐ»Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð· Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ (Ñм. Раздел 2.1) он вÑдаÑÑ:
name | elevation -----------+----------- Las Vegas | 2174 Mariposa | 1953 Madison | 845
Ð ÑледÑÑÑий запÑÐ¾Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸Ñ Ð²Ñе гоÑода, коÑоÑÑе не ÑвлÑÑÑÑÑ ÑÑолиÑами ÑÑаÑов, но Ñакже Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð½Ð° вÑÑоÑе вÑÑе 500 ÑÑÑов:
SELECT name, elevation
FROM ONLY cities
WHERE elevation > 500;
name | elevation
-----------+-----------
Las Vegas | 2174
Mariposa | 1953ÐдеÑÑ ÐºÐ»ÑÑевое Ñлово ONLY ÑказÑваеÑ, ÑÑо запÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑименÑÑÑÑÑ ÑолÑко к ÑаблиÑе cities, но не к ÑаблиÑам, ÑаÑположеннÑм ниже cities в иеÑаÑÑ
ии наÑледованиÑ. Ðногие опеÑаÑоÑÑ, коÑоÑÑе Ð¼Ñ Ñже обÑÑдили, â SELECT, UPDATE и DELETE â поддеÑживаÑÑ ÐºÐ»ÑÑевое Ñлово ONLY.
ÐÑ Ñакже можеÑе добавиÑÑ Ð¿Ð¾Ñле имени ÑаблиÑÑ *, ÑÑÐ¾Ð±Ñ Ñвно ÑказаÑÑ, ÑÑо Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÐºÐ»ÑÑаÑÑÑÑ Ð¸ доÑеÑние ÑаблиÑÑ:
SELECT name, elevation
FROM cities*
WHERE elevation > 500; УказÑваÑÑ * не обÑзаÑелÑно, Ñак как ÑепеÑÑ ÑÑо поведение вÑегда подÑазÑмеваеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. Ðднако ÑÐ°ÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð²ÑÑ ÐµÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñо ÑÑаÑÑми веÑÑиÑми, где поведение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð³Ð»Ð¾ бÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾.
РнекоÑоÑÑÑ
ÑиÑÑаÑиÑÑ
бÑÐ²Ð°ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимо ÑзнаÑÑ, из какой ÑаблиÑÑ Ð²ÑбÑана конкÑеÑÐ½Ð°Ñ ÑÑÑока. ÐÐ»Ñ ÑÑого Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе воÑполÑзоваÑÑÑÑ ÑиÑÑемнÑм ÑÑолбÑом tableoid, пÑиÑÑÑÑÑвÑÑÑим в каждой ÑаблиÑе:
SELECT c.tableoid, c.name, c.elevation FROM cities c WHERE c.elevation > 500;
ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²ÑдаÑÑ:
tableoid | name | elevation ----------+-----------+----------- 139793 | Las Vegas | 2174 139793 | Mariposa | 1953 139798 | Madison | 845
(ÐÑли Ð²Ñ Ð¿Ð¾Ð¿ÑÑаеÑеÑÑ Ð²ÑполниÑÑ ÐµÐ³Ð¾ Ñ ÑебÑ, ÑкоÑее вÑего Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе дÑÑгие знаÑÐµÐ½Ð¸Ñ OID.) СобÑÑвенно имена ÑÐ°Ð±Ð»Ð¸Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ, обÑаÑивÑиÑÑ Ðº pg_class:
SELECT p.relname, c.name, c.elevation FROM cities c, pg_class p WHERE c.elevation > 500 AND c.tableoid = p.oid;
в ÑезÑлÑÑаÑе Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе:
relname | name | elevation ----------+-----------+----------- cities | Las Vegas | 2174 cities | Mariposa | 1953 capitals | Madison | 845
Ð¢Ð¾Ñ Ð¶Ðµ ÑÑÑÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ð´ÑÑгим ÑпоÑобом, иÑполÑзÑÑ Ð°Ð»ÑÑеÑнаÑивнÑй Ñип regclass; пÑи ÑÑом OID ÑаблиÑÑ Ð²ÑводиÑÑÑ Ð² ÑимволÑном виде:
SELECT c.tableoid::regclass, c.name, c.elevation FROM cities c WHERE c.elevation > 500;
ÐеÑ
анизм наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ ÑпоÑобен авÑомаÑиÑеÑки ÑаÑпÑеделÑÑÑ Ð´Ð°Ð½Ð½Ñе команд INSERT или COPY по ÑаблиÑам в иеÑаÑÑ
ии наÑледованиÑ. ÐоÑÑÐ¾Ð¼Ñ Ð² наÑем пÑимеÑе ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ INSERT не вÑполниÑÑÑ:
INSERT INTO cities (name, population, elevation, state)
VALUES ('Albany', NULL, NULL, 'NY'); ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ надеÑÑÑÑÑ Ð½Ð° Ñо, ÑÑо даннÑе каким-Ñо обÑазом попадÑÑ Ð² ÑаблиÑÑ capitals, но ÑÑого не пÑоиÑÑ
одиÑ: INSERT вÑегда вÑÑавлÑÐµÑ Ð´Ð°Ð½Ð½Ñе непоÑÑедÑÑвенно в ÑказаннÑÑ ÑаблиÑÑ. РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
добавлÑемÑе даннÑе можно пеÑенапÑавлÑÑÑ, иÑполÑзÑÑ Ð¿Ñавила (Ñм. ÐлавÑ 39). Ðднако в наÑем ÑлÑÑае ÑÑо не поможеÑ, Ñак как ÑаблиÑа cities не ÑодеÑÐ¶Ð¸Ñ ÑÑолбÑа state и команда бÑÐ´ÐµÑ Ð¾ÑвеÑгнÑÑа до пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñавила.
ÐоÑеÑние ÑаблиÑÑ Ð°Ð²ÑомаÑиÑеÑки наÑледÑÑÑ Ð¾Ñ ÑодиÑелÑÑкой ÑаблиÑÑ Ð¾Ð³ÑаниÑениÑ-пÑовеÑки и огÑаниÑÐµÐ½Ð¸Ñ NOT NULL (еÑли ÑолÑко Ð´Ð»Ñ Ð½Ð¸Ñ
не задано Ñвно NO INHERIT). ÐÑе оÑÑалÑнÑе огÑаниÑÐµÐ½Ð¸Ñ (ÑникалÑноÑÑи, пеÑвиÑнÑй клÑÑ Ð¸ внеÑние клÑÑи) не наÑледÑÑÑÑÑ.
ТаблиÑа Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑледоваÑÑÑÑ Ð¾Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑодиÑелÑÑÐºÐ¸Ñ ÑаблиÑ, в ÑÑом ÑлÑÑае она бÑÐ´ÐµÑ Ð¾Ð±ÑединÑÑÑ Ð² Ñебе вÑе ÑÑолбÑÑ ÑÑÐ¸Ñ ÑаблиÑ, а Ñакже ÑÑолбÑÑ, опиÑаннÑе непоÑÑедÑÑвенно в ÐµÑ Ð¾Ð¿Ñеделении. ÐÑли в опÑеделениÑÑ ÑодиÑелÑÑÐºÐ¸Ñ Ð¸ доÑеÑней ÑÐ°Ð±Ð»Ð¸Ñ Ð²ÑÑÑеÑÑÑÑÑ ÑÑолбÑÑ Ñ Ð¾Ð´Ð½Ð¸Ð¼ именем, ÑÑи ÑÑолбÑÑ Ð±ÑдÑÑ Â«Ð¾Ð±ÑединенÑ», Ñак ÑÑо в доÑеÑней ÑаблиÑе окажеÑÑÑ ÑолÑко один ÑÑолбеÑ. ЧÑÐ¾Ð±Ñ Ñакое обÑединение бÑло возможно, ÑÑолбÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй Ñип даннÑÑ , в пÑоÑивном ÑлÑÑае пÑоизойдÑÑ Ð¾Ñибка. ÐаÑледÑемÑе огÑаниÑениÑ-пÑовеÑки и огÑаниÑÐµÐ½Ð¸Ñ NOT NULL обÑединÑÑÑÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñм обÑазом. Так, напÑимеÑ, обÑединÑемÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð¿Ð¾Ð»ÑÑÐ¸Ñ ÑвойÑÑво NOT NULL, еÑли какое-либо из поÑождаÑÑÐ¸Ñ ÐµÐ³Ð¾ опÑеделений Ð¸Ð¼ÐµÐµÑ ÑвойÑÑво NOT NULL. ÐгÑаниÑениÑ-пÑовеÑки обÑединÑÑÑÑÑ, еÑли они имеÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе имена; но еÑли Ð¸Ñ ÑÑÐ»Ð¾Ð²Ð¸Ñ ÑазлиÑаÑÑÑÑ, пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ñибка.
ÐÑноÑение наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÑаблиÑами обÑÑно ÑÑÑанавливаеÑÑÑ Ð¿Ñи Ñоздании доÑеÑней ÑаблиÑÑ Ñ Ð¸ÑполÑзованием пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ INHERITS опеÑаÑоÑа CREATE TABLE. ÐÑÑгой ÑпоÑоб добавиÑÑ Ñакое оÑноÑение Ð´Ð»Ñ ÑаблиÑÑ, опÑеделÑнной подÑ
одÑÑим обÑазом, â иÑполÑзоваÑÑ INHERIT Ñ Ð¾Ð¿ÐµÑаÑоÑом ALTER TABLE. ÐÐ»Ñ ÑÑого бÑдÑÑÐ°Ñ Ð´Ð¾ÑеÑнÑÑ ÑаблиÑа должна Ñже вклÑÑаÑÑ Ñе же ÑÑолбÑÑ (Ñ ÑовпадаÑÑими именами и Ñипами), ÑÑо и ÑодиÑелÑÑÐºÐ°Ñ ÑаблиÑа. Также она должна вклÑÑаÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑе огÑаниÑениÑ-пÑовеÑки (Ñ Ñеми же именами и вÑÑажениÑми). УдалиÑÑ Ð¾ÑноÑение наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ NO INHERIT опеÑаÑоÑа ALTER TABLE. ÐинамиÑеÑкое добавление и Ñдаление оÑноÑений наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ пÑи ÑеализаÑии ÑекÑиониÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ (Ñм. Раздел 5.10).
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑаблиÑÑ, коÑоÑÐ°Ñ Ð·Ð°Ñем Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ð½Ð°Ñледником дÑÑгой, Ñдобно воÑполÑзоваÑÑÑÑ Ð¿Ñедложением LIKE опеÑаÑоÑа CREATE TABLE. Ð¢Ð°ÐºÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑаблиÑÑ Ñ Ñеми же ÑÑолбÑами, ÑÑо имеÑÑÑÑ Ð² иÑÑ
одной. ÐÑли в иÑÑ
одной ÑаблиÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ CHECK, Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑовмеÑÑимой ÑаблиÑÑ Ð¸Ñ
Ñоже нÑжно ÑкопиÑоваÑÑ, и ÑÑо можно ÑделаÑÑ, добавив к пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ LIKE паÑамеÑÑ INCLUDING CONSTRAINTS.
РодиÑелÑÑкÑÑ ÑаблиÑÑ Ð½ÐµÐ»ÑÐ·Ñ ÑдалиÑÑ, пока ÑÑÑеÑÑвÑÑÑ ÑнаÑледованнÑе Ð¾Ñ Ð½ÐµÑ. ÐÑи ÑÑом в доÑеÑниÑ
ÑаблиÑаÑ
нелÑÐ·Ñ ÑдалÑÑÑ Ð¸Ð»Ð¸ модиÑиÑиÑоваÑÑ ÑÑолбÑÑ Ð¸Ð»Ð¸ огÑаниÑениÑ-пÑовеÑки, ÑнаÑледованнÑе Ð¾Ñ ÑодиÑелÑÑкиÑ
ÑаблиÑ. ÐÑли Ð²Ñ Ñ
оÑиÑе ÑдалиÑÑ ÑаблиÑÑ Ð²Ð¼ÐµÑÑе Ñо вÑеми ÐµÑ Ð¿Ð¾Ñомками, ÑÑо легко ÑделаÑÑ, добавив в ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑодиÑелÑÑкой ÑаблиÑÑ Ð¿Ð°ÑамеÑÑ CASCADE (Ñм. Раздел 5.13).
ÐÑи изменениÑÑ
опÑеделений и огÑаниÑений ÑÑолбÑов команда ALTER TABLE ÑаÑпÑоÑÑÑанÑÐµÑ ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð½Ð¸Ð· в иеÑаÑÑ
ии наÑледованиÑ. Ðднако ÑдалиÑÑ ÑÑолбÑÑ, ÑнаÑледованнÑе доÑеÑними ÑаблиÑами, можно ÑолÑко Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа CASCADE. ÐÑи Ñоздании оÑноÑений наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ALTER TABLE ÑледÑÐµÑ Ñем же пÑавилам обÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´ÑблиÑÑÑÑиÑ
ÑÑ ÑÑолбÑов, ÑÑо и CREATE TABLE.
РзапÑоÑаÑ
Ñ Ð½Ð°ÑледÑемÑми ÑаблиÑами пÑовеÑка пÑав доÑÑÑпа вÑполнÑеÑÑÑ ÑолÑко в ÑодиÑелÑÑкой ÑаблиÑе. Так, напÑимеÑ, налиÑие ÑазÑеÑÐµÐ½Ð¸Ñ UPDATE Ð´Ð»Ñ ÑаблиÑÑ cities подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ Ð¿Ñаво на изменение ÑÑÑок и в ÑаблиÑе capitals, когда ÑÑо изменение оÑÑÑеÑÑвлÑеÑÑÑ ÑеÑез cities. Тем ÑамÑм поддеÑживаеÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑÑ Ñого, ÑÑо даннÑе наÑ
одÑÑÑÑ (Ñакже) в ÑодиÑелÑÑкой ÑаблиÑе. Ðо измениÑÑ Ð´Ð°Ð½Ð½Ñе непоÑÑедÑÑвенно в ÑаблиÑе capitals нелÑÐ·Ñ Ð±ÐµÐ· дополниÑелÑного ÑазÑеÑениÑ. ÐÑо пÑавило Ð¸Ð¼ÐµÐµÑ Ð´Ð²Ð° иÑклÑÑÐµÐ½Ð¸Ñ â ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ TRUNCATE и LOCK TABLE, пÑи вÑполнении коÑоÑÑÑ
вÑегда пÑовеÑÑÑÑÑÑ ÑазÑеÑÐµÐ½Ð¸Ñ Ð¸ Ð´Ð»Ñ Ð´Ð¾ÑеÑниÑ
ÑÐ°Ð±Ð»Ð¸Ñ (Ñо еÑÑÑ Ð¿ÑÑмое обÑаÑение к ÑаблиÑам и коÑвенное, ÑеÑез ÑодиÑелÑÑкÑÑ, обÑабаÑÑваÑÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾).
ÐодобнÑм обÑазом, полиÑики заÑиÑÑ Ð½Ð° ÑÑовне ÑÑÑок (Ñм. Раздел 5.7) Ð´Ð»Ñ ÑодиÑелÑÑкой ÑаблиÑÑ Ð¿ÑименÑÑÑÑÑ Ðº ÑÑÑокам, полÑÑаемÑм из доÑеÑÐ½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¿Ñи вÑполнении запÑоÑа Ñ Ð½Ð°Ñледованием. ÐолиÑики же доÑеÑÐ½Ð¸Ñ ÑаблиÑ, еÑли они опÑеделенÑ, дейÑÑвÑÑÑ ÑолÑко когда Ñакие ÑаблиÑÑ Ñвно задейÑÑвÑÑÑÑÑ Ð² запÑоÑе; в ÑÑом ÑлÑÑае вÑе полиÑики, ÑвÑзаннÑе Ñ ÑодиÑелÑÑкими ÑаблиÑами, игноÑиÑÑÑÑÑÑ.
СÑоÑонние ÑаблиÑÑ (Ñм. Раздел 5.11) могÑÑ Ñакже Ð²Ñ Ð¾Ð´Ð¸ÑÑ Ð² иеÑаÑÑ Ð¸Ñ Ð½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ðº ÑодиÑелÑÑкие или доÑеÑние ÑаблиÑÑ, Ñак же, как и обÑÑнÑе. ÐÑли в иеÑаÑÑ Ð¸Ñ Ð½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ Ð¾Ð´Ð¸Ñ ÑÑоÑоннÑÑ ÑаблиÑа, вÑе опеÑаÑии, не поддеÑживаемÑе ей, не бÑдÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ Ð¸ÐµÑаÑÑ Ð¸ÐµÐ¹ в Ñелом.
5.9.1. ÐгÑаниÑениÑ
ÐамеÑÑÑе, ÑÑо не вÑе SQL-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¼Ð¾Ð³ÑÑ ÑабоÑаÑÑ Ñ Ð¸ÐµÑаÑÑ
иÑми наÑледованиÑ. ÐомандÑ, вÑполнÑÑÑие вÑбоÑÐºÑ Ð´Ð°Ð½Ð½ÑÑ
, изменение даннÑÑ
или модиÑикаÑÐ¸Ñ ÑÑ
ÐµÐ¼Ñ (напÑÐ¸Ð¼ÐµÑ SELECT, UPDATE, DELETE, болÑÑинÑÑво ваÑианÑов ALTER TABLE, но не INSERT и ALTER TABLE ... RENAME), обÑÑно по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑабаÑÑваÑÑ Ð´Ð°Ð½Ð½Ñе доÑеÑниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ могÑÑ Ð¸ÑклÑÑаÑÑ Ð¸Ñ
, еÑли поддеÑживаÑÑ Ñказание ONLY. ÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð»Ñ Ð¾Ð±ÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸ наÑÑÑойки Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
(напÑÐ¸Ð¼ÐµÑ REINDEX и VACUUM) обÑÑно ÑабоÑаÑÑ ÑолÑко Ñ Ð¾ÑделÑнÑми ÑизиÑеÑкими ÑаблиÑами и не поддеÑживаÑÑ ÑекÑÑÑивнÑÑ Ð¾Ð±ÑабоÑÐºÑ Ð¾ÑноÑений наÑледованиÑ. СооÑвеÑÑÑвÑÑÑее поведение каждой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð¿Ð¸Ñано в ÐµÑ ÑпÑавке (ÐÐ¾Ð¼Ð°Ð½Ð´Ñ SQL).
ÐозможноÑÑи наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÑеÑÑÑзно огÑаниÑÐµÐ½Ñ Ñем, ÑÑо индекÑÑ (вклÑÑÐ°Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи) и огÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑÐ½Ð¸Ñ ÐºÐ»ÑÑей оÑноÑÑÑÑÑ ÑолÑко к оÑделÑнÑм ÑаблиÑам, но не к Ð¸Ñ Ð¿Ð¾Ñомкам. ÐÑо каÑаеÑÑÑ Ð¾Ð±ÐµÐ¸Ñ ÑÑоÑон огÑаниÑений внеÑÐ½Ð¸Ñ ÐºÐ»ÑÑей. Таким обÑазом, пÑимениÑелÑно к наÑÐµÐ¼Ñ Ð¿ÑимеÑÑ:
ÐÑли Ð¼Ñ Ð¾Ð±ÑÑвим
cities.nameÑ Ð¾Ð³ÑаниÑениемUNIQUEилиPRIMARY KEY, ÑÑо не помеÑÐ°ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð² ÑаблиÑÑcapitalsÑÑÑоки Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми гоÑодов, Ñже ÑÑÑеÑÑвÑÑÑими в ÑаблиÑеcities. Ð ÑÑи дÑблиÑÑÑÑиеÑÑ ÑÑÑоки по ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÑдÑÑ Ð²ÑводиÑÑÑÑ Ð² ÑезÑлÑÑаÑе запÑоÑов кcities. Ðа деле ÑаблиÑаcapitalsпо ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¾Ð¾Ð±Ñе не бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¾Ð³ÑаниÑение ÑникалÑноÑÑи, Ñак ÑÑо в ней могÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÑколÑко ÑÑÑок Ñ Ð¾Ð´Ð½Ð¸Ð¼ названием. ХоÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð²capitalsÑооÑвеÑÑÑвÑÑÑее огÑаниÑение, но ÑÑо не пÑедоÑвÑаÑÐ¸Ñ Ð´ÑблиÑование пÑи обÑединении Ñcities.ÐодобнÑм обÑазом, еÑли Ð¼Ñ Ñкажем, ÑÑо
cities.nameÑÑÑлаеÑÑÑ (REFERENCES) на какÑÑ-Ñо дÑÑгÑÑ ÑаблиÑÑ, ÑÑо огÑаниÑение не бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки ÑаÑпÑоÑÑÑанено наcapitals. Ð ÑÑом ÑлÑÑае ÑеÑением Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ñвное добавление Ñакого же огÑаниÑениÑREFERENCESв ÑаблиÑÑcapitals.ÐÑли Ð²Ñ ÑделаеÑе, ÑÑÐ¾Ð±Ñ ÑÑÐ¾Ð»Ð±ÐµÑ Ð´ÑÑгой ÑаблиÑÑ ÑÑÑлалÑÑ Ð½Ð°
cities(name), в ÑÑом ÑÑолбÑе можно бÑÐ´ÐµÑ ÑказÑваÑÑ ÑолÑко Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð³Ð¾Ñодов, но не ÑÑолиÑ. Ð ÑÑом ÑлÑÑае Ñ Ð¾ÑоÑего ÑеÑÐµÐ½Ð¸Ñ Ð½ÐµÑ.
ÐекоÑоÑÐ°Ñ ÑÑнкÑионалÑноÑÑÑ, не ÑÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð´Ð»Ñ Ð¸ÐµÑаÑÑ Ð¸Ð¹ наÑледованиÑ, Ñеализована Ð´Ð»Ñ Ð´ÐµÐºÐ»Ð°ÑаÑивного ÑекÑиониÑованиÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑзаÑелÑно взвеÑÑÑе вÑе за и пÑоÑив, пÑежде Ñем пÑименÑÑÑ Ð² ÑÐ²Ð¾Ð¸Ñ Ð¿ÑиложениÑÑ ÑекÑиониÑование Ñ Ð¸ÑполÑзованием ÑÑÑаÑевÑего наÑледованиÑ.