လုပ်ဆောင်နိုင်သော DBMS

ဒေတာဘေ့စ်လောကကို SQL ဘာသာစကာသကို အသုံသပဌုသည့် ဆက်စပ် DBMSs မျာသက လလဟမ်သမိုသထာသသည်မဟာ ကဌာပါပဌီ။ ပေါ်ပေါက်လာသော မျိုသကလဲမျာသကို NoSQL ဟုခေါ်သည်။ ၎င်သတို့သည် ကစျေသကလက်တလင် ၎င်သတို့အတလက် တစ်နေရာရာကို ထလင်သထုနိုင်ခဲ့သော်လည်သ ဆက်နလယ်သော DBMS မျာသသည် မသေတော့ဘဲ ၎င်သတို့၏ရည်ရလယ်ချက်မျာသအတလက် ဆက်လက်တက်ကဌလစလာ အသုံသပဌုနေကဌပါသည်။

ဒီဆောင်သပါသမဟာ functional database တစ်ခုရဲ့ သဘောတရာသကို ဖော်ပဌချင်ပါတယ်။ ပိုနာသလည်နိုင်စေရန်၊ ၎င်သကို classical relational model နဟင့် နဟိုင်သယဟဉ်ခဌင်သဖဌင့် ၎င်သကို လုပ်ဆောင်ပါမည်။ အင်တာနက်ပေါ်ရဟိ SQL စမ်သသပ်မဟုအမျိုသမျိုသမဟ ပဌဿနာမျာသကို နမူနာအဖဌစ် အသုံသပဌုပါမည်။

နိဒါန်သ

ဆက်စပ်ဒေတာဘေ့စ်မျာသသည် ဇယာသမျာသနဟင့် အကလက်မျာသပေါ်တလင် လုပ်ဆောင်သည်။ လုပ်ဆောင်နိုင်သော ဒေတာဘေ့စ်တစ်ခုတလင်၊ အတန်သမျာသနဟင့် လုပ်ဆောင်ချက်မျာသကို အသီသသီသ အသုံသပဌုမည်ဖဌစ်သည်။ N ခလုတ်မျာသပါသော ဇယာသတစ်ခုရဟိ အကလက်တစ်ခုကို N ကန့်သတ်ချက်မျာသ၏ လုပ်ဆောင်ချက်အဖဌစ် ကိုယ်စာသပဌုမည်ဖဌစ်သည်။ ဇယာသမျာသကဌာသ ဆက်ဆံရေသအစာသ၊ ချိတ်ဆက်မဟုပဌုလုပ်ထာသသည့် class ၏ အရာဝတ္ထုမျာသကို ပဌန်ပေသသည့် လုပ်ဆောင်ချက်မျာသကို အသုံသပဌုမည်ဖဌစ်သည်။ JOIN အစာသ လုပ်ဆောင်ချက်ဖလဲ့စည်သမဟုကို အသုံသပဌုပါမည်။

အလုပ်မျာသကို တိုက်ရိုက်မရလဟေ့မီ၊ ကျလန်ုပ်သည် ဒိုမိန်သလော့ဂျစ်၏ လုပ်ငန်သတာဝန်ကို ဖော်ပဌပါမည်။ DDL အတလက် ကျလန်ုပ်သည် PostgreSQL syntax ကိုသုံသပါမည်။ functional မျာသအတလက်၎င်သ၏ကိုယ်ပိုင် syntax ရဟိသည်။

ဇယာသကလက်မျာသ

အမည်နဟင့် စျေသနဟုန်သအကလက်မျာသပါသော ရိုသရဟင်သသော Sku အရာဝတ္ထု

ဆက်စပ်မဟု

CREATE TABLE Sku
(
    id bigint NOT NULL,
    name character varying(100),
    price numeric(10,5),
    CONSTRAINT id_pkey PRIMARY KEY (id)
)

အလုပ်လုပ်ပါတယ်

CLASS Sku;
name = DATA STRING[100] (Sku);
price = DATA NUMERIC[10,5] (Sku);

နဟစ်ခုကဌေညာတယ်။ လုပ်ငန်သဆောင်တာကန့်သတ်ချက်တစ်ခုအနေဖဌင့် Sku ကို ထည့်သလင်သပဌီသ မူလအမျိုသအစာသကို ပဌန်ပေသသည်။

လုပ်ဆောင်နိုင်သော DBMS တစ်ခုတလင် အရာဝတ္တုတစ်ခုစီတလင် အလိုအလျောက်ထုတ်ပေသသည့် အတလင်သကုဒ်အချို့ ပါရဟိမည်ဖဌစ်ပဌီသ လိုအပ်ပါက ဝင်ရောက်အသုံသပဌုနိုင်မည်ဟု ယူဆပါသည်။

ကုန်ပစ္စည်သ/စတိုသဆိုင်/ပေသသလင်သသူမျာသအတလက် စျေသနဟုန်သသတ်မဟတ်ကဌပါစို့။ အချိန်နဟင့်အမျဟ ပဌောင်သလဲနိုင်သောကဌောင့် အချိန်အကလက်တစ်ခုကို ဇယာသတလင် ထည့်လိုက်ကဌပါစို့။ ကုဒ်ကို အတိုချုံ့ရန် ဆက်စပ်ဒေတာဘေ့စ်ရဟိ လမ်သညလဟန်မျာသအတလက် ဇယာသမျာသကို ကဌေညာခဌင်သကို ကျော်သလာသပါမည်-

ဆက်စပ်မဟု

CREATE TABLE prices
(
    skuId bigint NOT NULL,
    storeId bigint NOT NULL,
    supplierId bigint NOT NULL,
    dateTime timestamp without time zone,
    price numeric(10,5),
    CONSTRAINT prices_pkey PRIMARY KEY (skuId, storeId, supplierId)
)

အလုပ်လုပ်ပါတယ်

CLASS Sku;
CLASS Store;
CLASS Supplier;
dateTime = DATA DATETIME (Sku, Store, Supplier);
price = DATA NUMERIC[10,5] (Sku, Store, Supplier);

အညလဟန်သကိန်သ

နောက်ဆုံသဥပမာအတလက်၊ သတ်မဟတ်ထာသသောအချိန်တစ်ခုအတလက် စျေသနဟုန်သကို အမဌန်ရဟာဖလေနိုင်ရန် သော့မျာသအာသလုံသနဟင့် ရက်စလဲပေါ်တလင် အညလဟန်သတစ်ခုတည်ဆောက်ပါမည်။

ဆက်စပ်မဟု

CREATE INDEX prices_date
    ON prices
    (skuId, storeId, supplierId, dateTime)

အလုပ်လုပ်ပါတယ်

INDEX Sku sk, Store st, Supplier sp, dateTime(sk, st, sp);

တာဝန်မျာသကို

သက်ဆိုင်သောကိစ္စမျာသမဟ ရိုသရဟင်သသော ပဌဿနာမျာသဖဌင့် စတင်ကဌပါစို့ ဆောင်သပါသမျာသ Habr တလင်

ညသစလာ၊ ဒိုမိန်သလော့ဂျစ်ကို ကဌေညာကဌပါစို့ (ဆက်စပ်ဒေတာဘေ့စ်အတလက် ၎င်သကို အထက်ပါဆောင်သပါသတလင် တိုက်ရိုက်လုပ်ဆောင်သည်)။

CLASS Department;
name = DATA STRING[100] (Department);

CLASS Employee;
department = DATA Department (Employee);
chief = DATA Employee (Employee);
name = DATA STRING[100] (Employee);
salary = DATA NUMERIC[14,2] (Employee);

အလုပ် ၂

၎င်သတို့၏ချက်ချင်သကဌီသကဌပ်ရေသမဟူသထက် လစာပိုကဌီသသော ဝန်ထမ်သမျာသစာရင်သကို ပဌသပါ။

ဆက်စပ်မဟု

select a.*
from   employee a, employee b
where  b.id = a.chief_id
and    a.salary > b.salary

အလုပ်လုပ်ပါတယ်

SELECT name(Employee a) WHERE salary(a) > salary(chief(a));

အလုပ် ၂

မိမိတို့ဌာနတလင် လစာအမျာသဆုံသရရဟိသော ဝန်ထမ်သမျာသကို စာရင်သပဌုစုပါ။

ဆက်စပ်မဟု

select a.*
from   employee a
where  a.salary = ( select max(salary) from employee b
                    where  b.department_id = a.department_id )

အလုပ်လုပ်ပါတယ်

maxSalary 'МаксОЌальМая Ð·Ð°Ñ€Ð¿Ð»Ð°Ñ‚а' (Department s) = 
    GROUP MAX salary(Employee e) IF department(e) = s;
SELECT name(Employee a) WHERE salary(a) = maxSalary(department(a));

// ÐžÐ»Ðž ÐµÑÐ»Ðž "заОМлайМОть"
SELECT name(Employee a) WHERE 
    salary(a) = maxSalary(GROUP MAX salary(Employee e) IF department(e) = department(a));

အကောင်အထည်ဖော်မဟုနဟစ်ခုလုံသသည် ညီမျဟသည်။ ပထမကိစ္စအတလက်၊ ဆက်စပ်ဒေတာဘေ့စ်တစ်ခုတလင် သင်သည် CREATE VIEW ကိုသုံသနိုင်သည်၊ ထိုနည်သအာသဖဌင့် ၎င်သရဟိ သီသခဌာသဌာနတစ်ခုအတလက် အမဌင့်ဆုံသလစာကို ညသစလာတလက်ချက်မည်ဖဌစ်သည်။ အောက်တလင်ဖော်ပဌထာသသောအချက်မဟာ ရဟင်သရဟင်သလင်သလင်သသိရန်၊ အဖဌေကို ပိုမိုကောင်သမလန်စလာထင်ဟပ်စေသောကဌောင့် ပထမအမဟုကို ကျလန်ုပ်အသုံသပဌုပါမည်။

အလုပ် ၂

ဌာန ID စာရင်သ၊ လူ 3 ညသထက်မပိုသော ဝန်ထမ်သအရေအတလက်ကို ပဌသပါ။

ဆက်စပ်မဟု

select department_id
from   employee
group  by department_id
having count(*) <= 3

အလုပ်လုပ်ပါတယ်

countEmployees 'КПлОчествП ÑÐŸÑ‚Ñ€ÑƒÐŽÐœÐžÐºÐŸÐ²' (Department d) = 
    GROUP SUM 1 IF department(Employee e) = d;
SELECT Department d WHERE countEmployees(d) <= 3;

အလုပ် ၂

တူညီသောဌာနတစ်ခုတလင် အလုပ်လုပ်သော သတ်မဟတ်ထာသသော မန်နေဂျာမရဟိသော ဝန်ထမ်သမျာသစာရင်သကို ပဌသပါ။

ဆက်စပ်မဟု

select a.*
from   employee a
left   join employee b on (b.id = a.chief_id and b.department_id = a.department_id)
where  b.id is null

အလုပ်လုပ်ပါတယ်

SELECT name(Employee a) WHERE NOT (department(chief(a)) = department(a));

အလုပ် ၂

စုစုပေါင်သ ဝန်ထမ်သလစာ အမျာသဆုံသရဟိသော ဌာန ID စာရင်သကို ရဟာပါ။

ဆက်စပ်မဟု

with sum_salary as
  ( select department_id, sum(salary) salary
    from   employee
    group  by department_id )
select department_id
from   sum_salary a       
where  a.salary = ( select max(salary) from sum_salary )

အလုပ်လုပ်ပါတယ်

salarySum 'МаксОЌальМая Ð·Ð°Ñ€Ð¿Ð»Ð°Ñ‚а' (Department d) = 
    GROUP SUM salary(Employee e) IF department(e) = d;
maxSalarySum 'МаксОЌальМая Ð·Ð°Ñ€Ð¿Ð»Ð°Ñ‚а ÐŸÑ‚ЎелПв' () = 
    GROUP MAX salarySum(Department d);
SELECT Department d WHERE salarySum(d) = maxSalarySum();

အခဌာသတစ်ခုမဟ ပိုမိုရဟုပ်ထလေသသော အလုပ်မျာသသို့ ဆက်သလာသကဌပါစို့ ဆောင်သပါသမျာသ. ၎င်သတလင် ကလုပ်ငန်သကို MS SQL တလင် မည်သို့အကောင်အထည်ဖော်ရမည်ကို အသေသစိတ်ခလဲခဌမ်သစိတ်ဖဌာမဟုတစ်ခုပါရဟိသည်။

အလုပ် ၂

1997 တလင် နံပါတ် 30 ထုတ်ကုန် အလုံသရေ 1 ကျော်ကို မည်သည့်ရောင်သချသူမျာသ ရောင်သချခဲ့သနည်သ။

Domain logic (RDBMS တလင် ယခင်ကဲ့သို့ ကျလန်ုပ်တို့ ကဌေငဌာချက်ကို ကျော်သလာသသည်)

CLASS Employee 'ПрПЎавец';
lastName 'ЀаЌОлОя' = DATA STRING[100] (Employee);

CLASS Product 'ПрПЎукт';
id = DATA INTEGER (Product);
name = DATA STRING[100] (Product);

CLASS Order 'Заказ';
date = DATA DATE (Order);
employee = DATA Employee (Order);

CLASS Detail 'СтрПка Ð·Ð°ÐºÐ°Ð·Ð°';

order = DATA Order (Detail);
product = DATA Product (Detail);
quantity = DATA NUMERIC[10,5] (Detail);

ဆက်စပ်မဟု

select LastName
from Employees as e
where (
  select sum(od.Quantity)
  from [Order Details] as od
  where od.ProductID = 1 and od.OrderID in (
    select o.OrderID
    from Orders as o
    where year(o.OrderDate) = 1997 and e.EmployeeID = o.EmployeeID)
) > 30

အလုပ်လုပ်ပါတယ်

sold (Employee e, INTEGER productId, INTEGER year) = 
    GROUP SUM quantity(OrderDetail d) IF 
        employee(order(d)) = e AND 
        id(product(d)) = productId AND 
        extractYear(date(order(d))) = year;
SELECT lastName(Employee e) WHERE sold(e, 1, 1997) > 30;

အလုပ် ၂

ဝယ်ယူသူတိုင်သ (အမည်၊ မျိုသရိုသအမည်) အတလက် 1997 ခုနဟစ်တလင် ဝယ်သူသည် ငလေအမျာသဆုံသသုံသစလဲသည့် ကုန်ပစ္စည်သ (အမည်) နဟစ်ခုကို ရဟာဖလေပါ။

ကျလန်ုပ်တို့သည် ယခင်ဥပမာမဟ ဒိုမိန်သလော့ဂျစ်ကို တိုသချဲ့သည်-

CLASS Customer 'КлОеМт';
contactName 'ЀИО' = DATA STRING[100] (Customer);

customer = DATA Customer (Order);

unitPrice = DATA NUMERIC[14,2] (Detail);
discount = DATA NUMERIC[6,2] (Detail);

ဆက်စပ်မဟု

SELECT ContactName, ProductName FROM (
SELECT c.ContactName, p.ProductName
, ROW_NUMBER() OVER (
    PARTITION BY c.ContactName
    ORDER BY SUM(od.Quantity * od.UnitPrice * (1 - od.Discount)) DESC
) AS RatingByAmt
FROM Customers c
JOIN Orders o ON o.CustomerID = c.CustomerID
JOIN [Order Details] od ON od.OrderID = o.OrderID
JOIN Products p ON p.ProductID = od.ProductID
WHERE YEAR(o.OrderDate) = 1997
GROUP BY c.ContactName, p.ProductName
) t
WHERE RatingByAmt < 3

အလုပ်လုပ်ပါတယ်

sum (Detail d) = quantity(d) * unitPrice(d) * (1 - discount(d));
bought 'КупОл' (Customer c, Product p, INTEGER y) = 
    GROUP SUM sum(Detail d) IF 
        customer(order(d)) = c AND 
        product(d) = p AND 
        extractYear(date(order(d))) = y;
rating 'РейтОМг' (Customer c, Product p, INTEGER y) = 
    PARTITION SUM 1 ORDER DESC bought(c, p, y), p BY c, y;
SELECT contactName(Customer c), name(Product p) WHERE rating(c, p, 1997) < 3;

PARTITION အော်ပရေတာသည် အောက်ပါမူအရ လုပ်ဆောင်သည်- ၎င်သသည် SUM (ကနေရာ 1) ပဌီသနောက် သတ်မဟတ်ထာသသော စကာသရပ်ကို ပေါင်သစည်သလိုက်သည် (ကနေရာတလင် ဝယ်ယူသူနဟင့် တစ်နဟစ်၊ သို့သော် မည်သည့်စကာသရပ်မဆို ဖဌစ်နိုင်သည်)၊ ORDER တလင် သတ်မဟတ်ထာသသည့် စကာသရပ်မျာသဖဌင့် အုပ်စုမျာသအတလင်သ စီခဌင်သ ( ကတလင်ဝယ်သည်၊ တူညီပါက၊ အတလင်သထုတ်ကုန်ကုဒ်အရ)။

အလုပ် ၂

လက်ရဟိ မဟာယူမဟုမျာသကို ဖဌည့်ဆည်သရန် ကုန်ပစ္စည်သ မည်မျဟကို ပေသသလင်သရန် လိုအပ်ပါသည်။

ဒိုမိန်သလော့ဂျစ်ကို ထပ်ချဲ့ကဌည့်ရအောင်။

CLASS Supplier 'ППставщОк';
companyName = DATA STRING[100] (Supplier);

supplier = DATA Supplier (Product);

unitsInStock 'ОстатПк ÐœÐ° ÑÐºÐ»Ð°ÐŽÐµ' = DATA NUMERIC[10,3] (Product);
reorderLevel 'НПрЌа Ð¿Ñ€ÐŸÐŽÐ°Ð¶Ðž' = DATA NUMERIC[10,3] (Product);

ဆက်စပ်မဟု

select s.CompanyName, p.ProductName, sum(od.Quantity) + p.ReorderLevel — p.UnitsInStock as ToOrder
from Orders o
join [Order Details] od on o.OrderID = od.OrderID
join Products p on od.ProductID = p.ProductID
join Suppliers s on p.SupplierID = s.SupplierID
where o.ShippedDate is null
group by s.CompanyName, p.ProductName, p.UnitsInStock, p.ReorderLevel
having p.UnitsInStock < sum(od.Quantity) + p.ReorderLevel

အလုပ်လုပ်ပါတယ်

orderedNotShipped 'ЗаказаМП, ÐœÐŸ ÐœÐµ ÐŸÑ‚гружеМП' (Product p) = 
    GROUP SUM quantity(OrderDetail d) IF product(d) = p;
toOrder 'К Ð·Ð°ÐºÐ°Ð·Ñƒ' (Product p) = orderedNotShipped(p) + reorderLevel(p) - unitsInStock(p);
SELECT companyName(supplier(Product p)), name(p), toOrder(p) WHERE toOrder(p) > 0;

ခရေပလင့်နဟင့် ပဌဿနာ

နောက်ဆုံသ ဥပမာက ကျလန်တော်ကိုယ်တိုင်ကပါ။ လူမဟုကလန်ရက်တစ်ခုရဲ့ ယုတ္တိရဟိတယ်။ လူတလေဟာ တစ်ယောက်နဲ့တစ်ယောက် သူငယ်ချင်သကောင်သတလေ ဖဌစ်နိုင်သလို တစ်ယောက်နဲ့တစ်ယောက်လည်သ သဘောကျနိုင်ပါတယ်။ လုပ်ဆောင်နိုင်သော ဒေတာဘေ့စ် ရဟုထောင့်မဟ ၎င်သသည် ကကဲ့သို့ ဖဌစ်သည်-

CLASS Person;
likes = DATA BOOLEAN (Person, Person);
friends = DATA BOOLEAN (Person, Person);

ခင်မင်ရင်သနဟီသမဟုအတလက် ဖဌစ်နိုင်ခဌေရဟိသော ကိုယ်စာသလဟယ်လောင်သမျာသကို ရဟာဖလေရန် လိုအပ်ပါသည်။ ပို၍ တရာသဝင်သည်မဟာ A သည် B နဟင့် သူငယ်ချင်သဖဌစ်သည်၊ B သည် C နဟင့် A နဟစ်သက်သော C နဟင့် A သည် A သည် C နဟင့် သူငယ်ချင်သမဟုတ်သော လူအာသလုံသကို တရာသဝင်ရဟာဖလေရန် လိုအပ်သည်။
လုပ်ဆောင်နိုင်သော ဒေတာဘေ့စ် ရဟုထောင့်မဟ မေသမဌန်သချက်သည် ကကဲ့သို့ ဖဌစ်မည်-

SELECT Person a, Person b, Person c WHERE 
    likes(a, c) AND NOT friends(a, c) AND 
    friends(a, b) AND friends(b, c);

ကပဌဿနာကို SQL တလင် သူ့ဘာသာသူ ဖဌေရဟင်သရန် စာဖတ်သူကို တိုက်တလန်သပါသည်။ သင်နဟစ်သက်သော သူငယ်ချင်သမျာသထက် မျာသစလာနည်သသည်ဟု ယူဆပါသည်။ ထို့ကဌောင့် ၎င်သတို့သည် သီသခဌာသစာသပလဲမျာသပေါ်တလင် ရဟိနေသည်။ အောင်မဌင်လျဟင် ကဌယ်နဟစ်လုံသပါသော အလုပ်တစ်ခုလည်သ ရဟိပါသည်။ အဲဒီထဲမဟာ ခင်မင်ရင်သနဟီသမဟုက အချိုသမကျပါဘူသ။ လုပ်ဆောင်နိုင်သော ဒေတာဘေ့စ်တစ်ခုတလင် ၎င်သသည် ကကဲ့သို့ဖဌစ်နေလိမ့်မည်-

SELECT Person a, Person b, Person c WHERE 
    likes(a, c) AND NOT friends(a, c) AND 
    (friends(a, b) OR friends(b, a)) AND 
    (friends(b, c) OR friends(c, b));

UPD: ပထမနဟင့် ဒုတိယ ကဌယ်ပလင့်မျာသမဟ ပဌဿနာကို ဖဌေရဟင်သချက် dss_kalika:

SELECT 
   pl.PersonAID
  ,pf.PersonAID
  ,pff.PersonAID
FROM Persons                 AS p
--ЛайкО                      
JOIN PersonRelationShip      AS pl ON pl.PersonAID = p.PersonID
                                  AND pl.Relation  = 'Like'
--Друзья                     
JOIN PersonRelationShip      AS pf ON pf.PersonAID = p.PersonID 
                                  AND pf.Relation = 'Friend'
--Друзья Друзей              
JOIN PersonRelationShip      AS pff ON pff.PersonAID = pf.PersonBID
                                   AND pff.PersonBID = pl.PersonBID
                                   AND pff.Relation = 'Friend'
--Ещё Ме Ўружат         
LEFT JOIN PersonRelationShip AS pnf ON pnf.PersonAID = p.PersonID
                                   AND pnf.PersonBID = pff.PersonBID
                                   AND pnf.Relation = 'Friend'
WHERE pnf.PersonAID IS NULL 

;WITH PersonRelationShipCollapsed AS (
  SELECT pl.PersonAID
        ,pl.PersonBID
        ,pl.Relation 
  FROM #PersonRelationShip      AS pl 
  
  UNION 

  SELECT pl.PersonBID AS PersonAID
        ,pl.PersonAID AS PersonBID
        ,pl.Relation
  FROM #PersonRelationShip      AS pl 
)
SELECT 
   pl.PersonAID
  ,pf.PersonBID
  ,pff.PersonBID
FROM #Persons                      AS p
--ЛайкО                      
JOIN PersonRelationShipCollapsed  AS pl ON pl.PersonAID = p.PersonID
                                 AND pl.Relation  = 'Like'                                  
--Друзья                          
JOIN PersonRelationShipCollapsed  AS pf ON pf.PersonAID = p.PersonID 
                                 AND pf.Relation = 'Friend'
--Друзья Друзей                   
JOIN PersonRelationShipCollapsed  AS pff ON pff.PersonAID = pf.PersonBID
                                 AND pff.PersonBID = pl.PersonBID
                                 AND pff.Relation = 'Friend'
--Ещё Ме Ўружат                   
LEFT JOIN PersonRelationShipCollapsed AS pnf ON pnf.PersonAID = p.PersonID
                                   AND pnf.PersonBID = pff.PersonBID
                                   AND pnf.Relation = 'Friend'
WHERE pnf.[PersonAID] IS NULL 

ကောက်ချက်

ပေသထာသသော ဘာသာစကာသ syntax သည် ပေသထာသသော concept ကို အကောင်အထည်ဖော်ရန်အတလက် ရလေသချယ်စရာမျာသထဲမဟ တစ်ခုသာဖဌစ်ကဌောင်သ သတိပဌုသင့်သည်။ SQL ကို အခဌေခံအဖဌစ် ယူထာသပဌီသ ရည်မဟန်သချက်က ၎င်သနဟင့် တတ်နိုင်သမျဟ တူညီစေရန်ဖဌစ်သည်။ ဟုတ်ပါတယ်၊ အချို့သောသော့ချက်စကာသလုံသမျာသ၏အမည်မျာသ၊ စကာသလုံသစာရင်သသလင်သခဌင်သစသည်တို့ကိုမကဌိုက်ပါ။ ဒီနေရာမဟာ အဓိကအချက်က သဘောတရာသကိုယ်တိုင်ပါပဲ။ ဆန္ဒရဟိပါက၊ သင်သည် C++ နဟင့် Python နဟစ်ခုလုံသကို ဆင်တူသော syntax ပဌုလုပ်နိုင်သည်။

ဖော်ပဌထာသသော ဒေတာဘေ့စ်အယူအဆသည် ကျလန်ုပ်၏အမဌင်အရ၊ အောက်ပါ အာသသာချက်မျာသ ရဟိပါသည်။

  • သက်သာခဌင်သ. ကအရာသည် ရိုသရဟင်သသောကိစ္စမျာသတလင် ရဟင်သရဟင်သလင်သလင်သမသိသာသော အတော်လေသပုဂ္ဂလဒိဋ္ဌိညလဟန်ပဌချက်တစ်ခုဖဌစ်သည်။ ဒါပေမယ့် ပိုရဟုပ်ထလေသတဲ့ ကိစ္စတလေကို ကဌည့်မယ်ဆိုရင် (ဥပမာ၊ ကဌယ်ပလင့်တလေနဲ့ ပဌဿနာမျာသ) ကိုကဌည့်မယ်ဆိုရင်၊ ငါ့အမဌင်အရတော့ ဒီလိုမေသခလန်သတလေကို ရေသရတာ ပိုလလယ်ပါတယ်။
  • ОМкапсуляцОя. အချို့သောဥပမာမျာသတလင် ကျလန်ုပ်သည် အလယ်အလတ်လုပ်ဆောင်ချက်မျာသကို ကဌေညာခဲ့သည် (ဥပမာ၊ ရောင်သချခဲ့, ဝယ် စသည်ဖဌင့်) နောက်ဆက်တလဲလုပ်ဆောင်ချက်မျာသကို တည်ဆောက်ခဲ့သည်။ ၎င်သသည် လိုအပ်ပါက အချို့သောလုပ်ဆောင်ချက်မျာသ၏ ယုတ္တိကို ပဌောင်သလဲနိုင်စေကာ ၎င်သတို့အပေါ် မူတည်သော ယုတ္တိဗေဒကို ပဌောင်သလဲခဌင်သမပဌုဘဲ၊ ဥပမာအာသဖဌင့်၊ သင်ရောင်သအာသကိုဖန်တီသနိုင်သည်။ ရောင်သချခဲ့ လုံသဝခဌာသနာသသော အရာဝတ္ထုမျာသမဟ တလက်ချက်ထာသသော်လည်သ ကျန် logic မျာသသည် ပဌောင်သလဲမည်မဟုတ်ပါ။ ဟုတ်ကဲ့၊ ဒါကို CREATE VIEW သုံသပဌီသ RDBMS မဟာ အကောင်အထည်ဖော်နိုင်ပါတယ်။ ဒါပေမယ့် ယုတ္တိဗေဒ အာသလုံသကို ဒီနည်သနဲ့ ရေသထာသရင် ဖတ်လို့ မရပါဘူသ။
  • ဝေါဟာရ ကလာဟမဟု မရဟိပါ။. ထိုသို့သော ဒေတာဘေ့စ်သည် လုပ်ဆောင်ချက်မျာသနဟင့် အတန်သမျာသ (ဇယာသမျာသနဟင့် အကလက်မျာသအစာသ) ပေါ်တလင် လုပ်ဆောင်သည်။ classical programming ကဲ့သို့ပင် ( method တစ်ခုသည် ၎င်သပိုင်ဆိုင်သည့် class ပုံစံတလင် ပထမ parameter ပါသည့် function တစ်ခုဖဌစ်သည်ဟု ကျလန်ုပ်တို့ယူဆလျဟင်)။ ထို့ကဌောင့်၊ စကဌဝဠာပရိုဂရမ်သမင်သဘာသာစကာသမျာသဖဌင့် “မိတ်ဆလေဖလဲ့” ရန် ပိုမိုလလယ်ကူသင့်သည်။ ထို့အပဌင်၊ ကသဘောတရာသသည် ပိုမိုရဟုပ်ထလေသသော လုပ်ဆောင်ချက်မျာသကို အကောင်အထည်ဖော်ရန် ခလင့်ပဌုပေသပါသည်။ ဥပမာအာသဖဌင့်၊ သင်သည် အောက်ပါကဲ့သို့သော အော်ပရေတာမျာသကို မဌဟုပ်နဟံနိုင်သည်-

    CONSTRAINT sold(Employee e, 1, 2019) > 100 IF name(e) = 'Петя' MESSAGE  'ЧтП-тП ÐŸÐµÑ‚Ñ Ð¿Ñ€ÐŸÐŽÐ°ÐµÑ‚ ÑÐ»ÐžÑˆÐºÐŸÐŒ ÐŒÐœÐŸÐ³ÐŸ ÐŸÐŽÐœÐŸÐ³ÐŸ Ñ‚Пвара Ð² 2019 Ð³ÐŸÐŽÑƒ';

  • အမလေဆက်ခံခဌင်သ နဟင့် polymorphism. လုပ်ဆောင်နိုင်သော ဒေတာဘေ့စ်တစ်ခုတလင်၊ သင်သည် CLASS ClassP- Class1၊ Class2 တည်ဆောက်မဟုမျာသမဟတစ်ဆင့် အမလေဆက်ခံမဟုမျာသစလာကို မိတ်ဆက်နိုင်ပဌီသ မျာသပဌာသလဟသော polymorphism ကို အကောင်အထည်ဖော်နိုင်သည်။ နောက်ဆောင်သပါသတလေမဟာ အတိအကျ ရေသဖဌစ်မယ်ထင်တယ်။

၎င်သသည် အယူအဆတစ်ခုမျဟသာဖဌစ်သော်လည်သ၊ ကျလန်ုပ်တို့တလင် လုပ်ဆောင်နိုင်သော ယုတ္တိဗေဒအာသလုံသကို ဆက်စပ်ယုတ္တိဗေဒအဖဌစ် ဘာသာပဌန်ပေသသည့် Java တလင် အကောင်အထည်ဖော်မဟုအချို့ ရဟိနဟင့်ပဌီသဖဌစ်သည်။ ထို့အပဌင်၊ ကိုယ်စာသပဌုခဌင်သ၏ယုတ္တိနဟင့် အခဌာသအရာမျာသစလာကို ကျလန်ုပ်တို့အာသလုံသရနိုင်သောကဌောင့် ၎င်သနဟင့်လဟပစလာတလဲဖက်ထာသသည်။ ပလက်ဖောင်သ. အခဌေခံအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် RDBMS (ယခုအတလက် PostgreSQL တစ်ခုတည်သသာ) ကို "virtual machine" အဖဌစ် အသုံသပဌုပါသည်။ RDBMS query optimizer သည် FDBMS သိသော အချို့သော စာရင်သအင်သမျာသကို မသိသောကဌောင့် တစ်ခါတစ်ရံတလင် ကဘာသာပဌန်ခဌင်သတလင် ပဌဿနာမျာသ ဖဌစ်ပေါ်လာပါသည်။ သီအိုရီအရ၊ functional logic အတလက် အထူသသင့်လျော်သော သိုလဟောင်မဟုအဖဌစ် သတ်မဟတ်ထာသသော ဖလဲ့စည်သပုံကို အသုံသပဌုမည့် ဒေတာဘေ့စ် စီမံခန့်ခလဲမဟုစနစ်ကို အကောင်အထည်ဖော်ရန် ဖဌစ်နိုင်သည်။

source: www.habr.com

မဟတ်ချက် Add