subscribe by email and YouTube to get notification of new posts. & videos.

Categoría: SQL Database

  • Database Arquitecture part I

    Database Arquitecture part I

    In this chapter I’m disposing my creation. This will contains the tables, and some SQL code in the form that I’m using within SP (stored procedures).

    NOTE: This applies for early version (v. 0.5).

    Latest version* are only available for purchase.


    Engine specs

    • Type of DB: SQL
    • Brand: Microsoft SQL Server Express
    • Model: Anyone since 2008 R2

    SQL NAMED INSTANCE:

    • SQLBOT

    DATABASE NAME

    • SUPERBOTS

    *for the tutorial purposes Im using an SQL 2005-2008 R2 compatible code (as that’s the one I was starting to hard–code for)

    THE TABLES

    [Main tables]

    IPS* *

    USE [superbots]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[IPS](
    	[IP.ID] [int] NOT NULL,
    	[IP] [nvarchar](10) NOT NULL,
    	[Country] [nchar](2) NOT NULL,
    	[IP.Created] [datetime2](7) NOT NULL,
    	[IP.Actived] [datetime2](7) NOT NULL,
    	[IP.Disabled] [datetime2](7) NULL,
     CONSTRAINT [PK_IPS] PRIMARY KEY CLUSTERED 
    (
    	[IP.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'If not True, then IP can be used' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'IPS', @level2type=N'COLUMN',@level2name=N'IP.Disabled'
    GO
    
    

    BOTS

    • [Bot.ID] Int PK
    • [Bot.Name] NVarChar(8)
      • example: Winform, App, UrlBased, Android, Iphone
    • [Bot.Physical] Bit 0

    USE [superbots]
    GO
    /****** Object:  Table [dbo].[BOTS]    Script Date: 13/01/2026 23:46:05 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[BOTS](
    	[Bot.ID] [int] NOT NULL,
    	[Bot.Name] [nvarchar](8) NULL,
    	[Bot.Physical] [bit] NOT NULL,
     CONSTRAINT [PK_BOTS] PRIMARY KEY CLUSTERED 
     (
    	[Bot.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    

    BOTS.INSTANCES

    • [Bot.ID] Int (FK :: [ID].[Bot])(BOTS))
    • [Bot.Instance.ID] BigInt PK
    • [Bot.Instance.Created] Datetime2
      • DEFAULT VALUE = GetDate() :: all [Created] on all tables, don’t forget
    • [Bot.Instance.Active] Bit 1

    USE [superbots]
    GO
    
    /****** Object:  Table [dbo].[BOTS.INSTANCES]    Script Date: 14/01/2026 0:20:18 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[BOTS.INSTANCES](
    	[Bot.ID] [int] NOT NULL,
    	[Bot.Instance.ID] [bigint] IDENTITY(1,1) NOT NULL,
    	[Bot.Instance.Created] [datetime2](7) NOT NULL,
    	[Bot.Instance.Active] [bit] NOT NULL,
     CONSTRAINT [PK_BOTS.INSTANCES] PRIMARY KEY CLUSTERED 
    (
    	[Bot.Instance.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES] ADD  CONSTRAINT [DF_BOTS.INSTANCES_Bot.Instance.Created]  DEFAULT (getdate()) FOR [Bot.Instance.Created]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES] ADD  CONSTRAINT [DF_BOTS.INSTANCES_Bot.Instance.Active]  DEFAULT ((0)) FOR [Bot.Instance.Active]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES]  WITH CHECK ADD  CONSTRAINT [FK_BOTS.INSTANCES_BOTS] FOREIGN KEY([Bot.ID])
    REFERENCES [dbo].[BOTS] ([Bot.ID])
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES] CHECK CONSTRAINT [FK_BOTS.INSTANCES_BOTS]
    GO
    

    BOTS.INSTANCES.DEVICES

    As a User may have a Phone, Tablet, Computer and Labtop

    USE [superbots]
    GO
    /****** Object:  Table [dbo].[BOTS.INSTANCES.DEVICES]    Script Date: 17/01/2026 11:19:57 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[BOTS.INSTANCES.DEVICES](
    	[Bot.Instance.ID] [bigint] NOT NULL,
    	[Device.ID] [int] NOT NULL,
    	[Bot.Instance.Device.ID] [int] IDENTITY(1,1) NOT NULL,
    	[Bot.Instance.Device.Created] [datetime2](7) NOT NULL,
     CONSTRAINT [PK_BOTS.INSTANCES.DEVICES] PRIMARY KEY CLUSTERED 
    (
    	[Bot.Instance.Device.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES] ADD  CONSTRAINT [DF_BOTS.INSTANCES.RESOLUTIONS_Bot.Instance.Resolution.IP.Asigned]  DEFAULT (getdate()) FOR [Bot.Instance.Device.Created]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES]  WITH CHECK ADD  CONSTRAINT [FK_BOTS.INSTANCES.DEVICES_BOTS.INSTANCES] FOREIGN KEY([Bot.Instance.ID])
    REFERENCES [dbo].[BOTS.INSTANCES] ([Bot.Instance.ID])
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES] CHECK CONSTRAINT [FK_BOTS.INSTANCES.DEVICES_BOTS.INSTANCES]
    GO
    
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'User may have 12 devices,but a maximum of 4 per day per url' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BOTS.INSTANCES.DEVICES', @level2type=N'COLUMN',@level2name=N'Bot.Instance.Device.ID'
    GO
    
    
    

    BOTS.INSTANCES.DEVICES.IPS

    USE [superbots]
    GO
    /****** Object:  Table [dbo].[BOTS.INSTANCES.DEVICES.IPS]    Script Date: 17/01/2026 11:20:52 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[BOTS.INSTANCES.DEVICES.IPS](
    	[Bot.Instance.Device.ID] [int] IDENTITY(1,1) NOT NULL,
    	[IP.ID] [int] NOT NULL,
    	[Bot.Instance.Device.IP.ID] [int] NOT NULL,
    	[Bot.Instance.Device.IP.Asigned] [datetime2](7) NOT NULL,
     CONSTRAINT [PK_BOTS.INSTANCES.DEVICES.IPS] PRIMARY KEY CLUSTERED 
    (
    	[Bot.Instance.Device.IP.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES.IPS] ADD  CONSTRAINT [DF_BOTS.INSTANCES.IPS_Bot.IP.Asigned]  DEFAULT (getdate()) FOR [Bot.Instance.Device.IP.Asigned]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES.IPS]  WITH CHECK ADD  CONSTRAINT [FK_BOTS.INSTANCES.DEVICES.IPS_BOTS.INSTANCES.DEVICES] FOREIGN KEY([Bot.Instance.Device.ID])
    REFERENCES [dbo].[BOTS.INSTANCES.DEVICES] ([Bot.Instance.Device.ID])
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES.IPS] CHECK CONSTRAINT [FK_BOTS.INSTANCES.DEVICES.IPS_BOTS.INSTANCES.DEVICES]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES.IPS]  WITH CHECK ADD  CONSTRAINT [FK_BOTS.INSTANCES.DEVICES.IPS_BOTS.INSTANCES.DEVICES.IPS] FOREIGN KEY([Bot.Instance.Device.IP.ID])
    REFERENCES [dbo].[BOTS.INSTANCES.DEVICES.IPS] ([Bot.Instance.Device.IP.ID])
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES.IPS] CHECK CONSTRAINT [FK_BOTS.INSTANCES.DEVICES.IPS_BOTS.INSTANCES.DEVICES.IPS]
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES.IPS]  WITH CHECK ADD  CONSTRAINT [FK_BOTS.INSTANCES.DEVICES.IPS_IPS] FOREIGN KEY([IP.ID])
    REFERENCES [dbo].[IPS] ([IP.ID])
    GO
    
    ALTER TABLE [dbo].[BOTS.INSTANCES.DEVICES.IPS] CHECK CONSTRAINT [FK_BOTS.INSTANCES.DEVICES.IPS_IPS]
    GO
    
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Max 4 per day as according to stats, youtube counts a max of 4 views uniqeu per day per ip, of course, user may have a home IP used by his phone, tablet, computer and labtop' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BOTS.INSTANCES.DEVICES.IPS', @level2type=N'COLUMN',@level2name=N'Bot.Instance.Device.ID'
    GO
    
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Max 4 per day per DEVICE.ID ' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BOTS.INSTANCES.DEVICES.IPS', @level2type=N'COLUMN',@level2name=N'Bot.Instance.Device.IP.ID'
    GO
    
    
    
    CREATE TRIGGER TRG_BOTS_INSTANCES_DEVICES_IPS_DenyMoreThanOneEach4hrsperDevicePerIP
    ON [BOTS.INSTANCES.DEVICES.IPS]
    AFTER INSERT
    AS
    BEGIN
        IF EXISTS (
                SELECT 1
                FROM Inserted I
                JOIN  [BOTS.INSTANCES.DEVICES.IPS] B ON  (B.[Bot.Instance.Device.ID] = I.[Bot.Instance.Device.ID] AND B.[IP.ID] = I.[IP.ID])
                WHERE B.[Bot.Instance.Device.IP.Asigned] < DATEADD(hour, -6, GETDATE())        
        )
        BEGIN
            RAISERROR('No se puede insertar el registro:Bot.Instance.Device e IP son iguales y la fecha es anterior a hace 6 horas.', 16, 1);
            ROLLBACK TRANSACTION; 
            RETURN;
        END
    END;
    GO
    

    URLS

    [URL.ID] Int PK

    [URL.Desktop] NVarChar(256)

    [URL.Mobile] NVarChar(256)

    [URL.Tablet] NVarChar(256)

    USE [superbots]
    GO
    /****** Object:  Table [dbo].[URLS]    Script Date: 14/01/2026 22:48:07 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[URLS](
    	[URL.ID] [int] NOT NULL,
    	[URL.Desktop] [nvarchar](256) NULL,
    	[URL.Mobile] [nvarchar](256) NULL,
    	[URL.Tablet] [nvarchar](256) NULL,
    	[URL.Created] [datetime2](7) NOT NULL,
     CONSTRAINT [PK_URLS] PRIMARY KEY CLUSTERED 
    (
    	[URL.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[URLS] ADD  CONSTRAINT [DF_URLS_URL.Created]  DEFAULT (getdate()) FOR [URL.Created]
    GO
    

    (trigger :: at least one URL (desktop, mobile or tablet must be per record)

    CREATE TRIGGER [dbo].[TRG_URLS_OnIsert_Or_OnUpdate]
    ON [dbo].[URLS]
    AFTER INSERT, UPDATE
    AS
    BEGIN
        SET NOCOUNT ON;
        IF EXISTS (
            SELECT 1  FROM inserted
            WHERE ([URL.Desktop] IS NULL) AND ([URL.Mobile] IS NULL ) AND ([URL.Tablet] IS NULL)
        )
        BEGIN
            RAISERROR ('At least one type URL must be provided.', 16, 1);
            ROLLBACK TRANSACTION;
        END
    END;
    



    USERS

    USE [superbots]
    GO
    
    /****** Object:  Table [dbo].[USERS]    Script Date: 15/01/2026 16:02:59 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[USERS](
    	[User.ID] [int] IDENTITY(1,1) NOT NULL,
    	[User.Email] [nvarchar](32) NOT NULL,
    	[User.Created] [datetime2](7) NOT NULL,
    	[User.Enabled] [bit](0) NOT NULL,
     CONSTRAINT [PK_USERS] PRIMARY KEY CLUSTERED 
    (
    	[User.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[USERS] ADD  CONSTRAINT [DF_USERS_User.Created]  DEFAULT (getdate()) FOR [User.Created]
    GO
    
    ALTER TABLE [dbo].[USERS] ADD  CONSTRAINT [DF_USERS_User.Enabled]  DEFAULT ((0)) FOR [User.Enabled]
    GO
    

    (trigger to allow only valid emails)

    CREATE TRIGGER TRG_USERS_ValidateEmailFormat ON USERS
    AFTER INSERT, UPDATE
    AS
    BEGIN
        SET NOCOUNT ON;
        -- Check if any inserted/updated rows have an invalid email format
        IF EXISTS (
            SELECT 1 
            FROM USERS
            WHERE  1 = 1
              AND (
                -- Pattern: char + @ + char + . + at least 2 chars for TLD
                [User.Email] NOT LIKE '%_@_%_.__%' 
                -- Disallow specific common invalid characters
                OR [User.Email] LIKE '%[^a-z0-9@._-]%' ESCAPE '\'
                -- Disallow consecutive dots or @
                OR [User.Email] LIKE '%..%' 
                OR [User.Email] LIKE '%@%@%'
              )
        )
        BEGIN
            RAISERROR ('The Email format provided is invalid.', 16, 1);
            ROLLBACK TRANSACTION;
        END
    END;
    GO

    USERS.URLS

    USE [superbots]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[USERS.URLS](
    	[User.ID] [int] NOT NULL,
    	[URL.ID] [int] NOT NULL,
    	[User.URL.ID] [int] NOT NULL,
    	[User.URL.Created] [datetime2](7) NOT NULL,
    	[User.URL.Legitimated] [datetime2](7) NULL,
     CONSTRAINT [PK_USERS.URLS] PRIMARY KEY CLUSTERED 
    (
    	[User.URL.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[USERS.URLS] ADD  CONSTRAINT [DF_USERS.URLS_User.Url.Created]  DEFAULT (getdate()) FOR [User.URL.Created]
    GO
    
    ALTER TABLE [dbo].[USERS.URLS]  WITH CHECK ADD  CONSTRAINT [FK_USERS.URLS_URLS] FOREIGN KEY([URL.ID])
    REFERENCES [dbo].[URLS] ([URL.ID])
    GO
    
    ALTER TABLE [dbo].[USERS.URLS] CHECK CONSTRAINT [FK_USERS.URLS_URLS]
    GO
    
    ALTER TABLE [dbo].[USERS.URLS]  WITH CHECK ADD  CONSTRAINT [FK_USERS.URLS_USERS] FOREIGN KEY([User.ID])
    REFERENCES [dbo].[USERS] ([User.ID])
    GO
    
    ALTER TABLE [dbo].[USERS.URLS] CHECK CONSTRAINT [FK_USERS.URLS_USERS]
    GO
    
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Identifies, if an url is owned by the user. Web must verify via DNS records on that domain' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'USERS.URLS', @level2type=N'COLUMN',@level2name=N'User.URL.Legitimated'
    GO
    

    USERS.URLS.YOUTUBE

    Made to include the stats (of views, likes, comments, etc) when user created theURL

    USE [superbots]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[USERS.URLS.YOUTUBES](
    	[User.URL.ID] [int] NOT NULL,
    	[Views] [int] NOT NULL,
    	[Likes] [int] NOT NULL,
    	[Comments] [int] NOT NULL
    ) ON [PRIMARY]
    GO
    

    USERS.BOTS.INSTANCES

    USE [superbots]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[USERS.BOTS.INSTANCES](
    	[User.ID] [int] NOT NULL,
    	[Bot.Instance.ID] [bigint] NOT NULL,
    	[User.Bot.Instance.ID] [int] NOT NULL,
    	[User.Bot.Instance.Created] [datetime2](7) NOT NULL,
     CONSTRAINT [PK_USERS.BOTS.INSTANCES] PRIMARY KEY CLUSTERED 
    (
    	[User.Bot.Instance.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES] ADD  CONSTRAINT [DF_USERS.BOTS.INSTANCES_User.Bot.Instance.Created]  DEFAULT (getdate()) FOR [User.Bot.Instance.Created]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES]  WITH CHECK ADD  CONSTRAINT [FK_USERS.BOTS.INSTANCES_BOTS.INSTANCES] FOREIGN KEY([Bot.Instance.ID])
    REFERENCES [dbo].[BOTS.INSTANCES] ([Bot.Instance.ID])
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES] CHECK CONSTRAINT [FK_USERS.BOTS.INSTANCES_BOTS.INSTANCES]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES]  WITH CHECK ADD  CONSTRAINT [FK_USERS.BOTS.INSTANCES_USERS] FOREIGN KEY([User.ID])
    REFERENCES [dbo].[USERS] ([User.ID])
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES] CHECK CONSTRAINT [FK_USERS.BOTS.INSTANCES_USERS]
    GO
    

    USERS.BOTS.INSTANCES.URLS

    USE [superbots]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[USERS.BOTS.INSTANCES.URLS](
    	[User.Bot.Instance.ID] [int] NOT NULL,
    	[User.URL.ID] [int] NOT NULL,
    	[User.Bot.Instance.Url.ID] [int] NOT NULL,
    	[User.Bot.Instance.Url.Created] [datetime2](7) NOT NULL,
     CONSTRAINT [PK_USERS.BOTS.INSTANCES.URLS] PRIMARY KEY CLUSTERED 
    (
    	[User.Bot.Instance.Url.ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS] ADD  CONSTRAINT [DF_USERS.BOTS.INSTANCES.URLS_User.Bot.Instance.Url.Created]  DEFAULT (getdate()) FOR [User.Bot.Instance.Url.Created]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS]  WITH CHECK ADD  CONSTRAINT [FK_USERS.BOTS.INSTANCES.URLS_USERS.BOTS.INSTANCES] FOREIGN KEY([User.Bot.Instance.ID])
    REFERENCES [dbo].[USERS.BOTS.INSTANCES] ([User.Bot.Instance.ID])
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS] CHECK CONSTRAINT [FK_USERS.BOTS.INSTANCES.URLS_USERS.BOTS.INSTANCES]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS]  WITH CHECK ADD  CONSTRAINT [FK_USERS.BOTS.INSTANCES.URLS_USERS.URLS] FOREIGN KEY([User.URL.ID])
    REFERENCES [dbo].[USERS.URLS] ([User.URL.ID])
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS] CHECK CONSTRAINT [FK_USERS.BOTS.INSTANCES.URLS_USERS.URLS]
    GO
    
    
    


    USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS

    USE [superbots]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS](
    	[User.Bots.Instances.URL.ID] [int] NOT NULL,
    	[Action.Youtube.ID] [int] NOT NULL,
    	[User.Bots.Instances.URL.Actions.Youtube.Created] [datetime2](7) NOT NULL,
    	[User.Bots.Instances.URL.Actions.Youtube.Finished] [datetime2](7) NULL,
    	[Action.Youtube.ID.Result] [datetime2](7) NULL
    ) ON [PRIMARY]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS] ADD  CONSTRAINT [DF_USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS_User.Bots.Instances.URL.Actions.Youtube.Ceated]  DEFAULT (getdate()) FOR [User.Bots.Instances.URL.Actions.Youtube.Created]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS]  WITH CHECK ADD  CONSTRAINT [FK_USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS_ACTIONS.YOUTUBE] FOREIGN KEY([Action.Youtube.ID])
    REFERENCES [dbo].[ACTIONS.YOUTUBE] ([Action.YouTube.ID])
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS] CHECK CONSTRAINT [FK_USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS_ACTIONS.YOUTUBE]
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS]  WITH CHECK ADD  CONSTRAINT [FK_USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS_USERS.BOTS.INSTANCES.URLS] FOREIGN KEY([User.Bots.Instances.URL.ID])
    REFERENCES [dbo].[USERS.BOTS.INSTANCES.URLS] ([User.Bot.Instance.URL.ID])
    GO
    
    ALTER TABLE [dbo].[USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS] CHECK CONSTRAINT [FK_USERS.BOTS.INSTANCES.URLS.YOUTUBE.ACTIONS_USERS.BOTS.INSTANCES.URLS]
    GO
    
    
    

    *So, be aware that the above code might not be updated as last version, but thats a clean indicator of what to do.


    Above code dated from the SUPERBOTS SQL v0.5

    ** IP’s must be uniques, non shared, better with unmetered / unlimited bandwidth.


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *