āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĄāĻŋāĻŦāĻŋāĻāĻŽāĻāĻ¸

āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻœāĻ—āĻ¤ āĻĻā§€āĻ°ā§āĻ˜āĻĻāĻŋāĻ¨ āĻ§āĻ°ā§‡ āĻ°āĻŋāĻ˛ā§‡āĻļāĻ¨āĻžāĻ˛ āĻĄāĻŋāĻŦāĻŋāĻāĻŽāĻāĻ¸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĻāĻ–āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž SQL āĻ­āĻžāĻˇāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻāĻ¤ āĻŦā§‡āĻļāĻŋ āĻ¯ā§‡ āĻ‰āĻĻā§€āĻ¯āĻŧāĻŽāĻžāĻ¨ āĻœāĻžāĻ¤āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ NoSQL āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ°āĻž āĻāĻ‡ āĻŦāĻžāĻœāĻžāĻ°ā§‡ āĻ¨āĻŋāĻœā§‡āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻœāĻžāĻ¯āĻŧāĻ—āĻž āĻœāĻŋāĻ¤āĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ°āĻŋāĻ˛ā§‡āĻļāĻ¨āĻžāĻ˛ āĻĄāĻŋāĻŦāĻŋāĻāĻŽāĻāĻ¸ āĻŽāĻžāĻ°āĻž āĻ¯āĻžāĻšā§āĻ›ā§‡ āĻ¨āĻž, āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻšā§āĻ›ā§‡āĨ¤

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ§āĻžāĻ°āĻŖāĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡āĨ¤ āĻ†āĻ°āĻ“ āĻ­āĻžāĻ˛ āĻŦā§‹āĻāĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ•ā§āĻ¯āĻžāĻ˛ āĻ°āĻŋāĻ˛ā§‡āĻļāĻ¨āĻžāĻ˛ āĻŽāĻĄā§‡āĻ˛ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻŦāĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ¨ā§‡āĻŸā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ SQL āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

āĻ°āĻŋāĻ˛ā§‡āĻļāĻ¨āĻžāĻ˛ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĻ—ā§āĻ˛āĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡, āĻ¯āĻĨāĻžāĻ•ā§āĻ°āĻŽā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ āĻāĻŦāĻ‚ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ N āĻ•ā§€ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° N āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ˛āĻŋāĻ™ā§āĻ•āĻ—ā§āĻ˛āĻŋāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻ¯āĻž āĻ˛āĻŋāĻ™ā§āĻ•āĻŸāĻŋ āĻ¯ā§‡ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻžāĻ° āĻŦāĻ¸ā§āĻ¤ā§āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ¯āĻŧāĨ¤ JOIN āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ•āĻŽā§āĻĒā§‹āĻœāĻŋāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻ†āĻ—ā§‡, āĻ†āĻŽāĻŋ āĻĄā§‹āĻŽā§‡āĻ¨ āĻ˛āĻœāĻŋāĻ•ā§‡āĻ° āĻ•āĻžāĻœāĻŸāĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻŦāĨ¤ DDL āĻāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ PostgreSQL āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

āĻŸā§‡āĻŦāĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°

āĻ¨āĻžāĻŽ āĻāĻŦāĻ‚ āĻŽā§‚āĻ˛ā§āĻ¯ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ 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);

āĻ•āĻ°ā§āĻŽ

āĻāĻ° āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻĨā§‡āĻ•ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¤ā§āĻ˛āĻ¨āĻžāĻŽā§‚āĻ˛āĻ•āĻ­āĻžāĻŦā§‡ āĻ¸āĻšāĻœ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ• āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ āĻšāĻžāĻŦāĻ°ā§‡āĻ° āĻ‰āĻĒāĻ°āĨ¤

āĻĒā§āĻ°āĻĨāĻŽā§‡, āĻ†āĻ¸ā§āĻ¨ āĻĄā§‹āĻŽā§‡āĻ¨ āĻ˛āĻœāĻŋāĻ• āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°āĻŋ (āĻāĻ•āĻŸāĻŋ āĻ°āĻŋāĻ˛ā§‡āĻļāĻ¨āĻžāĻ˛ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻŸāĻŋ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡)āĨ¤

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 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ¯āĻž āĻāĻ•āĻ‡āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻāĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻŦā§‡āĻ¤āĻ¨ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻŦā§‡āĨ¤ āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§‡, āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻĨāĻŽ āĻ•ā§‡āĻ¸āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ­āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻĢāĻ˛āĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ˜

āĻŦāĻŋāĻ­āĻžāĻ—ā§‡āĻ° āĻ†āĻ‡āĻĄāĻŋāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§āĻ¨, āĻ•āĻ°ā§āĻŽāĻšāĻžāĻ°ā§€āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž 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));

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ˜

āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻŽā§‹āĻŸ āĻ•āĻ°ā§āĻŽāĻšāĻžāĻ°ā§€ āĻŦā§‡āĻ¤āĻ¨ āĻ¸āĻš āĻŦāĻŋāĻ­āĻžāĻ—ā§‡āĻ° āĻ†āĻ‡āĻĄāĻŋāĻ—ā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ–ā§āĻāĻœā§āĻ¨āĨ¤

āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§€āĻ¯āĻŧ

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();

āĻ†āĻ¸ā§āĻ¨ āĻ…āĻ¨ā§āĻ¯ āĻĨā§‡āĻ•ā§‡ āĻ†āĻ°āĻ“ āĻœāĻŸāĻŋāĻ˛ āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ‡ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§. āĻāĻŽāĻāĻ¸ āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛-āĻ āĻāĻ‡ āĻ•āĻžāĻœāĻŸāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻ¤ā§‡āĨ¤

āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ˜

āĻ•ā§‹āĻ¨ āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻžāĻ°āĻž 1997 āĻ¸āĻžāĻ˛ā§‡ 30āĻŸāĻŋāĻ° āĻŦā§‡āĻļāĻŋ āĻ†āĻ‡āĻŸā§‡āĻŽ #1 āĻŦāĻŋāĻ•ā§āĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛?

āĻĄā§‹āĻŽā§‡āĻ¨ āĻ˛āĻœāĻŋāĻ• (āĻ†āĻ—ā§‡āĻ° āĻŽāĻ¤ā§‹, āĻ†āĻŽāĻ°āĻž 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, C āĻāĻŽāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ˛ā§‹āĻ•āĻ•ā§‡ āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯ā§‡ A B āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻ¨ā§āĻ§ā§ āĻāĻŦāĻ‚ B C āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻ¨ā§āĻ§ā§, A āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°ā§‡ C, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ 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);

āĻĒāĻžāĻ āĻ•āĻ•ā§‡ āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛-āĻ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸ā§āĻŦāĻžāĻ§ā§€āĻ¨āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻœāĻžāĻ¨āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ§āĻžāĻ°āĻŖāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻžāĻ°āĻž āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŽ āĻŦāĻ¨ā§āĻ§ā§ āĻ†āĻ›ā§‡āĨ¤ āĻ…āĻ¤āĻāĻŦ, āĻ¤āĻžāĻ°āĻž āĻĒā§ƒāĻĨāĻ• āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻ†āĻ›ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ¸āĻĢāĻ˛ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻĻā§āĻŸāĻŋ āĻ¤āĻžāĻ°āĻ•āĻžāĻšāĻŋāĻšā§āĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡āĻ“ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¤āĻžāĻ° āĻŦāĻ¨ā§āĻ§ā§āĻ¤ā§āĻŦ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸āĻŽ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡ āĻāĻŸāĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻāĻ°āĻ•āĻŽ āĻšāĻŦā§‡:

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_āĻ•āĻžāĻ˛āĻŋāĻ•āĻž:

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 

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻāĻŸāĻŋ āĻ˛āĻ•ā§āĻˇ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¯ā§‡ āĻ­āĻžāĻˇāĻžāĻ° āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸āĻŸāĻŋ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĨ¤ āĻāĻŸāĻŋ āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛ āĻ›āĻŋāĻ˛ āĻ¯āĻž āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ›āĻŋāĻ˛ āĻāĻŸāĻŋāĻ•ā§‡ āĻ¯āĻ¤āĻŸāĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ¤āĻžāĻ° āĻŽāĻ¤ā§‹ āĻ•āĻ°ā§‡ āĻ¤ā§‹āĻ˛āĻžāĨ¤ āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻ•ā§‡āĻ‰ āĻ•āĻŋāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄā§‡āĻ° āĻ¨āĻžāĻŽ, āĻļāĻŦā§āĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ¨āĻžāĻ“ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻŽā§‚āĻ˛ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻšāĻ˛ āĻ§āĻžāĻ°āĻŖāĻž āĻ¨āĻŋāĻœā§‡āĻ‡āĨ¤ āĻ¯āĻĻāĻŋ āĻ‡āĻšā§āĻ›āĻž āĻšāĻ¯āĻŧ, āĻ†āĻĒāĻ¨āĻŋ C ++ āĻāĻŦāĻ‚ Python āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻāĻ•āĻ‡ āĻ¸āĻŋāĻ¨āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ§āĻžāĻ°āĻŖāĻž, āĻ†āĻŽāĻžāĻ° āĻŽāĻ¤ā§‡, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ†āĻ›ā§‡:

  • āĻ†āĻ°āĻžāĻŽ. āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻžāĻ•ā§ƒāĻ¤ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻ—āĻ¤ āĻ¸ā§‚āĻšāĻ• āĻ¯āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ†āĻ°āĻ“ āĻœāĻŸāĻŋāĻ˛ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ¤āĻžāĻ°āĻ•āĻžāĻšāĻŋāĻšā§āĻ¨ āĻ¸āĻš āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋ) āĻĻā§‡āĻ–ā§‡āĻ¨, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻžāĻ° āĻŽāĻ¤ā§‡, āĻāĻ‡ āĻœāĻžāĻ¤ā§€āĻ¯āĻŧ āĻĒā§āĻ°āĻļā§āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ˛ā§‡āĻ–āĻž āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻšāĻœāĨ¤
  • ИĐŊĐēĐ°ĐŋŅŅƒĐģŅŅ†Đ¸Ņ. āĻ•āĻŋāĻ›ā§ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ†āĻŽāĻŋ āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§€ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻŦāĻŋāĻ•ā§āĻ°ā§€āĻ¤, āĻ•ā§‡āĻ¨āĻž āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ), āĻ¯āĻž āĻĨā§‡āĻ•ā§‡ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ, āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻĻā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻļā§€āĻ˛āĻĻā§‡āĻ° āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¨āĻž āĻ•āĻ°ā§‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ†āĻĒāĻ¨āĻŋ āĻŦāĻŋāĻ•ā§āĻ°āĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻŦāĻŋāĻ•ā§āĻ°ā§€āĻ¤ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻŦāĻ¸ā§āĻ¤ā§ āĻĨā§‡āĻ•ā§‡ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻŦāĻžāĻ•āĻŋ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻšā§āĻ¯āĻžāĻ, RDBMS-āĻ āĻāĻŸāĻŋ CREATE VIEW āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻŦ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻāĻ­āĻžāĻŦā§‡ āĻ˛āĻŋāĻ–āĻ˛ā§‡ āĻ–ā§āĻŦ āĻāĻ•āĻŸāĻž āĻĒāĻĄāĻŧāĻž āĻŽāĻ¨ā§‡ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤
  • āĻ•ā§‹āĻ¨ āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻŋāĻ• āĻĢāĻžāĻāĻ• āĻ¨ā§‡āĻ‡. āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¸ (āĻŸā§‡āĻŦāĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡) āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ•ā§āĻ¯āĻžāĻ˛ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻŽāĻ¤ā§‹ āĻāĻ•āĻ‡āĻ­āĻžāĻŦā§‡ (āĻ§āĻ°ā§‡ āĻ¨āĻŋāĻšā§āĻ›āĻŋ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¯āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻ†āĻ•āĻžāĻ°ā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡)āĨ¤ āĻ¤āĻĻāĻ¨ā§āĻ¸āĻžāĻ°ā§‡, āĻ¸āĻžāĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§‡ "āĻŦāĻ¨ā§āĻ§ā§ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž" āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻšāĻœ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻāĻ‡ āĻ§āĻžāĻ°āĻŖāĻž āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻ°ā§‹ āĻ…āĻ¨ā§‡āĻ• āĻœāĻŸāĻŋāĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨. āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ†āĻĒāĻ¨āĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡ āĻāĻ‡ āĻŽāĻ¤ āĻŦāĻŋāĻŦā§ƒāĻ¤āĻŋ āĻāĻŽā§āĻŦā§‡āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:

    CONSTRAINT sold(Employee e, 1, 2019) > 100 IF name(e) = 'ПĐĩŅ‚Ņ' MESSAGE  'ЧŅ‚Đž-Ņ‚Đž ĐŸĐĩŅ‚Ņ ĐŋŅ€ĐžĐ´Đ°ĐĩŅ‚ ŅĐģиŅˆĐēĐžĐŧ ĐŧĐŊĐžĐŗĐž ĐžĐ´ĐŊĐžĐŗĐž Ņ‚ОваŅ€Đ° Đ˛ 2019 ĐŗОдŅƒ';

  • āĻ‰āĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ° āĻāĻŦāĻ‚ āĻŦāĻšā§āĻ°ā§‚āĻĒāĻ¤āĻž. āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡, āĻ†āĻĒāĻ¨āĻŋ CLASS ClassP āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ‰āĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ° āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨: Class1, Class2 āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻĒāĻ˛āĻŋāĻŽāĻ°āĻĢāĻŋāĻœāĻŽ āĻ—āĻ āĻ¨ āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ āĻŋāĻ• āĻ•āĻŋāĻ­āĻžāĻŦā§‡, āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ˛āĻŋāĻ–āĻŦ.

āĻ¯āĻĻāĻŋāĻ“ āĻāĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻŖāĻž, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻœāĻžāĻ­āĻžāĻ¤ā§‡ āĻ•āĻŋāĻ›ā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ•ā§‡ āĻ°āĻŋāĻ˛ā§‡āĻļāĻ¨āĻžāĻ˛ āĻ˛āĻœāĻŋāĻ•ā§‡ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻ¨ā§āĻĻāĻ°āĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸ā§āĻ•ā§āĻ°ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻžāĻ‡ āĻŽāĻžāĻšāĻž. āĻŽā§‚āĻ˛āĻ¤, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ "āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨" āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ RDBMS (āĻāĻ–āĻ¨ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° PostgreSQL) āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›āĻŋāĨ¤ āĻāĻ‡ āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĻŸāĻŋ āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸ā§ƒāĻˇā§āĻŸāĻŋ āĻ•āĻ°ā§‡ āĻ•āĻžāĻ°āĻŖ RDBMS āĻ•ā§āĻ¯ā§‹āĻ¯āĻŧāĻžāĻ°ā§€ āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĒāĻ°āĻŋāĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ¨ āĻœāĻžāĻ¨ā§‡ āĻ¨āĻž āĻ¯āĻž FDBMS āĻ•āĻ°ā§‡āĨ¤ āĻ¤āĻžāĻ¤ā§āĻ¤ā§āĻŦāĻŋāĻ•āĻ­āĻžāĻŦā§‡, āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻŽā§‡āĻ¨ā§āĻŸ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ•ā§‡ āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‡, āĻŦāĻŋāĻļā§‡āĻˇāĻ¤ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ°ā§€ āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ­āĻŋāĻ¯ā§‹āĻœāĻŋāĻ¤āĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨