Enterprise Resource Planning (ERP)-Systeme sind umfassende Management-Lösungen, die Unternehmen dabei unterstützen, ihre Geschäftsprozesse zu verwalten und zu optimieren. Ein ERP-System integriert verschiedene Funktionen und Geschäftsprozesse, um den Informationsfluss im Unternehmen zu erleichtern und Entscheidungsfindung zu unterstützen.

Microsoft Navision, jetzt bekannt als Dynamics 365 Business Central, ist ein beliebtes ERP-System, das eine breite Palette von Geschäftsmanagementfunktionen abdeckt, einschließlich Finanzmanagement, Lieferkettenmanagement, Kundenservice, Projektmanagement und mehr. Es unterstützt Unternehmen dabei, ihre Geschäftsprozesse zu automatisieren, zu verbinden und zu verwalten und liefert dabei eine konsolidierte Ansicht ihres Geschäfts in Echtzeit.

Datenmodell für ein einfaches Test-ERP-System

Für unser Test-ERP-System werden wir ein einfaches Datenmodell erstellen, das einige der Kernkomponenten eines typischen ERP-Systems wie Kunden, Produkte, Lieferanten, Bestellungen und Bestelldetails berücksichtigt.

Hier das nötige SQL um unsere Datenbank und die nötigen Tabellen zu erzeugen, DEV_ERP wird unsere produktive Anwendungsdatenbank von wo wir über einen täglichen ETL Prozess die Daten abholen werden.:

CREATE DATABASE DEV_ERP
GO
USE DEV_ERP
GO

-- Benutzer Tabelle
CREATE TABLE Benutzer (
BenutzerID INT PRIMARY KEY IDENTITY(1,1),
Benutzername NVARCHAR(255),
Passwort NVARCHAR(255),
Email NVARCHAR(255),
Adresse NVARCHAR(1024),
Telefonnummer NVARCHAR(20)
);

-- Kategorie Tabelle
CREATE TABLE Kategorie (
KategorieID INT PRIMARY KEY IDENTITY(1,1),
KategorieName NVARCHAR(255),
Beschreibung NVARCHAR(1024)
);

-- Produkt Tabelle
CREATE TABLE Produkt (
ProduktID INT PRIMARY KEY IDENTITY(1,1),
ProduktName NVARCHAR(255),
Beschreibung NVARCHAR(1024),
Preis DECIMAL(10, 2),
MinMenge INT,
KategorieID INT FOREIGN KEY REFERENCES Kategorie(KategorieID)
);

-- Bestellung Tabelle
CREATE TABLE Bestellung (
    BestellungID INT PRIMARY KEY IDENTITY(1,1),
    BenutzerID INT FOREIGN KEY REFERENCES Benutzer(BenutzerID),
    Bestelldatum DATETIME,
    BeginnBearbeitungDatum DATETIME,
    Versanddatum DATETIME,
    Lieferdatum DATETIME,
    VersenderID INT,
    Status NVARCHAR(100)
);

-- Versender Tabelle
CREATE TABLE Versender (
    VersenderID INT PRIMARY KEY IDENTITY(1,1),
    VersenderName NVARCHAR(255),
    Beschreibung NVARCHAR(1024)
);

-- FOREIGN KEY zwischen Bestellung und Versender
ALTER TABLE Bestellung
ADD FOREIGN KEY (VersenderID) REFERENCES Versender(VersenderID);


-- BestellDetail Tabelle
CREATE TABLE BestellDetail (
BestellDetailID INT PRIMARY KEY IDENTITY(1,1),
BestellungID INT FOREIGN KEY REFERENCES Bestellung(BestellungID),
ProduktID INT FOREIGN KEY REFERENCES Produkt(ProduktID),
Menge INT,
Preis DECIMAL(10, 2)
);

-- Warenkorb Tabelle
CREATE TABLE Warenkorb (
WarenkorbID INT PRIMARY KEY IDENTITY(1,1),
BenutzerID INT FOREIGN KEY REFERENCES Benutzer(BenutzerID)
);

-- WarenkorbArtikel Tabelle
CREATE TABLE WarenkorbArtikel (
WarenkorbArtikelID INT PRIMARY KEY IDENTITY(1,1),
WarenkorbID INT FOREIGN KEY REFERENCES Warenkorb(WarenkorbID),
ProduktID INT FOREIGN KEY REFERENCES Produkt(ProduktID),
Menge INT
);

-- Zahlung Tabelle
CREATE TABLE Zahlung (
ZahlungID INT PRIMARY KEY IDENTITY(1,1),
BestellungID INT FOREIGN KEY REFERENCES Bestellung(BestellungID),
Zahlungsart NVARCHAR(100),
Zahlungsbetrag DECIMAL(10, 2),
Zahlungsdatum DATETIME
);

-- Lager Tabelle
CREATE TABLE Lager (
LagerID INT PRIMARY KEY IDENTITY(1,1),
LagerName NVARCHAR(100),
Adresse NVARCHAR(255),
Kapazität INT
);

-- Lagerbestand Tabelle
CREATE TABLE Lagerbestand (
LagerbestandID INT PRIMARY KEY IDENTITY(1,1),
LagerID INT,
ProduktID INT,
Lagerbestand INT,
FOREIGN KEY (LagerID) REFERENCES Lager(LagerID),
FOREIGN KEY (ProduktID) REFERENCES Produkt(ProduktID)
);

-- ServiceAnfragen Tabelle
CREATE TABLE ServiceAnfragen (
AnfrageID INT PRIMARY KEY IDENTITY(1,1),
BenutzerID INT,
Erstellungsdatum DATE,
Status NVARCHAR(50),
Beschreibung NVARCHAR(1000),
Lösung NVARCHAR(1000),
FOREIGN KEY (BenutzerID) REFERENCES Benutzer(BenutzerID)
);

-- SupportTickets  Tabelle
CREATE TABLE SupportTickets (
TicketID INT PRIMARY KEY IDENTITY(1,1),
AnfrageID INT,
ZuweisenAn NVARCHAR(50),
Priorität NVARCHAR(50),
FOREIGN KEY (AnfrageID) REFERENCES ServiceAnfragen(AnfrageID)
);

Ein paar Hinweise zum obigen SQL-Script:

  • Ich habe NVARCHAR für die Zeichenfelder und DECIMAL für den Preis verwendet. Dies sind allgemeine Datentypen und könnten je nach Ihren speziellen Anforderungen angepasst werden.
  • Die IDENTITY(1,1) Funktion wird verwendet, um automatisch Zählwerte für die Primärschlüsselfelder zu erstellen. Der erste Parameter gibt den Startwert an, der zweite Parameter gibt den Schritt an, um den der Wert bei jedem neuen Datensatz erhöht wird.

Damit haben wir unser Datenmodell für unser Test ERP:

  1. Benutzer
    • BenutzerID (Primärschlüssel)
    • Benutzername
    • Passwort
    • Email
    • Adresse
    • Telefonnummer
  2. Produkt
    • ProduktID (Primärschlüssel)
    • ProduktName
    • Beschreibung
    • Preis
    • MinMenge
    • KategorieID (Fremdschlüssel)
  3. Kategorie
    • KategorieID (Primärschlüssel)
    • KategorieName
    • Beschreibung
  4. Bestellung
    • BestellungID (Primärschlüssel)
    • BenutzerID (Fremdschlüssel)
    • Bestelldatum
    • Versanddatum
    • Status
  5. BestellDetail
    • BestellDetailID (Primärschlüssel)
    • BestellungID (Fremdschlüssel)
    • ProduktID (Fremdschlüssel)
    • Menge
    • Preis
  6. Warenkorb
    • WarenkorbID (Primärschlüssel)
    • BenutzerID (Fremdschlüssel)
  7. WarenkorbArtikel
    • WarenkorbArtikelID (Primärschlüssel)
    • WarenkorbID (Fremdschlüssel)
    • ProduktID (Fremdschlüssel)
    • Menge
  8. Zahlung
    • ZahlungID (Primärschlüssel)
    • BestellungID (Fremdschlüssel)
    • Zahlungsart
    • Zahlungsbetrag
    • Zahlungsdatum
  9. Lager
    • LagerID (Primärschlüssel)
    • LagerName
    • Adresse
    • Kapazität
  10. Lagerbestand
    • LagerbestandID (Primärschlüssel)
    • LagerID (Fremdschlüssel)
    • ProduktID (Fremdschlüssel)
    • Lagerbestand
  11. ServiceAnfragen
    • AnfrageID (Primärschlüssel)
    • BenutzerID (Fremdschlüssel)
    • Erstellungsdatum
    • Status
    • Beschreibung
    • Lösung
  12. SupportTickets
    • TicketID (Primärschlüssel)
    • AnfrageID (Fremdschlüssel)
    • ZuweisenAn
    • Priorität

Beziehungen:

  • Ein Benutzer kann mehrere Bestellungen haben, aber jede Bestellung gehört genau einem Benutzer.
  • Jede Bestellung kann mehrere BestellDetails haben, aber jedes BestellDetail gehört genau einer Bestellung.
  • Jedes Produkt kann in mehreren BestellDetails sein, aber jedes BestellDetail bezieht sich auf genau ein Produkt.
  • Jedes Produkt gehört genau einer Kategorie, aber eine Kategorie kann mehrere Produkte haben.
  • Ein Benutzer kann genau einen Warenkorb haben, aber jeder Warenkorb gehört genau einem Benutzer.
  • Ein Warenkorb kann mehrere WarenkorbArtikel haben, aber jedes WarenkorbArtikel gehört genau einem Warenkorb.
  • Jedes Produkt kann in mehreren WarenkorbArtikel Einträgen sein, aber jedes WarenkorbArtikel bezieht sich auf genau ein Produkt.
  • Jede Bestellung kann genau eine Zahlung haben, aber jede Zahlung gehört genau einer Bestellung.
  • Jedes Lager kann mehrere Lagerbestände haben, aber jeder Lagerbestand gehört genau zu einem Produkt.
  • Jeder Benutzer kann mehrere ServiceAnfragen haben, jedoch jedes SupportTicket gehört genau zu einer ServiceAnfrage.

Dieses SQL-Script ist dazu entworfen, um Testdaten für eine ERP-Datenbank (DEV_ERP) zu generieren. Diese Daten unterstützen die Validierung von Funktionalitäten und Leistungstests in einer Entwicklungs- oder Testumgebung. Es behandelt verschiedene Tabellen wie Benutzer, Bestellung, Produkt, Kategorie, BestellDetail, Warenkorb, WarenkorbArtikel, Zahlung, Lager, Lagerbestand, ServiceAnfragen und SupportTickets, und füllt diese mit Beispielwerten.

  1. Benutzer & Bestellungen
    • @AnhahlBenutzer und @AnhahlBestellungen bestimmen die Anzahl der zu generierenden Benutzer und Bestellungen.
    • Benutzernamen, Passwörter, E-Mail-Adressen, physische Adressen und Telefonnummern werden für jeden Benutzer generiert.
    • Bestelldaten, einschließlich Status und Versanddatum, werden für jede Bestellung generiert.
  2. Temporäre Tabelle
    • #tempTestData wird genutzt, um vordefinierte Werte für die Generierung von realistischen Namen, Adressen, etc. zu speichern.
    • Diese Tabelle wird nach dem Befüllen der Haupttabellen wieder gelöscht, um Ressourcen zu schonen.
  3. Produkte und Kategorien
    • Produkte und Kategorien werden mit vordefinierten Namen und Beschreibungen erstellt und ansonsten zufällig generierten Werten zugewiesen.
  4. Zusätzliche Details
    • Weitere Details für Bestellungen, Warenkörbe und Zahlungen werden zufällig generiert, um eine realistische Testdaten-Umgebung zu schaffen.
    • Produkte werden zufällig den Bestellungen und Warenkörben zugeordnet.
  5. Lager und Bestandsmanagement
    • Lagerbestände werden für Produkte generiert, wobei die Zugehörigkeit zum Lager zufällig bestimmt wird.
  6. Service Anfragen und Support Tickets
    • Jede Anfrage und jedes Ticket werden mit einem zufälligen Status, einer Beschreibung und, falls zutreffend, einer Lösung erstellt.
USE DEV_ERP
GO

DECLARE @AnhahlBenutzer INT = 485;
DECLARE @AnhahlBestellungen INT = 14581;

DECLARE @i INT = 1;
DECLARE @count INT = 1;
DECLARE @countData INT = 1;
DECLARE @benutzername NVARCHAR(255);
DECLARE @vorname NVARCHAR(255);
DECLARE @nachname NVARCHAR(255);
DECLARE @passwort NVARCHAR(255);
DECLARE @email NVARCHAR(255);
DECLARE @adresse NVARCHAR(1024);
DECLARE @strasse NVARCHAR(255);
DECLARE @ort NVARCHAR(255);
DECLARE @telefonnummer NVARCHAR(20);
DECLARE @bestelldatum DATETIME;
DECLARE @beginnBearbeitungDatum DATETIME;
DECLARE @lieferdatum DATETIME;
DECLARE @versanddatum DATETIME;
DECLARE @status NVARCHAR(100);
DECLARE @versenderID INT;

DECLARE @FromDate DATETIME2(0)
DECLARE @ToDate   DATETIME2(0)

----für welchen Bereich wir unsere Testdaten erzeugen wollen.
SET @FromDate = '01.01.2022 08:22:13' 
SET @ToDate = '08.10.2023 17:56:31'
DROP TABLE IF EXISTS #tempTestData ; 
CREATE TABLE #tempTestData 
(  
    ID   INT   NOT NULL ,  	
    ArtData   NVARCHAR(20),	 
	DataWert NVARCHAR(255)	
);  	 
 INSERT INTO #tempTestData (ID, ArtData, DataWert)	 
    VALUES 	   
(1,  'Vorname','Sophie'), 
(2,  'Vorname','Paul'),	
(3,  'Vorname','David'),	
(4,  'Vorname','Lina'),	
(5,  'Vorname','Daniel'),	
(6,  'Vorname','Philipp'),	
(7,  'Vorname','Felix'),
(8,  'Vorname','Mattis'),
(9,  'Vorname','Andreas'),	
(10, 'Vorname','Eren'),
(11, 'Vorname','Martin'),	
(12, 'Vorname','Frank'),	
(13, 'Vorname','Till'),
(14, 'Vorname','Amina'),	
(15, 'Vorname','Anne'),	
(16, 'Vorname','Asya'),	
(17, 'Vorname','Erika'),	
(18, 'Vorname','Dilara'),
(18, 'Vorname','Flora'),
(20, 'Vorname','Giulia'),
(1,  'Nachname','Schmidt'),
(2,  'Nachname','Schneider'),	
(3,  'Nachname','Fischer'),	
(4,  'Nachname','Weber'),	
(5,  'Nachname','Meyer'),	
(6,  'Nachname','Wagner'),	
(7,  'Nachname','Becker'),	
(8,  'Nachname','Schulz'),	
(9,  'Nachname','Hoffmann'),	
(10, 'Nachname','Koch'),	
(11, 'Nachname','Bauer'),	
(12, 'Nachname','Richter'),	
(13, 'Nachname','Klein'),	
(14, 'Nachname','Wolf'),	
(15, 'Nachname','Neumann'),
(16, 'Nachname','Schwarz'),	
(17, 'Nachname','Zimmermann'),
(18, 'Nachname','Braun'),	
(19, 'Nachname','Hofmann'),	
(20, 'Nachname','Fuchs'),
(1,  'Strasse','Hopfenweg'),	
(2,  'Strasse','Hasenmoorweg'),	
(3,  'Strasse','Heußweg'),
(4,  'Strasse','Hummelsbütteler Steindamm'),	
(5,  'Strasse','Hofweg'),	
(6,  'Strasse','Am Dorfanger'),
(7,  'Strasse','Billeweg'),	
(8,  'Strasse','Jägerlauf'),	
(9,  'Strasse','Krückauweg'),	
(10, 'Strasse','Kurzer Kamp'),
(11, 'Strasse','Lemsahler Weg'),
(12, 'Strasse','Lindenweg'),	
(13, 'Strasse','Mittelstraße'),	
(14, 'Strasse','Müllerstraße'),	
(15, 'Strasse','Ossenmoorring'),	
(16, 'Strasse','Neue Straße'),	
(17, 'Strasse','Op de Hütt'),	
(18, 'Strasse','Op den Kamp'),
(19, 'Strasse','Pinnauweg'),	
(20, 'Strasse','Poppenbütteler Straße'),	
(1,  'Adresse','71404 Korb'),	
(2,  'Adresse','93057 Regensburg'),	
(3,  'Adresse','16866 Gumtow'),	
(4,  'Adresse','73257 Köngen'),	
(5,  'Adresse','73326 Deggingen'),	
(6,  'Adresse','77793 Gutach (Schwarzwaldbahn)'),	
(7,  'Adresse','79292 Pfaffenweiler'),
(8,  'Adresse','93346 Ihrlerstein'),	
(9,  'Adresse','93348 Kirchdorf'),	
(10, 'Adresse','93351 Painten'),
(11, 'Adresse','93352 Rohr in Niederbayern'),	
(12, 'Adresse','86757 Wallerstein'),
(13, 'Adresse','86759 Wechingen'),	
(14, 'Adresse','86807 Buchloe'),	
(15, 'Adresse','86825 Bad Wörishofen'),	
(16, 'Adresse','14793 Gräben'),	
(17, 'Adresse','14793 Rottstock'),
(18, 'Adresse','14793 Ziesar'),
(19, 'Adresse','14797 Kloster Lehnin'),
(20, 'Adresse','14798 Havelsee');
-- Benutzer	
WHILE @i <= @AnhahlBenutzer	
BEGIN	 	    
	SET @vorname = (Select nname.DataWert from #tempTestData nname WHERE nname.ArtData = 'Nachname' AND  nname.ID =FLOOR(RAND()*(19-1+1))+1);
	SET @nachname = (Select nname.DataWert from #tempTestData nname WHERE nname.ArtData = 'Nachname' AND  nname.ID =FLOOR(RAND()*(19-1+1))+1);
	SET @benutzername = @vorname + ' '  + @nachname;
		SET @passwort = CAST(FLOOR(RAND()*(352545-1+1))+1 AS NVARCHAR);	
		SET @email = @nachname + '_' + CAST(@i AS NVARCHAR(10)) + '@onlinedatawarehouse.de';
	SET @strasse =( Select Str.DataWert  from #tempTestData Str  WHERE  Str.ArtData = 'Strasse' AND  Str.ID =FLOOR(RAND()*(19-1+1))+1);
	SET @ort =( Select  adr.DataWert from #tempTestData adr WHERE adr.ArtData = 'Adresse' AND  adr.ID =FLOOR(RAND()*(19-1+1))+1);	
		SET @adresse  = @strasse + ' ' + CAST(FLOOR(RAND()*(500-1+1))+1 AS NVARCHAR)  + ', '  + @ort; 	  
		SET @telefonnummer = ( Select CAST('0' + CAST(FLOOR(RAND()*(9-0+1))+1 AS NVARCHAR(10)) + CAST(FLOOR(RAND()*(9-0+1))+1  AS NVARCHAR(10)) + CAST(FLOOR(RAND()*(19-1+1))+1 AS NVARCHAR(10))+ CAST(FLOOR(RAND()*(19-1+1))+1 AS NVARCHAR(10))+ CAST(FLOOR(RAND()*(19-1+1))+1 AS NVARCHAR(10))+ CAST(FLOOR(RAND()*(19-1+1))+1 AS NVARCHAR(10)) AS NVARCHAR(10)));	
		INSERT INTO Benutzer (Benutzername, Passwort, Email, Adresse, Telefonnummer)	  
		VALUES (@benutzername, @passwort, @email, @adresse, @telefonnummer);	   
        
		SET @i = @i + 1;	   
END

-- Testdaten für Versender hinzufügen
INSERT INTO Versender (VersenderName, Beschreibung)
VALUES 
('DPD', 'Beschreibung DPD'),
('DHL', 'Beschreibung DHL'),
('Hermes', 'Beschreibung Hermes'),
('UPS', 'Beschreibung UPS');

-- Bestellungen hinzufügen
SET @i = 1;

WHILE @i <= @AnhahlBestellungen
BEGIN
    -- Zufällige BenutzerID zwischen 1 und @AnhahlBenutzer
    DECLARE @randomUserID INT = CAST((RAND() * @AnhahlBenutzer) + 1 AS INT);
	DECLARE @Seconds INT = DATEDIFF(SECOND, @FromDate, @ToDate)
	DECLARE @Random INT = ROUND(((@Seconds-1) * RAND()), 0)
    SET @bestelldatum =DATEADD(SECOND, @Random, @FromDate); -- Zufälliges Datum in den letzten 2 Jahren
	SET @beginnBearbeitungDatum = DATEADD(MINUTE, CAST((RAND() * 1000) + 50 AS INT), @bestelldatum); -- Beginn der Bearbeitung 1-10 Tage nach Bestelldatum
    SET @versanddatum = DATEADD(MINUTE, CAST((RAND() * 3000) + 100 AS INT), @beginnBearbeitungDatum); -- Versanddatum 1-3 Tage nach Beginn der Bearbeitung
    SET @lieferdatum = DATEADD(MINUTE, CAST((RAND() * 5000) + 1000 AS INT), @versanddatum); -- Lieferdatum 1-5 Tage nach Versanddatum
    SET @versenderID = CAST((RAND() * 4) + 1 AS INT); -- Zufälliger Versender zwischen 1 und 4
    SET @status = CASE CAST((FLOOR(RAND()*(3-1+1))+1) AS INT)
                      WHEN 1 THEN 'Versendet'
                      WHEN 2 THEN 'In Bearbeitung'
                      WHEN 3 THEN 'Geliefert'
					else 'Neu'
                    END;
			
    INSERT INTO Bestellung (BenutzerID, Bestelldatum, BeginnBearbeitungDatum, Versanddatum, Lieferdatum, VersenderID, Status)
    VALUES (@randomUserID, @bestelldatum, @beginnBearbeitungDatum, @versanddatum, @lieferdatum, @versenderID, @status);
    
    SET @i = @i + 1;
END

-- Update, um einige Werte zu NULL zu setzen, abhängig vom Status
UPDATE Bestellung 
SET 
    BeginnBearbeitungDatum = NULL,
    Versanddatum = NULL,
    Lieferdatum = NULL
WHERE Status = 'Neu';

UPDATE Bestellung 
SET 
    Versanddatum = NULL,
    Lieferdatum = NULL
WHERE Status = 'In Bearbeitung';

UPDATE Bestellung 
SET 
    Lieferdatum = NULL
WHERE Status = 'Versendet';

-- Kategorie und Produkt hinzufügen

INSERT INTO Kategorie  (KategorieName, Beschreibung)
VALUES 
('Programmierbarkeit', 'Beschreibung für Programmierbarkeit'),
('Service Brocker', 'Beschreibung für Service Brocker'),
('Sicherheit', 'Beschreibung für Sicherheit'),
('Typen', 'Beschreibung für Typen'),
('Standardwerte', 'Beschreibung für Standardwerte'),
('Tabellen', 'Beschreibung für Tabellen'),
('Datenbanken', 'Beschreibung für Datenbanken'),
('Speicher', 'Beschreibung für Speicher'),
('Regeln', 'Beschreibung für Regeln'),
('Funktionen', 'Beschreibung für Funktionen');

DECLARE @j INT = 1;
WHILE @j <= 10
BEGIN
  
    
    DECLARE @k INT = 1;
    WHILE @k <= 7
    BEGIN
        INSERT INTO Produkt (ProduktName, Beschreibung, Preis, MinMenge, KategorieID)
        VALUES ('Produkt' + CAST(((@j-1)*7)+@k AS NVARCHAR(10)), 'Beschreibung für Produkt' + CAST(((@j-1)*7)+@k AS NVARCHAR(10)), 
                CAST(ROUND(RAND() * 100, 2) AS DECIMAL(10, 2)), CAST(RAND() * 10 AS INT), @j);
        
        SET @k = @k + 1;
    END
    
    SET @j = @j + 1;
END

-- BestellDetail, Warenkorb, WarenkorbArtikel und Zahlung hinzufügen
SET @i = 1;
WHILE @i <= @AnhahlBestellungen
BEGIN
    -- Zufällige ProduktID zwischen 1 und 70
    DECLARE @randomProductID INT = CAST((RAND() * 70) + 1 AS INT);
    INSERT INTO BestellDetail (BestellungID, ProduktID, Menge, Preis)
    VALUES (@i, @randomProductID, CAST((RAND() * 10) + 1 AS INT), 
            (SELECT Preis FROM Produkt WHERE ProduktID = @randomProductID));
    
    -- Zufällige BenutzerID zwischen 1 und @AnhahlBenutzer
    Set @randomUserID = CAST((RAND() * @AnhahlBenutzer) + 1 AS INT);
    INSERT INTO Warenkorb (BenutzerID)
    VALUES (@randomUserID);
    
    -- Zufällige ProduktID zwischen 1 und 70
    SET @randomProductID = CAST((RAND() * 70) + 1 AS INT);
    INSERT INTO WarenkorbArtikel (WarenkorbID, ProduktID, Menge)
    VALUES (@i, @randomProductID, CAST((RAND() * 10) + 1 AS INT));
    
    INSERT INTO Zahlung (BestellungID, Zahlungsart, Zahlungsbetrag, Zahlungsdatum)
    VALUES (@i, CASE CAST((FLOOR(RAND()*(3-1+1))+1) AS INT)
                      WHEN 1 THEN 'Kreditkarte'
                      WHEN 2 THEN 'PayPal'
                      WHEN 3 THEN 'Rechnung'
  else 'Lastschrift' END, 
            (SELECT SUM(Preis * Menge) FROM BestellDetail WHERE BestellungID = @i),
            DATEADD(DAY, CAST((RAND() * 10) + 1 AS INT), 
            (SELECT Bestelldatum FROM Bestellung WHERE BestellungID = @i)));
    
    SET @i = @i + 1;
END

-- Lager
INSERT INTO Lager (LagerName, Adresse, Kapazität)
VALUES 
('Lager Lange Straße', 'Lagerstraße 1', 1000),
('Außenlager', 'Lagerstraße 2', 2000);

-- Lagerbestand
SET @count = 1;
WHILE @count <= 70
BEGIN
    INSERT INTO Lagerbestand (LagerID, ProduktID, Lagerbestand)
    VALUES 
    (1 + (@count % 2), @count, FLOOR(RAND()*(100-0+1))+3);
    SET @count = @count + 1;
END

-- ServiceAnfragen
SET @count = 1;
WHILE @count <= 100
BEGIN
    INSERT INTO ServiceAnfragen (BenutzerID, Erstellungsdatum, Status, Beschreibung, Lösung)
    VALUES 
  (FLOOR(RAND()*((@AnhahlBenutzer -1)-1+1))+1, DATEADD(DAY, -@count, GETDATE()), 
     CASE WHEN @count%2 = 0 THEN 'Offen' ELSE 'Gelöst' END, 
     'Problem ' + CAST(@count AS NVARCHAR), 
     'Lösung ' + CAST(@count AS NVARCHAR));
    SET @count = @count + 1;
END

-- SupportTickets
SET @count = 1;
WHILE @count <= 100
BEGIN
    INSERT INTO SupportTickets (AnfrageID, ZuweisenAn, Priorität)
    VALUES 
    (@count, 
     CASE WHEN @count%2 = 0 THEN 'SupportBenutzer1' ELSE 'SupportBenutzer2' END, 
     CASE WHEN @count%2 = 0 THEN 'Hoch' ELSE 'Niedrig' END);
    SET @count = @count + 1;
END

DROP TABLE IF EXISTS #tempTestData ; 

Wichtige Hinweise:

  • Zufälligkeit: Die meisten Datenpunkte werden durch zufällige Werte oder Auswahl aus einer vorgegebenen Liste generiert, um eine Vielfalt von Szenarien für Tests zu ermöglichen.
  • Konsistenz: Während das Script darauf abzielt, eine Vielzahl von Daten zu erzeugen, ist es wichtig sicherzustellen, dass diese Daten in einer Weise generiert werden, die Geschäftslogik und Workflows nicht verletzt.
  • Anpassbarkeit: Dieses Script kann nach Bedarf angepasst werden. Sie können die vordefinierten Namen, Adressen und andere Werte in der temporären Tabelle anpassen, um die für Ihre Testzwecke relevanten Daten zu generieren.
  • Leistung: Beachten Sie, dass das Generieren einer großen Menge von Daten eine beträchtliche Menge an Ressourcen in Anspruch nehmen kann. Stellen Sie sicher, dass Ihr System ausreichend Ressourcen hat oder passen Sie die Anzahl der generierten Datenpunkte entsprechend an.
  • Verwendung: Dieses Script sollte ausschließlich in einer Entwicklungs- oder Testumgebung verwendet werden und niemals auf einer Produktionsdatenbank ausgeführt werden.