Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
8.2 kB
2
Indexable
Never
-- Czyszczenie tabel, jeśli istnieją
IF OBJECT_ID('fakt_sprzedazy', 'U') IS NOT NULL
    DROP TABLE fakt_sprzedazy;
IF OBJECT_ID('wymiar_produkty', 'U') IS NOT NULL
    DROP TABLE wymiar_produkty; 
IF OBJECT_ID('wymiar_klienci', 'U') IS NOT NULL
    DROP TABLE wymiar_klienci;
IF OBJECT_ID('wymiar_data', 'U') IS NOT NULL
    DROP TABLE wymiar_data;

-- Tworzenie tabel
CREATE TABLE wymiar_data (
    data DATE PRIMARY KEY,
    rok INT,
    miesiac INT,
    dzien INT
);

CREATE TABLE wymiar_produkty (
    id INT PRIMARY KEY,
    nazwa VARCHAR(100),
    kategoria VARCHAR(50),
    cena FLOAT
);

CREATE TABLE wymiar_klienci (
    id INT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50),
    email VARCHAR(100)
);

CREATE TABLE fakt_sprzedazy (
    id INT PRIMARY KEY,
    data_sprzedazy DATE,
    id_produktu INT,
    id_klienta INT,
    kwota FLOAT,
    FOREIGN KEY (data_sprzedazy) REFERENCES wymiar_data(data),
    FOREIGN KEY (id_produktu) REFERENCES wymiar_produkty(id),
    FOREIGN KEY (id_klienta) REFERENCES wymiar_klienci(id)
);

-- Przykładowe dane


-- Wstawianie danych do tabeli fakt_sprzedazy

DECLARE @startDate DATE = '2024-01-01';
DECLARE @endDate DATE = '2024-12-31';

WHILE @startDate <= @endDate
BEGIN
    INSERT INTO wymiar_data (data, rok, miesiac, dzien)
    VALUES (
        @startDate,
        YEAR(@startDate),
        MONTH(@startDate),
        DAY(@startDate)
    );
    SET @startDate = DATEADD(DAY, 1, @startDate);
END;

INSERT INTO wymiar_produkty (id, nazwa, kategoria, cena)
VALUES
    (1, 'Laptop', 'Elektronika', 3000.00),
    (2, 'Smartfon', 'Elektronika', 1500.00),
    (3, 'Tablet', 'Elektronika', 800.00),
    (4, 'Drukarka', 'Elektronika', 400.00),
    (5, 'Skuter', 'Transport', 2500.00),
    (6, 'Rower', 'Transport', 1200.00),
    (7, 'Hulajnoga', 'Transport', 300.00),
    (8, 'Kurtka', 'Odzież', 200.00),
    (9, 'Buty', 'Odzież', 150.00),
    (10, 'Koszula', 'Odzież', 100.00),
    (11, 'Książka', 'Kultura', 50.00),
    (12, 'Film', 'Kultura', 30.00),
    (13, 'Muzyka', 'Kultura', 20.00),
    (14, 'Głośnik', 'Elektronika', 300.00),
    (15, 'Słuchawki', 'Elektronika', 150.00),
    (16, 'Monitor', 'Elektronika', 900.00),
    (17, 'Myszka', 'Elektronika', 50.00),
    (18, 'Klawiatura', 'Elektronika', 100.00),
    (19, 'Pendrive', 'Elektronika', 20.00),
    (20, 'Kabel HDMI', 'Elektronika', 15.00),
    (21, 'Router', 'Elektronika', 150.00),
    (22, 'Kamera', 'Elektronika', 1200.00),
    (23, 'Statyw', 'Elektronika', 100.00),
    (24, 'Obiektyw', 'Elektronika', 800.00),
    (25, 'Plecak', 'Akcesoria', 100.00),
    (26, 'Torba', 'Akcesoria', 200.00),
    (27, 'Zegarek', 'Biżuteria', 500.00),
    (28, 'Bransoletka', 'Biżuteria', 150.00),
    (29, 'Kolczyki', 'Biżuteria', 200.00),
    (30, 'Pierścionek', 'Biżuteria', 300.00);

-- Wstawianie danych do tabeli wymiar_klienci

INSERT INTO wymiar_klienci (id, imie, nazwisko, email)
VALUES
    (1, 'Jan', 'Kowalski', 'jan.kowalski@example.com'),
    (2, 'Anna', 'Nowak', 'anna.nowak@example.com'),
    (3, 'Paweł', 'Wiśniewski', 'pawel.wisniewski@example.com'),
    (4, 'Ewa', 'Wójcik', 'ewa.wojcik@example.com'),
    (5, 'Marek', 'Kowalczyk', 'marek.kowalczyk@example.com'),
    (6, 'Agnieszka', 'Kamińska', 'agnieszka.kaminska@example.com'),
    (7, 'Tomasz', 'Lewicki', 'tomasz.lewicki@example.com'),
    (8, 'Karolina', 'Sikorska', 'karolina.sikorska@example.com'),
    (9, 'Robert', 'Dąbrowski', 'robert.dabrowski@example.com'),
    (10, 'Marta', 'Zalewska', 'marta.zalewska@example.com'),
    (11, 'Krzysztof', 'Ostrowski', 'krzysztof.ostrowski@example.com'),
    (12, 'Dorota', 'Głowacka', 'dorota.glowacka@example.com'),
    (13, 'Piotr', 'Kaczmarek', 'piotr.kaczmarek@example.com'),
    (14, 'Sylwia', 'Piotrowska', 'sylwia.piotrowska@example.com'),
    (15, 'Grzegorz', 'Szymański', 'grzegorz.szymanski@example.com'),
    (16, 'Magdalena', 'Woźniak', 'magdalena.wozniak@example.com'),
    (17, 'Michał', 'Majewski', 'michal.majewski@example.com'),
    (18, 'Joanna', 'Rutkowska', 'joanna.rutkowska@example.com'),
    (19, 'Marcin', 'Sadowski', 'marcin.sadowski@example.com'),
    (20, 'Katarzyna', 'Wysocka', 'katarzyna.wysocka@example.com'),
    (21, 'Bartłomiej', 'Zieliński', 'bartlomiej.zielinski@example.com'),
    (22, 'Izabela', 'Jankowska', 'izabela.jankowska@example.com'),
    (23, 'Sebastian', 'Zawadzki', 'sebastian.zawadzki@example.com'),
    (24, 'Dominika', 'Sawicka', 'dominika.sawicka@example.com'),
    (25, 'Wojciech', 'Borkowski', 'wojciech.borkowski@example.com'),
    (26, 'Patrycja', 'Lis', 'patrycja.lis@example.com'),
    (27, 'Łukasz', 'Adamski', 'lukasz.adamski@example.com'),
    (28, 'Aleksandra', 'Król', 'aleksandra.krol@example.com'),
    (29, 'Mateusz', 'Czarnecki', 'mateusz.czarnecki@example.com'),
    (30, 'Monika', 'Gajewska', 'monika.gajewska@example.com');


INSERT INTO fakt_sprzedazy (id, data_sprzedazy, id_produktu, id_klienta, kwota)
VALUES
    (1, '2024-01-05', 1, 1, 250.00),
    (2, '2024-01-10', 2, 2, 100.00),
    (3, '2024-02-15', 3, 3, 50.00),
    (4, '2024-03-20', 4, 4, 3000.00),
    (5, '2024-04-25', 5, 5, 1500.00),
    (6, '2024-05-30', 6, 6, 800.00),
    (7, '2024-06-05', 7, 7, 400.00),
    (8, '2024-07-10', 8, 8, 2500.00),
    (9, '2024-08-15', 9, 9, 1200.00),
    (10, '2024-09-20', 10, 10, 300.00),
    (11, '2024-10-25', 1, 2, 250.00),
    (12, '2024-11-30', 2, 3, 100.00),
    (13, '2024-12-05', 3, 4, 50.00),
    (14, '2024-12-10', 4, 5, 3000.00),
    (15, '2024-12-15', 5, 6, 1500.00),
    (16, '2024-12-20', 6, 7, 800.00),
    (17, '2024-12-25', 7, 8, 400.00),
    (18, '2024-12-30', 8, 9, 2500.00),
    (19, '2024-01-04', 9, 10, 1200.00),
    (20, '2024-01-09', 10, 1, 300.00),
    (21, '2024-01-14', 1, 2, 250.00),
    (22, '2024-01-19', 2, 3, 100.00),
    (23, '2024-01-24', 3, 4, 50.00),
    (24, '2024-01-29', 4, 5, 3000.00),
    (25, '2024-02-03', 5, 6, 1500.00),
    (26, '2024-02-08', 6, 7, 800.00),
    (27, '2024-02-13', 7, 8, 400.00),
    (28, '2024-02-18', 8, 9, 2500.00),
    (29, '2024-02-23', 9, 10, 1200.00),
    (30, '2024-02-28', 10, 1, 300.00),
    (31, '2024-03-04', 1, 2, 250.00),
    (32, '2024-03-09', 2, 3, 100.00),
    (33, '2024-03-14', 3, 4, 50.00),
    (34, '2024-03-19', 4, 5, 3000.00);



-- Obsługa Delty Danych

-- Aktualizowanie istniejących wierszy w tabeli fakt_sprzedazy
UPDATE fakt_sprzedazy
SET data_sprzedazy = '2024-05-01', id_produktu = 1, id_klienta = 1, kwota = 1103.00
WHERE id = 1;

UPDATE fakt_sprzedazy
SET data_sprzedazy = '2024-05-02', id_produktu = 2, id_klienta = 2, kwota = 20.00
WHERE id = 2;

-- Dodawanie nowych wierszy do tabeli fakt_sprzedazy
IF NOT EXISTS (SELECT * FROM fakt_sprzedazy WHERE id = 4)
BEGIN
    INSERT INTO fakt_sprzedazy (id, data_sprzedazy, id_produktu, id_klienta, kwota)
    VALUES (4, '2024-05-04', 3, 3, 90.00);
END;



SELECT * FROM fakt_sprzedazy


-- Implementacja SCD2 dla tabeli wymiarów
IF OBJECT_ID('wymiar_produkty_scd2', 'U') IS NOT NULL
    DROP TABLE wymiar_produkty_scd2;
CREATE TABLE wymiar_produkty_scd2 (
    id INT,
    nazwa VARCHAR(100),
    kategoria VARCHAR(50),
    cena FLOAT,
    data_start DATE,
    data_end DATE,
    PRIMARY KEY (id, data_start)
);

-- Ładowanie danych do tabeli SCD2

TRUNCATE TABLE wymiar_produkty_scd2
INSERT INTO wymiar_produkty_scd2 (id, nazwa, kategoria, cena, data_start, data_end)
SELECT id, nazwa, kategoria, cena, '2024-01-01', '9999-12-31'
FROM wymiar_produkty;

SELECT * FROM wymiar_produkty_scd2

-- Deklaracja zmiennej @currentDate
DECLARE @currentDate DATE = GETDATE();

-- Zamknięcie starego rekordu
UPDATE wymiar_produkty_scd2
SET data_end = @currentDate
WHERE id = 1 AND data_end = '9999-12-31';

SELECT * FROM wymiar_produkty_scd2

-- Wstawienie nowego rekordu
TRUNCATE TABLE wymiar_produkty_scd2
INSERT INTO wymiar_produkty_scd2 (id, nazwa, kategoria, cena, data_start, data_end)
VALUES (1, 'Monitor', 'Elektronika', 275.00, @currentDate, '9999-12-31');
Leave a Comment