Changes between Initial Version and Version 1 of DatabaseProgramming


Ignore:
Timestamp:
05/26/26 16:11:54 (10 hours ago)
Author:
232026
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v1 v1  
     1== Views: ==
     21. order_store_details
     3CREATE OR REPLACE VIEW order_store_details AS
     4SELECT
     5    o.order_id,
     6    o.customer_id,
     7    o.order_date,
     8    o.total_price,
     9    o.status,
     10    si.store_instance_id,
     11    si.address_id AS store_address,
     12    s.store_name AS store_name,
     13    s.store_type_id AS store_type,
     14    si.instance_name AS instance_name
     15FROM "Order" o
     16JOIN StoreInstance si ON o.store_instance_id = si.store_instance_id
     17JOIN Store s ON si.store_id = s.store_id;
     18Овој поглед ги прикажува сите нарачки направени во историјата на апликацијата.
     19Ја гледа само табелата Order без никакви joinovi.
     20
     212.available_stores_list
     22CREATE VIEW available_stores_list AS
     23SELECT
     24    s.store_id,
     25    s.store_name AS store_name,
     26    s.store_type_id store_type,
     27    si.instance_name instance_name,
     28    si.store_instance_id,
     29    si.address_id AS store_location
     30FROM Store s
     31JOIN StoreInstance si ON s.store_id = si.store_id;
     32Овој поглед е наменет за корисничкиот интерфејс за да види корисникот од кои продавници може да направи нарачка. Има JOIN помеѓу Store и StoreInstance
     33
     343.driver_performance_metrics
     35CREATE OR REPLACE VIEW driver_performance_metrics AS
     36SELECT
     37    d.driver_id,
     38    u.name,
     39    u.surname,
     40    vt.vehicle_type,
     41    ROUND(AVG(r.rating), 2) AS average_rating,
     42    COUNT(dr.review_id) AS total_reviews
     43FROM Driver d
     44JOIN "User" u ON d.driver_id = u.user_id
     45JOIN Vehicle v ON d.vehicle_id = v.vehicle_id
     46JOIN VehicleType vt ON v.vehicle_type_id = vt.vehicle_type_id
     47JOIN Delivery_review dr ON d.driver_id = dr.driver_id
     48JOIN Review r ON dr.review_id = r.review_id
     49GROUP BY d.driver_id, u.name, u.surname, vt.vehicle_type;
     50Овој поглед е наменет за менаџментот и за следење на квалитетот на работа на возачите. Врз основа на просечниот рејтинг и бројот на рецензии добиени од корисниците, системот автоматски може да пресметува бонуси за брзина и љубезност или да ги суспендира возачите со лоши перформанси.
     51
     524.store_performance_metrics
     53CREATE VIEW store_performance_metrics AS
     54SELECT
     55    si.store_instance_id,
     56    s.store_name AS brand_name,
     57    si.address_id AS store_address,
     58    ROUND(AVG(r.rating), 2) AS average_product_rating,
     59    COUNT(pr.review_id) AS total_product_reviews
     60FROM StoreInstance si
     61JOIN Store s ON si.store_id = s.store_id
     62JOIN Products_review pr ON si.store_instance_id = pr.store_instance_id
     63JOIN Review r ON pr.review_id = r.review_id
     64GROUP BY si.store_instance_id, s.store_name, si.address_id;
     65Служи за аналитика на партнерските продавници и ресторани, овозможувајќи им на сопствениците да видат како се оценети нивните локали и продукти од страна на купувачите. Овие податоци помагаат за рангирање на продавниците (на пример, „Најдобро оценети“) на самата платформа за достава.
     66
     675.customer_order_history_summary
     68CREATE VIEW customer_order_history_summary AS
     69SELECT
     70    u.user_id as customer_id,
     71    u.name,
     72    u.surname,
     73    COUNT(o.order_id) as total_orders,
     74    SUM(o.total_price) as total_spent,
     75    ROUND(AVG(o.total_price), 2) as average_order_value,
     76    MAX(p.payment_date) as last_order_date
     77FROM "User" u
     78JOIN Customer c ON u.user_id = c.customer_id
     79LEFT JOIN "Order" o ON c.customer_id = o.customer_id
     80LEFT JOIN Payment p ON o.order_id = p.order_id
     81GROUP BY u.user_id, u.name, u.surname;
     82Оваа логика се користи во профилот на корисникот (User Profile) за да му ја прикаже неговата историја на купување, но уште поважно, се користи за маркетинг и лојалност програми. Маркетингот го користи за да идентификува VIP корисници (кои потрошиле најмногу) и да им прати таргетирани купони со попусти.
     83
     846.top_trending_products_weekly
     85CREATE OR REPLACE VIEW top_trending_products_weekly AS
     86SELECT
     87    pr.product_id,
     88    pr.name as product_name,
     89    s.store_name,
     90    SUM(oi.quantity) as total_sold,
     91    COUNT(DISTINCT o.order_id) as appearing_in_orders
     92FROM "Order" o
     93JOIN OrderItem oi ON o.order_id = oi.order_id
     94JOIN Product pr ON oi.product_id = pr.product_id
     95JOIN Store s ON pr.store_id = s.store_id
     96ct_id, pr.name, s.store_name
     97ORDER BY total_sold DESC
     98LIMIT 20;
     99Директно ја имплементира бизнис секцијата „Најпродавани / Трендинг продукти“ на главниот екран. Со пребројување на количините во милионската табела OrderItem, системот знае кои 20 продукти се хит неделава и автоматски ги турка напред во апликацијата за да ја зголеми продажбата.
     100
     1017.delivery_performance_by_city
     102CREATE OR REPLACE VIEW delivery_performance_by_city AS
     103SELECT
     104    c.city_name,
     105    COUNT(o.order_id) AS total_orders_delivered,
     106    SUM(o.delivery_fee) AS total_delivery_revenue,
     107    ROUND(AVG(o.delivery_fee), 2) AS avg_delivery_fee_per_order,
     108    COUNT(DISTINCT o.driver_id) AS active_drivers_in_city,
     109    ROUND(AVG(o.delivery_fee::numeric / NULLIF(o.total_price, 0) * 100), 2) AS delivery_cost_percentage
     110FROM City c
     111JOIN DeliveryZone dz ON c.city_id = dz.city_id
     112JOIN "Order" o ON dz.zone_id = o.delivery_zone_id
     113WHERE o.status = 'delivered' -- Ги земаме само успешните достави
     114GROUP BY c.city_name
     115ORDER BY total_orders_delivered DESC;
     116Ова е суштински поглед за стратешко планирање и ширење на бизнисот. Менаџментот гледа во кои градови има најголем профит од достава, колку се активни возачите таму и кој е процентот на заработка од самата такса за достава, со цел да знаат каде да инвестираат во нови маркетинг кампањи.
     117
     1188.order_counts_by_payment_type
     119CREATE VIEW order_counts_by_payment_type AS
     120SELECT
     121    pm.payment AS payment_type,
     122    COUNT(o.order_id) AS total_orders,
     123    SUM(o.total_price) AS total_revenue
     124FROM "Order" o
     125JOIN Payment p ON o.order_id = p.order_id
     126JOIN Payment_method pm ON p.payment_method_id = pm.payment_method_id
     127WHERE o.status = 'delivered'
     128GROUP BY pm.payment
     129ORDER BY total_orders DESC;
     130Се користи од страна на финансискиот сектор за следење на преференциите за плаќање (картичка, во готово, крипто итн.). Логиката помага да се анализира каде има најголем проток на кеш и дали треба да се оптимизираат договорите со банките за провизиите од картички.
     131
     1329.products_with_store
     133CREATE  or replace VIEW products_with_store AS
     134SELECT
     135    pr.product_id,
     136    pr.name AS product_name,
     137    pr.price,
     138    pr.store_id,
     139    s.store_name
     140FROM Product pr
     141JOIN Store s ON pr.store_id = s.store_id;
     142Овој поглед е примарен за пребарувачот (Search Bar) и менијата на рестораните во апликацијата. Овозможува кога корисникот пребарува одреден продукт (на пример: „бургер“), веднаш до името и цената на продуктот да се прикаже и името на брендот/ресторанот кој го нуди тој продукт.