Untitled
unknown
plain_text
10 months ago
8.2 kB
3
Indexable
-- 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');
Editor is loading...
Leave a Comment