5.1. ÐÑÐ½Ð¾Ð²Ñ ÑÐ°Ð±Ð»Ð¸Ñ #
ТаблиÑа в ÑелÑÑионной базе даннÑÑ Ð¿Ð¾Ñ Ð¾Ð¶Ð° на ÑаблиÑÑ Ð½Ð° бÑмаге: она Ñак же ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· ÑÑÑок и ÑÑолбÑов. ЧиÑло и поÑÑдок ÑÑолбÑов ÑикÑиÑованÑ, а каждÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð¼ÐµÐµÑ Ð¸Ð¼Ñ. ЧиÑло ÑÑÑок пеÑеменно â оно оÑÑÐ°Ð¶Ð°ÐµÑ ÑекÑÑее колиÑеÑÑво Ð½Ð°Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑ Ð² ней даннÑÑ . SQL не даÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð³Ð°ÑанÑий оÑноÑиÑелÑно поÑÑдка ÑÑÑок ÑаблиÑÑ. ÐÑи ÑÑении ÑаблиÑÑ ÑÑÑоки вÑводÑÑÑÑ Ð² пÑоизволÑном поÑÑдке, еÑли ÑолÑко Ñвно не ÑÑебÑеÑÑÑ ÑоÑÑиÑовка. ÐодÑобнее ÑÑо ÑаÑÑмаÑÑиваеÑÑÑ Ð² Ðлаве 7. Ðолее Ñого, SQL не назнаÑÐ°ÐµÑ ÑÑÑокам ÑникалÑнÑе иденÑиÑикаÑоÑÑ, Ñак ÑÑо можно имеÑÑ Ð² ÑаблиÑе неÑколÑко полноÑÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑнÑÑ ÑÑÑок. ÐÑо вÑÑÐµÐºÐ°ÐµÑ Ð¸Ð· маÑемаÑиÑеÑкой модели, коÑоÑÑÑ ÑеализÑÐµÑ SQL, но обÑÑно Ñакое дÑблиÑование нежелаÑелÑно. Ðозже в ÑÑой главе Ð¼Ñ Ñвидим, как его избежаÑÑ.
ÐÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑÑолбÑÑ ÑопоÑÑавлен Ñип даннÑÑ . Тип даннÑÑ Ð¾Ð³ÑаниÑÐ¸Ð²Ð°ÐµÑ Ð½Ð°Ð±Ð¾Ñ Ð´Ð¾Ð¿ÑÑÑимÑÑ Ð·Ð½Ð°Ñений, коÑоÑÑе можно пÑиÑвоиÑÑ ÑÑолбÑÑ, и опÑеделÑÐµÑ ÑмÑÑловое знаÑение даннÑÑ Ð´Ð»Ñ Ð²ÑÑиÑлений. ÐапÑимеÑ, в ÑÑÐ¾Ð»Ð±ÐµÑ ÑиÑлового Ñипа нелÑÐ·Ñ Ð·Ð°Ð¿Ð¸ÑаÑÑ Ð¾Ð±ÑÑнÑе ÑекÑÑовÑе ÑÑÑоки, но заÑо его даннÑе можно иÑполÑзоваÑÑ Ð² маÑемаÑиÑеÑÐºÐ¸Ñ Ð²ÑÑиÑлениÑÑ . РнаобоÑоÑ, еÑли ÑÑÐ¾Ð»Ð±ÐµÑ Ð¸Ð¼ÐµÐµÑ Ñип ÑекÑÑовой ÑÑÑоки, Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ допÑÑÑÐ¸Ð¼Ñ Ð¿ÑакÑиÑеÑки лÑбÑе даннÑе, но он непÑигоден Ð´Ð»Ñ Ð¼Ð°ÑемаÑиÑеÑÐºÐ¸Ñ Ð´ÐµÐ¹ÑÑвий (Ñ Ð¾ÑÑ Ð´ÑÑгие опеÑаÑии, напÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð½ÐºÐ°ÑенаÑÐ¸Ñ ÑÑÑок, возможнÑ).
Ð Postgres Pro еÑÑÑ Ð²Ð½ÑÑиÑелÑнÑй Ð½Ð°Ð±Ð¾Ñ Ð²ÑÑÑоеннÑÑ
Ñипов даннÑÑ
, ÑдовлеÑвоÑÑÑÑий болÑÑинÑÑво пÑиложений. ÐолÑзоваÑели Ñакже могÑÑ Ð¾Ð¿ÑеделÑÑÑ ÑобÑÑвеннÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐолÑÑинÑÑво вÑÑÑоеннÑÑ
Ñипов даннÑÑ
имеÑÑ Ð¿Ð¾Ð½ÑÑнÑе имена и ÑеманÑикÑ, Ñак ÑÑо Ð¼Ñ Ð¾Ñложим иÑ
подÑобное ÑаÑÑмоÑÑение до ÐлавÑ 8. Ðаиболее ÑаÑÑо пÑименÑÑÑÑÑ ÑледÑÑÑие ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
: integer Ð´Ð»Ñ ÑелÑÑ
ÑиÑел, numeric Ð´Ð»Ñ ÑиÑел, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð´ÑобнÑми, text Ð´Ð»Ñ ÑекÑÑовÑÑ
ÑÑÑок, date Ð´Ð»Ñ Ð´Ð°Ñ, time Ð´Ð»Ñ Ð²Ñемени и timestamp Ð´Ð»Ñ Ð·Ð½Ð°Ñений, вклÑÑаÑÑиÑ
даÑÑ Ð¸ вÑемÑ.
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑаблиÑÑ Ð¸ÑполÑзÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° CREATE TABLE. Ð ÑÑой команде Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ ÐºÐ°Ðº минимÑм Ð¸Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ ÑаблиÑÑ Ð¸ имена и ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑолбÑа. ÐапÑимеÑ:
CREATE TABLE my_first_table (
first_column text,
second_column integer
); Так Ð²Ñ ÑоздадиÑе ÑаблиÑÑ my_first_table Ñ Ð´Ð²ÑÐ¼Ñ ÑÑолбÑами. ÐеÑвÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð½Ð°Ð·ÑваеÑÑÑ first_column и Ð¸Ð¼ÐµÐµÑ Ñип даннÑÑ
text; вÑоÑой ÑÑÐ¾Ð»Ð±ÐµÑ Ð½Ð°Ð·ÑваеÑÑÑ second_column и Ð¸Ð¼ÐµÐµÑ Ñип integer. Ðмена ÑаблиÑÑ Ð¸ ÑÑолбÑов ÑооÑвеÑÑÑвÑÑÑ ÑинÑакÑиÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов, опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð² ÐодÑазделе 4.1.1. Ðмена Ñипов Ñакже ÑвлÑÑÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑами, Ñ
оÑÑ ÐµÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе иÑклÑÑениÑ. ÐамеÑÑÑе, ÑÑо ÑпиÑок ÑÑолбÑов заклÑÑаеÑÑÑ Ð² Ñкобки, а его ÑлеменÑÑ ÑазделÑÑÑÑÑ Ð·Ð°Ð¿ÑÑÑми.
ÐонеÑно, пÑедÑдÑÑий пÑÐ¸Ð¼ÐµÑ Ð½ÐµÐ½Ð°ÑÑÑален. ÐбÑÑно в Ð¸Ð¼ÐµÐ½Ð°Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ ÑÑолбÑов оÑÑажаеÑÑÑ, какие даннÑе они бÑдÑÑ ÑодеÑжаÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð°Ð²Ð°Ð¹Ñе взглÑнем на более ÑеалиÑÑиÑнÑй пÑимеÑ:
CREATE TABLE products (
product_no integer,
name text,
price numeric
); (Тип numeric Ð¼Ð¾Ð¶ÐµÑ Ñ
ÑаниÑÑ Ð´ÑобнÑе ÑиÑла, в коÑоÑÑÑ
обÑÑно вÑÑажаÑÑÑÑ Ð´ÐµÐ½ÐµÐ¶Ð½Ñе ÑÑммÑ.)
ÐодÑказка
Ðогда Ð²Ñ ÑоздаÑÑе много взаимоÑвÑзаннÑÑ ÑаблиÑ, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл заÑанее вÑбÑаÑÑ ÐµÐ´Ð¸Ð½Ñй Ñаблон Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ ÑÑолбÑов. ÐапÑимеÑ, ÑеÑиÑÑ, бÑдÑÑ Ð»Ð¸ в Ð¸Ð¼ÐµÐ½Ð°Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ÑполÑзоваÑÑÑÑ ÑÑÑеÑÑвиÑелÑнÑе во множеÑÑвенном или в единÑÑвенном ÑиÑле (еÑÑÑ ÑообÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² полÑÐ·Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ваÑианÑа).
ЧиÑло ÑÑолбÑов в ÑаблиÑе не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÐµÑконеÑнÑм. ÐÑо ÑиÑло огÑаниÑиваеÑÑÑ Ð¼Ð°ÐºÑимÑмом в пÑÐµÐ´ÐµÐ»Ð°Ñ Ð¾Ñ 250 до 1600, в завиÑимоÑÑи Ð¾Ñ Ñипов ÑÑолбÑов. Ðднако ÑоздаваÑÑ ÑаблиÑÑ Ñ Ñаким болÑÑим ÑиÑлом ÑÑолбÑов обÑÑно не ÑÑебÑеÑÑÑ, а еÑли ÑÐ°ÐºÐ°Ñ Ð¿Ð¾ÑÑебноÑÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ, ÑÑо ÑкоÑее пÑизнак ÑомниÑелÑного дизайна.
ÐÑли ÑаблиÑа вам болÑÑе не нÑжна, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑдалиÑÑ ÐµÑ, вÑполнив ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ DROP TABLE. ÐапÑимеÑ:
DROP TABLE my_first_table; DROP TABLE products;
ÐопÑÑка ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÑÑÑеÑÑвÑÑÑей ÑаблиÑÑ ÑÑиÑаеÑÑÑ Ð¾Ñибкой. Тем не менее в SQL-ÑкÑипÑаÑ
ÑаÑÑо пÑименÑÑÑ Ð±ÐµÐ·ÑÑловное Ñдаление ÑÐ°Ð±Ð»Ð¸Ñ Ð¿ÐµÑед Ñозданием, игноÑиÑÑÑ Ð²Ñе ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибкаÑ
, Ñак ÑÑо они вÑполнÑÑÑ ÑÐ²Ð¾Ñ Ð·Ð°Ð´Ð°ÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ Ñого, ÑÑÑеÑÑвовали ÑаблиÑÑ Ð¸Ð»Ð¸ неÑ. (ÐÑли Ð²Ñ Ñ
оÑиÑе избежаÑÑ ÑакиÑ
оÑибок, можно иÑполÑзоваÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ DROP TABLE IF EXISTS, но ÑÑо не бÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ ÑÑандаÑÑÑ SQL.)
Ðак измениÑÑ ÑÑÑеÑÑвÑÑÑÑÑ ÑаблиÑÑ, бÑÐ´ÐµÑ ÑаÑÑмоÑÑено в ÑÑой главе позже, в Разделе 5.7.
ÐÐ¼ÐµÑ ÑÑедÑÑва, коÑоÑÑе Ð¼Ñ Ð¾Ð±ÑÑдили, Ð²Ñ Ñже можеÑе ÑоздаваÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑÑнкÑионалÑнÑе ÑаблиÑÑ. РпÑодолжении ÑÑой Ð³Ð»Ð°Ð²Ñ ÑаÑÑмаÑÑиваÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе возможноÑÑи, пÑизваннÑе обеÑпеÑиÑÑ ÑелоÑÑноÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , безопаÑноÑÑÑ Ð¸ ÑдобÑÑво. ÐÑли вам не ÑеÑпиÑÑÑ Ð½Ð°Ð¿Ð¾Ð»Ð½Ð¸ÑÑ Ñвои ÑаблиÑÑ Ð´Ð°Ð½Ð½Ñми, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе веÑнÑÑÑÑÑ Ðº ÑÑой главе позже, а ÑейÑÐ°Ñ Ð¿ÐµÑейÑи к Ðлаве 6.