Changes between Initial Version and Version 1 of Phase0


Ignore:
Timestamp:
09/04/25 00:27:45 (3 weeks ago)
Author:
213280
Comment:

Creation of phase0

Legend:

Unmodified
Added
Removed
Modified
  • Phase0

    v1 v1  
     1== Креирање на табели ==
     2
     3{{{
     4#!sql
     5CREATE TABLE [dbo].[Business]
     6(
     7    [Id] INT IDENTITY (1, 1) NOT NULL,
     8    [Name] NVARCHAR (100) NOT NULL,
     9    [Address] NVARCHAR (200) NOT NULL,
     10    [Rating] REAL NOT NULL,
     11    [PhoneNumber] NVARCHAR(15) NOT NULL,
     12    [BackGroundImage] VARBINARY(MAX) NULL,
     13    [Logo] VARBINARY(MAX) NULL,
     14    [IsOpen] BIT NOT NULL,
     15    [IsAvailable] BIT NOT NULL,
     16    [Type] INT NOT NULL,
     17    [OwnerId] INT NOT NULL,
     18    [CreatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     19    [UpdatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     20    [DeletedAt] DATETIME2 NULL,
     21    [IsDeleted] BIT NOT NULL DEFAULT 0,
     22    CONSTRAINT [PK_Business] PRIMARY KEY CLUSTERED ([Id] ASC),
     23    CONSTRAINT [FK_Business_User_OwnerId] FOREIGN KEY (OwnerId) REFERENCES [User]([Id]) ON DELETE NO ACTION,
     24);
     25}}}
     26
     27{{{
     28#!sql
     29CREATE TABLE [dbo].[FoodCategory]
     30(
     31    [Id] INT IDENTITY (1, 1) NOT NULL,
     32    [Name] NVARCHAR (100) NOT NULL,
     33    [IsAvailable] BIT NOT NULL,
     34    [BusinessId] INT NOT NULL,
     35    [CreatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     36    [UpdatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     37    [DeletedAt] DATETIME2 NULL,
     38    [IsDeleted] BIT NOT NULL DEFAULT 0,
     39    CONSTRAINT [PK_FoodCategory] PRIMARY KEY CLUSTERED ([Id] ASC),
     40    CONSTRAINT [FK_FoodCategory_Business_BusinessId] FOREIGN KEY (BusinessId) REFERENCES [Business]([Id]) ON DELETE CASCADE,
     41);
     42}}}
     43
     44{{{
     45#!sql
     46CREATE TABLE [dbo].[FoodItem]
     47(
     48    [Id] INT IDENTITY (1, 1) NOT NULL,
     49    [Name] NVARCHAR (100) NOT NULL,
     50    [Price] INT NOT NULL,
     51    [Description] NVARCHAR (300) NULL,
     52    [IsAvailable] BIT NOT NULL,
     53    [FoodItemImage] VARBINARY(MAX),
     54    [FoodCategoryId] INT NOT NULL,
     55    [CreatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     56    [UpdatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     57    [DeletedAt] DATETIME2 NULL,
     58    [IsDeleted] BIT NOT NULL DEFAULT 0,
     59    CONSTRAINT [PK_FoodItem] PRIMARY KEY CLUSTERED ([Id] ASC),
     60    CONSTRAINT [FK_FoodItem_FoodCategory_FoodCategoryId] FOREIGN KEY (FoodCategoryId) REFERENCES [FoodCategory]([Id]) ON DELETE CASCADE,
     61);
     62}}}
     63
     64{{{
     65#!sql
     66CREATE TABLE [dbo].[ItemInOrder]
     67(
     68    [Id] INT IDENTITY (1, 1) NOT NULL,
     69    [Quantity] INT NOT NULL,
     70    [FoodItemId] INT NOT NULL,
     71    [OrderId] INT NOT NULL,
     72    CONSTRAINT [PK_ItemInOrder] PRIMARY KEY CLUSTERED ([Id] ASC),
     73    CONSTRAINT [FK_ItemInOrder_FoodItem_FoodItemId] FOREIGN KEY (FoodItemId) REFERENCES [FoodItem]([Id]) ON DELETE NO ACTION,
     74    CONSTRAINT [FK_ItemInOrder_Order_OrderId] FOREIGN KEY (OrderId) REFERENCES [Order]([Id]) ON DELETE CASCADE,
     75);
     76}}}
     77
     78{{{
     79#!sql
     80CREATE TABLE [dbo].[ItemInShoppingCart]
     81(
     82    [Id] INT IDENTITY (1, 1) NOT NULL,
     83    [Quantity] INT NOT NULL,
     84    [FoodItemId] INT NOT NULL,
     85    [ShoppingCartId] INT NOT NULL,
     86    [CreatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     87    [UpdatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     88    [DeletedAt] DATETIME2 NULL,
     89    [IsDeleted] BIT NOT NULL DEFAULT 0,
     90    CONSTRAINT [PK_ItemInShoppingCart] PRIMARY KEY CLUSTERED ([Id] ASC),
     91    CONSTRAINT [FK_ItemInShoppingCart_FoodItem_FoodItemId] FOREIGN KEY (FoodItemId) REFERENCES [FoodItem]([Id]) ON DELETE NO ACTION,
     92    CONSTRAINT [FK_ItemInShoppingCart_ShoppingCard_ShoppingCartId] FOREIGN KEY (ShoppingCartId) REFERENCES [ShoppingCart]([Id]) ON DELETE CASCADE,
     93);
     94}}}
     95
     96{{{
     97#!sql
     98CREATE TABLE [dbo].[Order]
     99(
     100    [Id] INT IDENTITY (1, 1) NOT NULL,
     101    [OrderGlobalStatus] INT NOT NULL,
     102    [TotalPrice] DECIMAL NOT NULL,
     103    [DeliveryFee] DECIMAL NOT NULL,
     104    [CustomerId] INT NOT NULL,
     105    [DeliveryDriverId] INT NULL,
     106    [BusinessId] INT NOT NULL,
     107    [CreatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     108    [UpdatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     109    [DeletedAt] DATETIME2 NULL,
     110    [IsDeleted] BIT NOT NULL DEFAULT 0,
     111    CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED ([Id] ASC),
     112    CONSTRAINT [FK_Order_User_CustomerId] FOREIGN KEY (CustomerId) REFERENCES [User]([Id]) ON DELETE NO ACTION,
     113    CONSTRAINT [FK_Order_User_DeliveryDriverId] FOREIGN KEY (DeliveryDriverId) REFERENCES [User]([Id]) ON DELETE NO ACTION,
     114    CONSTRAINT [FK_Order_Business_BusinessId] FOREIGN KEY (BusinessId) REFERENCES [Business]([Id]) ON DELETE NO ACTION,
     115);
     116}}}
     117
     118{{{
     119#!sql
     120CREATE TABLE [dbo].[OrderHistory]
     121(
     122    [Id] INT IDENTITY (1, 1) NOT NULL,
     123    [TimeStamp] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     124    [OrderGlobalStatus] INT NOT NULL,
     125    [OrderId] INT NOT NULL,
     126    [UpdaterUserId] INT NOT NULL,
     127    [CreatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     128    [UpdatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     129    [DeletedAt] DATETIME2 NULL,
     130    [IsDeleted] BIT NOT NULL DEFAULT 0,
     131    CONSTRAINT [PK_OrderHistory] PRIMARY KEY CLUSTERED ([Id] ASC),
     132    CONSTRAINT [FK_OrderHistory_Order_OrderId] FOREIGN KEY (OrderId) REFERENCES [Order]([Id]) ON DELETE CASCADE,
     133    CONSTRAINT [FK_OrderHistory_User_UpdaterUserId] FOREIGN KEY (UpdaterUserId) REFERENCES [User]([Id]) ON DELETE NO ACTION,
     134);
     135}}}
     136
     137{{{
     138#!sql
     139CREATE TABLE [dbo].[Role]
     140(
     141    [Id] INT IDENTITY (1, 1) NOT NULL,
     142    [Name] NVARCHAR (50) NOT NULL,
     143    CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED ([Id] ASC),
     144);
     145}}}
     146
     147{{{
     148#!sql
     149CREATE TABLE [dbo].[ShoppingCart]
     150(
     151    [Id] INT IDENTITY (1, 1) NOT NULL,
     152    [OwnerId] INT NOT NULL,
     153    CONSTRAINT [PK_ShoppingCart] PRIMARY KEY CLUSTERED ([Id] ASC),
     154    CONSTRAINT [FK_ShoppingCart_User_OwnerId] FOREIGN KEY (OwnerId) REFERENCES [User]([Id]) ON DELETE CASCADE,
     155);
     156}}}
     157
     158{{{
     159#!sql
     160CREATE TABLE [dbo].[Token]
     161(
     162    [Id] INT IDENTITY (1, 1) NOT NULL,
     163    [AccessToken] NVARCHAR (MAX) NOT NULL,
     164    [RefreshToken] NVARCHAR (MAX) NOT NULL,
     165    [AccessTokenExpirationDate] DATETIME2 NOT NULL,
     166    [RefreshTokenExpirationDate] DATETIME2 NOT NULL,
     167    [UserId] INT NOT NULL,
     168    CONSTRAINT [PK_Token] PRIMARY KEY CLUSTERED ([Id] ASC),
     169    CONSTRAINT [FK_Token_User_UserId] FOREIGN KEY (UserId) REFERENCES [User]([Id]) ON DELETE CASCADE,
     170);
     171}}}
     172
     173{{{
     174#!sql
     175CREATE TABLE [dbo].[User]
     176(
     177    [Id] INT IDENTITY (1, 1) NOT NULL,
     178    [Email] NVARCHAR (50) NOT NULL UNIQUE,
     179    [PasswordHash] NVARCHAR (200) NOT NULL,
     180    [FirstName] NVARCHAR (100) NOT NULL,
     181    [LastName] NVARCHAR (100) NOT NULL,
     182    [RoleId] INT NOT NULL,
     183    [CreatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     184    [UpdatedAt] DATETIME2 NOT NULL DEFAULT GETUTCDATE(),
     185    [DeletedAt] DATETIME2 NULL,
     186    [IsDeleted] BIT NOT NULL DEFAULT 0,
     187    CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ([Id] ASC),
     188    CONSTRAINT [FK_User_Role_RoleId] FOREIGN KEY (RoleId) REFERENCES [Role]([Id]) ON DELETE CASCADE,
     189);
     190}}}
     191
     192----
     193
     194== Креирање на тест податоци ==
     195
     196{{{
     197#!sql
     198DECLARE @RoleId INT = 1;
     199DECLARE @NumberOfUsers INT = 1000;
     200DECLARE @InsertedUsers INT = 0;
     201DECLARE @BatchSize INT = 1000;
     202
     203WHILE @InsertedUsers < @NumberOfUsers
     204BEGIN
     205    INSERT INTO [dbo].[User]
     206        (Email, PasswordHash, FirstName, LastName, RoleId, CreatedAt, UpdatedAt, DeletedAt, IsDeleted)
     207    SELECT TOP (@BatchSize)
     208        CONCAT('user', ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) + @InsertedUsers, '@example.com'),
     209        'AQAAAAIAAYagAAAAEDiHqhqrUlhjMSqG+Wm9CP10wIioySTDOI1PEgvzV5uIoRhJAXdrXLLqQ6mSsw3lug==',
     210        CONCAT('FirstName', ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) + @InsertedUsers),
     211        CONCAT('LastName', ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) + @InsertedUsers),
     212        @RoleId,
     213        DATEADD(SECOND, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) + @InsertedUsers, GETUTCDATE()),
     214        DATEADD(SECOND, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) + @InsertedUsers, GETUTCDATE()),
     215        NULL,
     216        0
     217    FROM sys.objects a CROSS JOIN sys.objects b;
     218
     219    SET @InsertedUsers = @InsertedUsers + @BatchSize;
     220END;
     221}}}
     222
     223{{{
     224#!sql
     225DECLARE @NumberOfUsers INT = 10000;
     226DECLARE @NumberOfOrders INT = 20000000;
     227DECLARE @InsertedOrders INT = 0;
     228DECLARE @BatchSize INT = 20000;
     229DECLARE @StartDate DATETIME2 = '2021-01-01';
     230DECLARE @EndDate DATETIME2 = '2024-12-31';
     231
     232WHILE @InsertedOrders < @NumberOfOrders
     233BEGIN
     234    INSERT INTO [dbo].[Order]
     235        (OrderGlobalStatus, TotalPrice, DeliveryFee, CustomerId, DeliveryDriverId, BusinessId, CreatedAt, UpdatedAt, DeletedAt, IsDeleted)
     236    SELECT TOP (@BatchSize)
     237        CASE WHEN (ABS(CHECKSUM(NEWID())) % 10) = 0 THEN 1 ELSE (ABS(CHECKSUM(NEWID())) % 5) + 2 END,
     238        CAST((ABS(CHECKSUM(NEWID())) % 9000 + 1000) / 100.0 AS DECIMAL(10,2)),
     239        CAST((ABS(CHECKSUM(NEWID())) % 800 + 200) / 100.0 AS DECIMAL(10,2)),
     240        (ABS(CHECKSUM(NEWID())) % @NumberOfUsers) + 1,
     241        CASE WHEN (ABS(CHECKSUM(NEWID())) % 10) = 0 THEN NULL ELSE (ABS(CHECKSUM(NEWID())) % @NumberOfUsers) + 1 END,
     242        (ABS(CHECKSUM(NEWID())) % 3) + 1,
     243        DATEADD(SECOND, ABS(CHECKSUM(NEWID())) % DATEDIFF(SECOND, @StartDate, @EndDate), @StartDate),
     244        DATEADD(MINUTE, ABS(CHECKSUM(NEWID())) % 121, DATEADD(SECOND, ABS(CHECKSUM(NEWID())) % DATEDIFF(SECOND, @StartDate, @EndDate), @StartDate)),
     245        NULL,
     246        0
     247    FROM sys.objects a CROSS JOIN sys.objects b;
     248
     249    SET @InsertedOrders = @InsertedOrders + @BatchSize;
     250        PRINT CONCAT('Orders inserted: ', @InsertedOrders);
     251END;
     252}}}
     253
     254{{{
     255#!sql
     256-- ========================================
     257-- Insert ItemInOrder (batch)
     258-- ========================================
     259DECLARE @InsertedItems INT = 0;
     260DECLARE @NumberOfItemsInOrder INT = 40000000
     261DECLARE @NumberOfOrders INT = 32980003
     262DECLARE @BatchSize INT = 20000
     263
     264WHILE @InsertedItems < @NumberOfItemsInOrder
     265BEGIN
     266    INSERT INTO [dbo].[ItemInOrder]
     267        (Quantity, FoodItemId, OrderId)
     268    SELECT TOP (@BatchSize)
     269
     270                -- Quantity between 1 and 5
     271                (ABS(CHECKSUM(NEWID())) % 5) + 1 AS Quantity,
     272
     273                -- FoodItemId only between 1 and 17
     274        (ABS(CHECKSUM(NEWID())) % 17) + 1 as FoodItemId,
     275
     276                -- Attach to random existing order
     277        (ABS(CHECKSUM(NEWID())) % @NumberOfOrders) + 1 AS OrderId
     278    FROM sys.objects a CROSS JOIN sys.objects b;
     279
     280    SET @InsertedItems = @InsertedItems + @BatchSize;
     281    PRINT CONCAT('ItemInOrder inserted: ', @InsertedItems);
     282END
     283}}}
     284
     285{{{
     286#!sql
     287
     288-- ========================================
     289-- Parameters
     290-- ========================================
     291
     292DECLARE @NumberOfOrderHistory INT = 15000000; -- change as needed
     293DECLARE @NumberOfUsers INT = 1000;
     294DECLARE @NumberOfOrders INT = 10000000
     295DECLARE @InsertedHistory INT = 0;
     296DECLARE @BatchSize INT = 20000
     297
     298
     299-- ========================================
     300-- Insert OrderHistory (batch)
     301-- ========================================
     302
     303
     304WHILE @InsertedHistory < @NumberOfOrderHistory
     305BEGIN
     306    INSERT INTO [dbo].[OrderHistory]
     307        (TimeStamp, OrderGlobalStatus, OrderId, UpdaterUserId, CreatedAt, UpdatedAt, DeletedAt, IsDeleted)
     308    SELECT TOP (@BatchSize)
     309        DATEADD(MINUTE, -ROW_NUMBER() OVER(ORDER BY (SELECT NULL)), GETUTCDATE()),
     310
     311                -- Random status
     312                (ABS(CHECKSUM(NEWID())) % 6) + 1 AS OrderGlobalStatus,
     313               
     314                -- Random order id (must exist from Orders table)
     315                (ABS(CHECKSUM(NEWID())) % @NumberOfOrders) + 1 AS OrderId,
     316               
     317                -- Random updater user
     318                (ABS(CHECKSUM(NEWID())) % @NumberOfUsers) + 1 AS UpdaterUserId, 
     319
     320        GETUTCDATE(),
     321        GETUTCDATE(),
     322        NULL,
     323        0
     324    FROM sys.objects a CROSS JOIN sys.objects b;
     325
     326    SET @InsertedHistory = @InsertedHistory + @@ROWCOUNT;
     327    PRINT CONCAT('OrderHistory inserted: ', @InsertedHistory);
     328END
     329
     330
     331}}}
     332
     333
     334
     335