61.2. Ðоведение клаÑÑов опеÑаÑоÑов B-деÑева
Ðак показано в ТаблиÑе 37.3, клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов btree должен пÑедоÑÑавиÑÑ Ð¿ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов ÑÑавнениÑ, <, <=, =, >= и >. ХоÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло ожидаÑÑ, ÑÑо ÑаÑÑÑÑ ÑÑого клаÑÑа бÑÐ´ÐµÑ Ð¸ опеÑаÑÐ¾Ñ <>, но ÑÑо не Ñак, поÑÐ¾Ð¼Ñ ÑÑо иÑполÑзоваÑÑ <> в пÑедложении WHERE Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка по индекÑÑ Ð¿ÑакÑиÑеÑки беÑполезно. (ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
Ñелей планиÑовÑик ÑÑловно оÑноÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ <> к клаÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов btree, но он наÑ
Ð¾Ð´Ð¸Ñ Ð´Ð°Ð½Ð½Ñй опеÑаÑÐ¾Ñ ÐºÐ°Ðº оÑÑиÑание опеÑаÑоÑа =, а не обÑаÑаÑÑÑ Ðº pg_amop.)
Ðогда неÑколÑко Ñипов даннÑÑ Ð¸Ð¼ÐµÑÑ Ð¿ÑакÑиÑеÑки одинаковÑÑ ÑеманÑÐ¸ÐºÑ ÑоÑÑиÑовки, Ð¸Ñ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов можно ÑгÑÑппиÑоваÑÑ Ð² ÑемейÑÑво опеÑаÑоÑов. ÐÑо полезно Ñем, ÑÑо позволÑÐµÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑÐ¸ÐºÑ Ð´ÐµÐ»Ð°ÑÑ Ð²ÑÐ²Ð¾Ð´Ñ Ð¾ межÑиповÑÑ ÑÑавнениÑÑ . ÐаждÑй клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов в ÑемейÑÑве должен ÑодеÑжаÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñвоего Ñипа Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ (и ÑопÑÑÑÑвÑÑÑие опоÑнÑе ÑÑнкÑии), Ñогда как межÑиповÑе опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸ опоÑнÑе ÑÑнкÑии ÑвлÑÑÑÑÑ Â«Ñлабо» ÑвÑзаннÑми Ñ ÑемейÑÑвом. Ð ÑемейÑÑво ÑекомендÑеÑÑÑ Ð²ÐºÐ»ÑÑаÑÑ Ð¿Ð¾Ð»Ð½Ñй Ð½Ð°Ð±Ð¾Ñ Ð¼ÐµÐ¶ÑиповÑÑ Ð¾Ð¿ÐµÑаÑоÑов, ÑÑÐ¾Ð±Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик мог пÑедÑÑавиÑÑ Ð»ÑбÑе ÑÑловиÑ, коÑоÑÑе он Ð¼Ð¾Ð¶ÐµÑ Ð²ÑвеÑÑи, иÑполÑзÑÑ ÑÑанзиÑивноÑÑÑ.
СемейÑÑво опеÑаÑоÑов btree должно ÑдовлеÑвоÑÑÑÑ Ð½ÐµÑколÑким базовÑм положениÑм:
ÐпеÑаÑоÑ
=должен пÑедÑÑавлÑÑÑ Ð¾ÑноÑение ÑквиваленÑноÑÑи; Ñо еÑÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ Ð¾ÑлиÑнÑÑ Ð¾Ñ NULL знаÑенийA,B,CопÑеделÑнного Ñипа даннÑÑ :A=Aâ иÑÑина (ÑеÑлекÑивноÑÑÑ)еÑли
A=B, ÑоB=A(ÑиммеÑÑиÑ)еÑли
A=BиB=C, ÑоA=C(ÑÑанзиÑивноÑÑÑ)
ÐпеÑаÑоÑ
<должен пÑедÑÑавлÑÑÑ Ð¾ÑноÑение ÑÑÑогого ÑпоÑÑдоÑиваниÑ; Ñо еÑÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ Ð¾ÑлиÑнÑÑ Ð¾Ñ NULL знаÑенийA,B,C:A<Aâ ложно (анÑиÑеÑлекÑивноÑÑÑ)еÑли
A<BиB<C, ÑоA<C(ÑÑанзиÑивноÑÑÑ)
Ðолее Ñого, ÑпоÑÑдоÑивание дейÑÑвÑÐµÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñно; Ñо еÑÑÑ Ð´Ð»Ñ Ð»ÑбÑÑ Ð¾ÑлиÑнÑÑ Ð¾Ñ NULL знаÑений
A,B:иÑÑиннÑм ÑвлÑеÑÑÑ Ñовно одно из ÑÑловий:
A<B,A=BилиB<A(ÑÑÐ¸Ñ Ð¾ÑомиÑ)
(РазÑмееÑÑÑ, опÑеделение ÑÑнкÑии, оÑÑÑеÑÑвлÑÑÑей ÑÑавнение, вÑÑÐµÐºÐ°ÐµÑ Ð¸Ð· закона ÑÑÐ¸Ñ Ð¾Ñомии.)
ÐÑÑалÑнÑе ÑÑи опеÑаÑоÑа опÑеделÑÑÑÑÑ ÑеÑез опеÑаÑоÑÑ = и < оÑевиднÑм обÑазом и Ð´Ð¾Ð»Ð¶Ð½Ñ ÑабоÑаÑÑ ÑоглаÑованно Ñ Ð¿Ð¾Ñледними.
ÐÐ»Ñ ÑемейÑÑва опеÑаÑоÑов, поддеÑживаÑÑего неÑколÑко Ñипов даннÑÑ
, вÑÑепеÑеÑиÑленнÑе Ð·Ð°ÐºÐ¾Ð½Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑÑ Ð¿Ñи знаÑениÑÑ
A, B, C, оÑноÑÑÑиÑ
ÑÑ Ðº лÑбÑм Ñипам из ÑемейÑÑва. ТÑанзиÑивноÑÑÑ Ð¾Ð±ÐµÑпеÑиÑÑ Ñложнее вÑего, Ñак как в ÑиÑÑаÑиÑÑ
Ñ ÑазнÑми Ñипами она ÑÑебÑÐµÑ ÑоглаÑованного Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð²ÑÑ
или ÑÑÑÑ
ÑазлиÑнÑÑ
опеÑаÑоÑов. Так напÑимеÑ, в одном ÑемейÑÑве опеÑаÑоÑов не ÑмогÑÑ ÑабоÑаÑÑ ÑÐ¸Ð¿Ñ float8 и numeric, по кÑайней меÑе пÑи ÑекÑÑем подÑ
оде, когда знаÑÐµÐ½Ð¸Ñ numeric пÑеобÑазÑÑÑÑÑ Ð²Ð¾ float8 Ð´Ð»Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ float8. Ðз-за огÑаниÑенной ÑоÑноÑÑи Ñипа float8 ÑазлиÑнÑе знаÑÐµÐ½Ð¸Ñ numeric могÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ ÑавнÑми Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ float8, ÑÑо наÑÑÑÐ¸Ñ Ð·Ð°ÐºÐ¾Ð½ ÑÑанзиÑивноÑÑи.
ÐÑÑ Ð¾Ð´Ð½Ð¾ ÑÑебование Ð´Ð»Ñ ÑемейÑÑва, ÑаÑÑÑиÑанного на неÑколÑко Ñипов даннÑÑ , ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо лÑбое неÑвное или двоиÑно-ÑовмеÑÑимое пÑиведение, коÑоÑое опÑеделено Ð¼ÐµÐ¶Ð´Ñ Ñипами, вклÑÑÑннÑми в ÑемейÑÑво опеÑаÑоÑов, не должно менÑÑÑ ÑооÑвеÑÑÑвÑÑÑий поÑÑдок ÑоÑÑиÑовки.
Ðолжно бÑÑÑ Ð´Ð¾ÑÑаÑоÑно понÑÑно, поÑÐµÐ¼Ñ Ð¸Ð½Ð´ÐµÐºÑ-B-деÑево ÑÑебÑÐµÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ Ð·Ð°ÐºÐ¾Ð½Ð¾Ð² Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñипа даннÑÑ : без ÑÑого ÑпоÑÑдоÑивание клÑÑей невозможно. ÐÑоме Ñого, Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка в индекÑе по клÑÑÑ Ð´ÑÑгого Ñипа даннÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾, ÑÑÐ¾Ð±Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð²ÑÑ Ñипов ÑÑавнивалиÑÑ ÐºÐ¾ÑÑекÑно. РаÑÑиÑение ÑемейÑÑва до ÑÑÑÑ Ð¸Ð»Ð¸ более Ñипов даннÑÑ Ð½Ðµ ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм Ð´Ð»Ñ Ñамого Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð° индекÑа btree, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика в ÑелÑÑ Ð¾Ð¿ÑимизаÑии.