Загрузка данных


USE user284_db;
GO

SET NOCOUNT ON;
GO

/* ===========================================================================
   ШАГ 1. Удаление связей (Foreign Keys) для таблиц из твоего файла
=========================================================================== */
DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql = @sql
    + N'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(fk.parent_object_id))
    + N'.' + QUOTENAME(OBJECT_NAME(fk.parent_object_id))
    + N' DROP CONSTRAINT ' + QUOTENAME(fk.name) + N';' + CHAR(10)
FROM sys.foreign_keys AS fk
WHERE OBJECT_NAME(fk.parent_object_id) IN (
    N'AirportCities44', N'AirportTerminals44', N'AirportGates44', N'AirportCarriers44',
    N'AirportFlights44', N'AirportPassengers44', N'AirportBookings44',
    N'TaxiCustomers44', N'TaxiDrivers44', N'TaxiVehicleTypes44', N'TaxiVehicles44',
    N'TaxiShifts44', N'TaxiRides44', N'TaxiRidePayments44',
    N'GalleryAuthors44', N'GalleryStyles44', N'GalleryRooms44', N'GalleryShows44',
    N'GalleryExhibits44', N'GalleryGuests44', N'GalleryEntries44'
    )
   OR OBJECT_NAME(fk.referenced_object_id) IN (
    N'AirportCities44', N'AirportTerminals44', N'AirportGates44', N'AirportCarriers44',
    N'AirportFlights44', N'AirportPassengers44', N'AirportBookings44',
    N'TaxiCustomers44', N'TaxiDrivers44', N'TaxiVehicleTypes44', N'TaxiVehicles44',
    N'TaxiShifts44', N'TaxiRides44', N'TaxiRidePayments44',
    N'GalleryAuthors44', N'GalleryStyles44', N'GalleryRooms44', N'GalleryShows44',
    N'GalleryExhibits44', N'GalleryGuests44', N'GalleryEntries44'
    );

IF LEN(@sql) > 0 EXEC sp_executesql @sql;
GO

/* ===========================================================================
   ШАГ 2. Удаление таблиц (всех 21 из твоего файла)
=========================================================================== */
-- Галерея
IF OBJECT_ID(N'GalleryEntries44', N'U') IS NOT NULL DROP TABLE GalleryEntries44;
IF OBJECT_ID(N'GalleryGuests44', N'U') IS NOT NULL DROP TABLE GalleryGuests44;
IF OBJECT_ID(N'GalleryExhibits44', N'U') IS NOT NULL DROP TABLE GalleryExhibits44;
IF OBJECT_ID(N'GalleryShows44', N'U') IS NOT NULL DROP TABLE GalleryShows44;
IF OBJECT_ID(N'GalleryRooms44', N'U') IS NOT NULL DROP TABLE GalleryRooms44;
IF OBJECT_ID(N'GalleryStyles44', N'U') IS NOT NULL DROP TABLE GalleryStyles44;
IF OBJECT_ID(N'GalleryAuthors44', N'U') IS NOT NULL DROP TABLE GalleryAuthors44;

-- Такси (из файла друга - удаляем, чтобы не мешало, твое останется)
IF OBJECT_ID(N'TaxiRidePayments44', N'U') IS NOT NULL DROP TABLE TaxiRidePayments44;
IF OBJECT_ID(N'TaxiRides44', N'U') IS NOT NULL DROP TABLE TaxiRides44;
IF OBJECT_ID(N'TaxiShifts44', N'U') IS NOT NULL DROP TABLE TaxiShifts44;
IF OBJECT_ID(N'TaxiVehicles44', N'U') IS NOT NULL DROP TABLE TaxiVehicles44;
IF OBJECT_ID(N'TaxiVehicleTypes44', N'U') IS NOT NULL DROP TABLE TaxiVehicleTypes44;
IF OBJECT_ID(N'TaxiDrivers44', N'U') IS NOT NULL DROP TABLE TaxiDrivers44;
IF OBJECT_ID(N'TaxiCustomers44', N'U') IS NOT NULL DROP TABLE TaxiCustomers44;

-- Аэропорт
IF OBJECT_ID(N'AirportBookings44', N'U') IS NOT NULL DROP TABLE AirportBookings44;
IF OBJECT_ID(N'AirportPassengers44', N'U') IS NOT NULL DROP TABLE AirportPassengers44;
IF OBJECT_ID(N'AirportFlights44', N'U') IS NOT NULL DROP TABLE AirportFlights44;
IF OBJECT_ID(N'AirportCarriers44', N'U') IS NOT NULL DROP TABLE AirportCarriers44;
IF OBJECT_ID(N'AirportGates44', N'U') IS NOT NULL DROP TABLE AirportGates44;
IF OBJECT_ID(N'AirportTerminals44', N'U') IS NOT NULL DROP TABLE AirportTerminals44;
IF OBJECT_ID(N'AirportCities44', N'U') IS NOT NULL DROP TABLE AirportCities44;
GO


/* ===========================================================================
   ШАГ 3. Создание НОВОГО Аэропорта (7 таблиц)
=========================================================================== */
CREATE TABLE AirportCities44 (
    CityId        INT IDENTITY(1,1) NOT NULL,
    CityName      NVARCHAR(100)     NOT NULL,
    Country       NVARCHAR(100)     NOT NULL,
    CONSTRAINT PKAirportCities44 PRIMARY KEY (CityId),
    CONSTRAINT UQAirportCities44 UNIQUE (CityName, Country)
);

CREATE TABLE AirportTerminals44 (
    TerminalId         INT IDENTITY(1,1) NOT NULL,
    TerminalName       NVARCHAR(50)      NOT NULL,
    PassengerCapacity  INT               NOT NULL,
    OpenedOn           DATE              NULL,
    CONSTRAINT PKAirportTerminals44 PRIMARY KEY (TerminalId),
    CONSTRAINT UQAirportTerminalsName44 UNIQUE (TerminalName),
    CONSTRAINT CKAirportTerminalsCapacity44 CHECK (PassengerCapacity > 0)
);

CREATE TABLE AirportGates44 (
    GateId           INT IDENTITY(1,1) NOT NULL,
    TerminalId       INT               NOT NULL,
    GateCode         NVARCHAR(10)      NOT NULL,
    IsInternational  BIT               NOT NULL CONSTRAINT DFAirportGatesIntl44 DEFAULT 0,
    CONSTRAINT PKAirportGates44 PRIMARY KEY (GateId),
    CONSTRAINT UQAirportGates44 UNIQUE (TerminalId, GateCode),
    CONSTRAINT FKAirportGatesTerminals44 FOREIGN KEY (TerminalId)
        REFERENCES AirportTerminals44 (TerminalId)
);

CREATE TABLE AirportCarriers44 (
    CarrierId     INT IDENTITY(1,1) NOT NULL,
    CarrierName   NVARCHAR(100)     NOT NULL,
    CallSign      NVARCHAR(10)      NOT NULL,
    FoundedYear   SMALLINT          NULL,
    CONSTRAINT PKAirportCarriers44 PRIMARY KEY (CarrierId),
    CONSTRAINT UQAirportCarriersName44 UNIQUE (CarrierName),
    CONSTRAINT UQAirportCarriersCallSign44 UNIQUE (CallSign)
);

CREATE TABLE AirportFlights44 (
    FlightId           INT IDENTITY(1,1) NOT NULL,
    CarrierId          INT               NOT NULL,
    GateId             INT               NOT NULL,
    DestinationCityId  INT               NOT NULL,
    FlightCode         NVARCHAR(10)      NOT NULL,
    AircraftType       NVARCHAR(50)      NOT NULL,
    DepartureTime      DATETIME2         NOT NULL,
    DurationMinutes    INT               NOT NULL,
    Status             NVARCHAR(15)      NOT NULL CONSTRAINT DFAirportFlightsStatus44 DEFAULT 'OnTime',
    CONSTRAINT PKAirportFlights44 PRIMARY KEY (FlightId),
    CONSTRAINT UQAirportFlights44 UNIQUE (FlightCode, DepartureTime),
    CONSTRAINT CKAirportFlightsStatus44 CHECK (Status IN ('OnTime','Delayed','Boarding','Departed','Cancelled')),
    CONSTRAINT CKAirportFlightsDuration44 CHECK (DurationMinutes > 0),
    CONSTRAINT FKAirportFlightsCarriers44 FOREIGN KEY (CarrierId)
        REFERENCES AirportCarriers44 (CarrierId),
    CONSTRAINT FKAirportFlightsGates44 FOREIGN KEY (GateId)
        REFERENCES AirportGates44 (GateId),
    CONSTRAINT FKAirportFlightsCities44 FOREIGN KEY (DestinationCityId)
        REFERENCES AirportCities44 (CityId)
);

CREATE TABLE AirportPassengers44 (
    PassengerId     INT IDENTITY(1,1) NOT NULL,
    FullName        NVARCHAR(200)     NOT NULL,
    BirthDate       DATE              NOT NULL,
    PassportNumber  NVARCHAR(20)      NOT NULL,
    Phone           NVARCHAR(20)      NULL,
    CONSTRAINT PKAirportPassengers44 PRIMARY KEY (PassengerId),
    CONSTRAINT UQAirportPassengersPassport44 UNIQUE (PassportNumber)
);

CREATE TABLE AirportBookings44 (
    BookingId     INT IDENTITY(1,1) NOT NULL,
    FlightId      INT               NOT NULL,
    PassengerId   INT               NOT NULL,
    SeatNumber    NVARCHAR(4)       NOT NULL,
    FareClass     NVARCHAR(10)      NOT NULL,
    Price         DECIMAL(10,2)     NOT NULL,
    CheckedBags   TINYINT           NOT NULL CONSTRAINT DFAirportBookingsBags44 DEFAULT 0,
    BookedAt      DATETIME2         NOT NULL CONSTRAINT DFAirportBookingsBookedAt44 DEFAULT SYSDATETIME(),
    CONSTRAINT PKAirportBookings44 PRIMARY KEY (BookingId),
    CONSTRAINT UQAirportBookingsSeat44 UNIQUE (FlightId, SeatNumber),
    CONSTRAINT UQAirportBookingsPassenger44 UNIQUE (FlightId, PassengerId),
    CONSTRAINT CKAirportBookingsClass44 CHECK (FareClass IN ('Economy','Business','First')),
    CONSTRAINT CKAirportBookingsPrice44 CHECK (Price >= 0),
    CONSTRAINT FKAirportBookingsFlights44 FOREIGN KEY (FlightId)
        REFERENCES AirportFlights44 (FlightId),
    CONSTRAINT FKAirportBookingsPassengers44 FOREIGN KEY (PassengerId)
        REFERENCES AirportPassengers44 (PassengerId)
);
GO


/* ===========================================================================
   ШАГ 4. Создание НОВОЙ Галереи (7 таблиц)
=========================================================================== */
CREATE TABLE GalleryAuthors44 (
    AuthorId      INT IDENTITY(1,1) NOT NULL,
    FullName      NVARCHAR(200)     NOT NULL,
    Nationality   NVARCHAR(100)     NOT NULL,
    BirthYear     SMALLINT          NULL,
    DeathYear     SMALLINT          NULL,
    CONSTRAINT PKGalleryAuthors44 PRIMARY KEY (AuthorId),
    CONSTRAINT CKGalleryAuthorsYears44 CHECK (BirthYear IS NULL OR DeathYear IS NULL OR DeathYear >= BirthYear)
);

CREATE TABLE GalleryStyles44 (
    StyleId       INT IDENTITY(1,1) NOT NULL,
    StyleName     NVARCHAR(100)     NOT NULL,
    Era           NVARCHAR(50)      NULL,
    CONSTRAINT PKGalleryStyles44 PRIMARY KEY (StyleId),
    CONSTRAINT UQGalleryStylesName44 UNIQUE (StyleName)
);

CREATE TABLE GalleryRooms44 (
    RoomId        INT IDENTITY(1,1) NOT NULL,
    RoomName      NVARCHAR(100)     NOT NULL,
    Floor         TINYINT           NOT NULL,
    Area          DECIMAL(8,2)      NOT NULL,
    CONSTRAINT PKGalleryRooms44 PRIMARY KEY (RoomId),
    CONSTRAINT UQGalleryRoomsName44 UNIQUE (RoomName),
    CONSTRAINT CKGalleryRoomsArea44 CHECK (Area > 0)
);

CREATE TABLE GalleryShows44 (
    ShowId        INT IDENTITY(1,1) NOT NULL,
    RoomId        INT               NOT NULL,
    ShowTitle     NVARCHAR(200)     NOT NULL,
    StartDate     DATE              NOT NULL,
    EndDate       DATE              NOT NULL,
    CONSTRAINT PKGalleryShows44 PRIMARY KEY (ShowId),
    CONSTRAINT CKGalleryShowsDates44 CHECK (EndDate >= StartDate),
    CONSTRAINT FKGalleryShowsRooms44 FOREIGN KEY (RoomId)
        REFERENCES GalleryRooms44 (RoomId)
);

CREATE TABLE GalleryExhibits44 (
    ExhibitId       INT IDENTITY(1,1) NOT NULL,
    AuthorId        INT               NOT NULL,
    StyleId         INT               NOT NULL,
    ShowId          INT               NULL,
    Title           NVARCHAR(200)     NOT NULL,
    CreationYear    SMALLINT          NULL,
    Medium          NVARCHAR(100)     NOT NULL,
    EstimatedValue  DECIMAL(14,2)     NULL,
    Status          NVARCHAR(15)      NOT NULL CONSTRAINT DFGalleryExhibitsStatus44 DEFAULT 'Stored',
    CONSTRAINT PKGalleryExhibits44 PRIMARY KEY (ExhibitId),
    CONSTRAINT CKGalleryExhibitsStatus44 CHECK (Status IN ('Stored','Displayed','Loaned','Restoring')),
    CONSTRAINT CKGalleryExhibitsValue44 CHECK (EstimatedValue IS NULL OR EstimatedValue >= 0),
    CONSTRAINT FKGalleryExhibitsAuthors44 FOREIGN KEY (AuthorId)
        REFERENCES GalleryAuthors44 (AuthorId),
    CONSTRAINT FKGalleryExhibitsStyles44 FOREIGN KEY (StyleId)
        REFERENCES GalleryStyles44 (StyleId),
    CONSTRAINT FKGalleryExhibitsShows44 FOREIGN KEY (ShowId)
        REFERENCES GalleryShows44 (ShowId)
);

CREATE TABLE GalleryGuests44 (
    GuestId       INT IDENTITY(1,1) NOT NULL,
    FullName      NVARCHAR(200)     NOT NULL,
    Email         NVARCHAR(150)     NOT NULL,
    Phone         NVARCHAR(20)      NULL,
    CONSTRAINT PKGalleryGuests44 PRIMARY KEY (GuestId),
    CONSTRAINT UQGalleryGuestsEmail44 UNIQUE (Email)
);

CREATE TABLE GalleryEntries44 (
    EntryId       INT IDENTITY(1,1) NOT NULL,
    GuestId       INT               NOT NULL,
    ShowId        INT               NOT NULL,
    EntryDate     DATE              NOT NULL,
    TicketPrice   DECIMAL(8,2)      NOT NULL,
    CONSTRAINT PKGalleryEntries44 PRIMARY KEY (EntryId),
    CONSTRAINT CKGalleryEntriesPrice44 CHECK (TicketPrice >= 0),
    CONSTRAINT FKGalleryEntriesGuests44 FOREIGN KEY (GuestId)
        REFERENCES GalleryGuests44 (GuestId),
    CONSTRAINT FKGalleryEntriesShows44 FOREIGN KEY (ShowId)
        REFERENCES GalleryShows44 (ShowId)
);
GO

PRINT 'Готово: старые таблицы из скрипта удалены. Созданы новые Аэропорт и Галерея.';
GO