Объектлардан умумий тарзда фойдаланиш
Кўпинча ҳақиқий дунё объектлари Rational объектига қараганда каттароқ ва мураккаброқдир. Қуйидаги объект турини қараймиз:
CREATE TYPE Address AS OBJECT (
street_address VARCHAR2(35),
city VARCHAR2(15),
state CHAR(2),
zip_code INTEGER
);
CREATE TYPE Person AS OBJECT (
first_name VARCHAR2(15),
last_name VARCHAR2(15),
birthday DATE,
home_address Address, -- ичма-ич жойлашган объект тури
phone_number VARCHAR2(15),
ss_number INTEGER,
...
);
Address объекти туртта атрибутдан иборат ва Person объекти эса ундан ҳам кўп атрибутларга эга бўлиб, улардан бири Address туридаги объектдир. Объект катта бўлса, уни бир қисмдастурдан иккинчи қисмдастурга кўчириш самарасиз бўлади. Шу сабабли объектлардан умумий тарзда фойдаланиш фойдалироқ бўлади. Бу ишни амалга ошириш учун объект ўзининг идентификаторига эга бўлиши лозим. Объектдан умумий тарзда фойдаланиш учун сиз унга ҳаволани (қисқача refs, references сўзидан) ишлатасиз. Ref бу объектга кўрсаткичдир. Объектдан умумий тарзда фойдаланишнинг иккита муҳим ижобий томони мавжуд. Биринчиси – берилганлар заруриятсиз репликация қилинмайди. Иккинчиси – умумий тарзда фойдаланиши лозим бўлган объект қиймати ўзгартирилганда, ўзгартириш фақат бир жойда амалга оширилади ва ихтиёрий ҳавола ўзгартирилган қийматларни очиб ўқиши мумкин.
Қуйидаги мисолда биз умумий тарзда фойдаланиладиган объект ижобий томонларидан бирини Home объект турини аниқлаб ва сўнг ушбу турдаги объект нусхаларидан таркиб топган жадвални очиш орқали намойиш этамиз:
CREATE TYPE Home AS OBJECT (
address VARCHAR2(35),
owner VARCHAR2(25),
age INTEGER,
style VARCHAR(15),
floor plan BLOB,
price REAL(9,2),
...
);
...
CREATE TABLE homes OF Home;
Refs-дан фойдаланиш
Person турдаги объектда бир хил уй адресига эга бўлган одамларни моделлаштириш мумкин. Объект кўрсатгичини ўз ичига олган атрибутни эълон қилиш учун REF –дан фойдаланасиз:
CREATE TYPE Person AS OBJECT (
first_name VARCHAR2(10),
last_name VARCHAR2(15),
birthday DATE,
home_address REF Home, /* оила аъзолари умумий адрес учун фойдаланишлари мумкин */
phone_number VARCHAR2(15),
ss_number INTEGER,
mother REF Person, /* оила аъзолари бир-бирига ҳавола қилиши мумкин */
father REF Person,
...
);
Notice how references from persons to homes and between persons model real-world relationships.
Сиз refs-ни ўзгарувчи, параметр, майдон ёки атрибут тарзида ишлатишингиз мумкин. Refs –ни SQL жумлаларида киритиш ёки чиқариш ўзгарувчилари сифатида ҳам фойдаланишингиз мумкин. Аммо refs йўналиши бўйлаб мурожаат қилиб бўлмайди. Агар x.attribute, ифодада x ref бўлса, PL/SQL, ҳавола этилаётган объектни сақлаётган жадвалга ўтолмайди. Масалан қуйидаги қиймат бериш қоидага хилоф:
DECLARE
p_ref REF Person;
phone_no VARCHAR2(15);
BEGIN
phone_no := p_ref.phone_number; -- нотўғри
Буни ўрнига сиз объектга киришингиз учун DEREF операторидан фойдаланишингиз лозим .
Do'stlaringiz bilan baham: |