diff --git a/Chinook_Rev1.sql b/Chinook_Rev1.sql new file mode 100644 index 0000000..ff1bea5 --- /dev/null +++ b/Chinook_Rev1.sql @@ -0,0 +1,359 @@ + +/******************************************************************************* + Drop database if it exists +********************************************************************************/ +DROP DATABASE IF EXISTS `Chinook_Rev1`; + + +/******************************************************************************* + Create database +********************************************************************************/ +CREATE DATABASE `Chinook_Rev1`; + + +USE `Chinook_Rev1`; + + +/******************************************************************************* + Create Tables +********************************************************************************/ +CREATE TABLE `Album` +( + `AlbumId` INT NOT NULL, + `Title` NVARCHAR(160) NOT NULL, + `ArtistId` INT NOT NULL, + CONSTRAINT `PK_Album` PRIMARY KEY (`AlbumId`) +); + +CREATE TABLE `ApplePay` +( + `PayId` INT NOT NULL, + `ApplePayToken` VARCHAR(45) NOT NULL, + CONSTRAINT `PK_ApplePay` PRIMARY KEY (`PayId`) +); + + +CREATE TABLE `Artist` +( + `ArtistId` INT NOT NULL, + `Name` NVARCHAR(120), + CONSTRAINT `PK_Artist` PRIMARY KEY (`ArtistId`) +); + +CREATE TABLE `CreditCard` +( + `PayId` INT NOT NULL, + `CreditCardNumber` VARCHAR(45) NOT NULL, + `ExpirationDate` DATE NOT NULL, + CONSTRAINT `PK_CreditCard` PRIMARY KEY (`PayId`) +); + +CREATE TABLE `Customer` +( + `PersonId` INT NOT NULL, + `CustomerId` INT NOT NULL, + `Company` NVARCHAR(80), + `SupportRepId` INT, + CONSTRAINT `PK_Customer` PRIMARY KEY (`CustomerId`) +); + +CREATE TABLE `Employee` +( + `PersonId` INT NOT NULL, + `EmployeeId` INT NOT NULL, + `Title` NVARCHAR(30), + `ReportsTo` INT, + `BirthDate` DATETIME, + `HireDate` DATETIME, + CONSTRAINT `PK_Employee` PRIMARY KEY (`EmployeeId`) +); + +CREATE TABLE `Genre` +( + `GenreId` INT NOT NULL, + `Name` NVARCHAR(120), + CONSTRAINT `PK_Genre` PRIMARY KEY (`GenreId`) +); + +CREATE TABLE `GooglePay` +( + `PayId` INT NOT NULL, + `GoogleEmail` VARCHAR(45) NOT NULL, + `GoogleToken` VARCHAR(45) NOT NULL, + CONSTRAINT `PK_GooglePay` PRIMARY KEY (`PayId`) +); + +CREATE TABLE `Invoice` +( + `InvoiceId` INT NOT NULL, + `CustomerId` INT NOT NULL, + `InvoiceDate` DATETIME NOT NULL, + `BillingAddress` NVARCHAR(70), + `BillingCity` NVARCHAR(40), + `BillingState` NVARCHAR(40), + `BillingCountry` NVARCHAR(40), + `BillingPostalCode` NVARCHAR(10), + `Total` NUMERIC(10,2) NOT NULL, + `PayId` INT, + CONSTRAINT `PK_Invoice` PRIMARY KEY (`InvoiceId`) +); + +CREATE TABLE `InvoiceLine` +( + `InvoiceLineId` INT NOT NULL, + `InvoiceId` INT NOT NULL, + `TrackId` INT NOT NULL, + `UnitPrice` NUMERIC(10,2) NOT NULL, + `Quantity` INT NOT NULL, + CONSTRAINT `PK_InvoiceLine` PRIMARY KEY (`InvoiceLineId`) +); + +CREATE TABLE `MediaType` +( + `MediaTypeId` INT NOT NULL, + `Name` NVARCHAR(120), + CONSTRAINT `PK_MediaType` PRIMARY KEY (`MediaTypeId`) +); + +CREATE TABLE `MyPlaylist` +( + `PlaylistId` INT NOT NULL, + `Name` NVARCHAR(120), + `CustomerId` INT NOT NULL, + CONSTRAINT `PK_MyPlaylist` PRIMARY KEY (`PlaylistId`) +); + +CREATE TABLE `MyPlaylistTrack` +( + `PlaylistId` INT NOT NULL, + `TrackId` INT NOT NULL, + CONSTRAINT `PK_MyPlaylistTrack` PRIMARY KEY (`PlaylistId`, `TrackId`) +); + +CREATE TABLE `Orders` +( + `OrderId` INT NOT NULL, + `CustomerId` INT NOT NULL, + CONSTRAINT `PK_Orders` PRIMARY KEY (`OrderId`) +); + +CREATE TABLE `OrderTracks` +( + `OrderTrackId` INT NOT NULL, + `OrderId` INT NOT NULL, + `TrackId` INT NOT NULL, + CONSTRAINT `PK_OrderTracks` PRIMARY KEY (`OrderTrackID`) +); + +CREATE TABLE `Payment` +( + `PayId` INT NOT NULL, + `CustomerId` INT NOT NULL, + CONSTRAINT `PK_Payment` PRIMARY KEY (`PayId`) +); + +CREATE TABLE `Person` +( + `PersonId` INT NOT NULL, + `FirstName` NVARCHAR(40) NOT NULL, + `LastName` NVARCHAR(20) NOT NULL, + `Address` NVARCHAR(70), + `City` NVARCHAR(40), + `State` NVARCHAR(40), + `Country` NVARCHAR(40), + `PostalCode` NVARCHAR(10), + `Phone` NVARCHAR(24), + `Fax` NVARCHAR(24), + `Email` NVARCHAR(60) NOT NULL, + CONSTRAINT `PK_Person` PRIMARY KEY (`PersonID`) +); + + +CREATE TABLE `Playlist` +( + `PlaylistId` INT NOT NULL, + `Name` NVARCHAR(120), + CONSTRAINT `PK_Playlist` PRIMARY KEY (`PlaylistId`) +); + +CREATE TABLE `PlaylistTrack` +( + `PlaylistId` INT NOT NULL, + `TrackId` INT NOT NULL, + CONSTRAINT `PK_PlaylistTrack` PRIMARY KEY (`PlaylistId`, `TrackId`) +); + +CREATE TABLE `Track` +( + `TrackId` INT NOT NULL, + `Name` NVARCHAR(200) NOT NULL, + `AlbumId` INT, + `MediaTypeId` INT NOT NULL, + `GenreId` INT, + `Composer` NVARCHAR(220), + `Milliseconds` INT NOT NULL, + `Bytes` INT, + `UnitPrice` NUMERIC(10,2) NOT NULL, + CONSTRAINT `PK_Track` PRIMARY KEY (`TrackId`) +); + +CREATE TABLE `TrackURL` +( + `TrackID` INT NOT NULL, + `URL` VARCHAR(45) NOT NULL, + CONSTRAINT `PK_TrackURL` PRIMARY KEY (`TrackID`) +); + + + +/******************************************************************************* + Create Primary Key Unique Indexes +********************************************************************************/ + +/******************************************************************************* + Create Foreign Keys +********************************************************************************/ + +ALTER TABLE `ApplePay` ADD CONSTRAINT `FK_ApplePayId` + FOREIGN KEY (`PayId`) REFERENCES `Payment` (`PayId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_ApplePayId` ON `ApplePay` (`PayId`); + +ALTER TABLE `Album` ADD CONSTRAINT `FK_AlbumArtistId` + FOREIGN KEY (`ArtistId`) REFERENCES `Artist` (`ArtistId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_AlbumArtistId` ON `Album` (`ArtistId`); + +ALTER TABLE `CreditCard` ADD CONSTRAINT `FK_CreditCardPayId` + FOREIGN KEY (`PayId`) REFERENCES `Payment` (`PayId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_CreditCardPayId` ON `CreditCard` (`PayId`); + +ALTER TABLE `Customer` ADD CONSTRAINT `FK_CustomerSupportRepId` + FOREIGN KEY (`SupportRepId`) REFERENCES `Employee` (`EmployeeId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_CustomerSupportRepId` ON `Customer` (`SupportRepId`); + +ALTER TABLE `Customer` ADD CONSTRAINT `FK_CustomerPersonId` + FOREIGN KEY (`PersonId`) REFERENCES `Person` (`PersonId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_CustomerPersonId` ON `Customer` (`PersonId`); + +ALTER TABLE `Employee` ADD CONSTRAINT `FK_EmployeeReportsTo` + FOREIGN KEY (`ReportsTo`) REFERENCES `Employee` (`EmployeeId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_EmployeeReportsTo` ON `Employee` (`ReportsTo`); + +ALTER TABLE `Employee` ADD CONSTRAINT `FK_EmployeePersonId` + FOREIGN KEY (`PersonId`) REFERENCES `Person` (`PersonId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_EmployeePersonId` ON `Employee` (`PersonId`); + +ALTER TABLE `GooglePay` ADD CONSTRAINT `FK_GooglePayId` + FOREIGN KEY (`PayId`) REFERENCES `Payment` (`PayId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_GooglePayId` ON `GooglePay` (`PayId`); + +ALTER TABLE `Invoice` ADD CONSTRAINT `FK_InvoiceCustomerId` + FOREIGN KEY (`CustomerId`) REFERENCES `Customer` (`CustomerId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_InvoiceCustomerId` ON `Invoice` (`CustomerId`); + +ALTER TABLE `Invoice` ADD CONSTRAINT `FK_InvoicePayId` + FOREIGN KEY (`PayId`) REFERENCES `Payment` (`PayId`); + +CREATE INDEX `IFK_InvoicePayId` ON `Invoice` (`PayId`); + +ALTER TABLE `InvoiceLine` ADD CONSTRAINT `FK_InvoiceLineInvoiceId` + FOREIGN KEY (`InvoiceId`) REFERENCES `Invoice` (`InvoiceId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_InvoiceLineInvoiceId` ON `InvoiceLine` (`InvoiceId`); + +ALTER TABLE `InvoiceLine` ADD CONSTRAINT `FK_InvoiceLineTrackId` + FOREIGN KEY (`TrackId`) REFERENCES `Track` (`TrackId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_InvoiceLineTrackId` ON `InvoiceLine` (`TrackId`); + +ALTER TABLE `MyPlaylist` ADD CONSTRAINT `FK_MyPlaylistCustomerId` + FOREIGN KEY (`CustomerId`) REFERENCES `Customer` (`CustomerId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_MyPlaylistCustomerId` ON `MyPlaylist` (`CustomerId`); + +ALTER TABLE `MyPlaylistTrack` ADD CONSTRAINT `FK_MyPlaylistTrackPlaylistId` + FOREIGN KEY (`PlaylistId`) REFERENCES `MyPlaylist` (`PlaylistId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_MyPlaylistTrackPlaylistId` ON `MyPlaylistTrack` (`PlaylistId`); + +ALTER TABLE `MyPlaylistTrack` ADD CONSTRAINT `FK_MyPlaylistTrackTrackId` + FOREIGN KEY (`TrackId`) REFERENCES `Track` (`TrackId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_MyPlaylistTrackTrackId` ON `MyPlaylistTrack` (`TrackId`); + +ALTER TABLE `Orders` ADD CONSTRAINT `FK_OrdersCustomerId` + FOREIGN KEY (`CustomerId`) REFERENCES `Track` (`TrackId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_OrdersCustomerId` ON `Orders` (`CustomerId`); + +ALTER TABLE `OrderTracks` ADD CONSTRAINT `FK_OrderTracksOrderId` + FOREIGN KEY (`OrderId`) REFERENCES `Orders` (`OrderId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_OrdertracksOrderId` ON `OrderTracks` (`OrderId`); + +ALTER TABLE `OrderTracks` ADD CONSTRAINT `FK_OrderTracksTrackId` + FOREIGN KEY (`TrackId`) REFERENCES `Track` (`TrackId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_OrdertracksTrackId` ON `OrderTracks` (`TrackId`); + +ALTER TABLE `Payment` ADD CONSTRAINT `FK_PaymentCustomerId` + FOREIGN KEY (`CustomerId`) REFERENCES `Customer` (`CustomerId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_PaymentCustomerId` ON `Payment` (`CustomerId`); + +ALTER TABLE `PlaylistTrack` ADD CONSTRAINT `FK_PlaylistTrackPlaylistId` + FOREIGN KEY (`PlaylistId`) REFERENCES `Playlist` (`PlaylistId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +ALTER TABLE `PlaylistTrack` ADD CONSTRAINT `FK_PlaylistTrackTrackId` + FOREIGN KEY (`TrackId`) REFERENCES `Track` (`TrackId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_PlaylistTrackTrackId` ON `PlaylistTrack` (`TrackId`); + +ALTER TABLE `Track` ADD CONSTRAINT `FK_TrackAlbumId` + FOREIGN KEY (`AlbumId`) REFERENCES `Album` (`AlbumId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_TrackAlbumId` ON `Track` (`AlbumId`); + +ALTER TABLE `Track` ADD CONSTRAINT `FK_TrackGenreId` + FOREIGN KEY (`GenreId`) REFERENCES `Genre` (`GenreId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_TrackGenreId` ON `Track` (`GenreId`); + +ALTER TABLE `Track` ADD CONSTRAINT `FK_TrackMediaTypeId` + FOREIGN KEY (`MediaTypeId`) REFERENCES `MediaType` (`MediaTypeId`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_TrackMediaTypeId` ON `Track` (`MediaTypeId`); + +ALTER TABLE `TrackURL` ADD CONSTRAINT `FK_TrackURLID` + FOREIGN KEY (`TrackID`) REFERENCES `Track` (`TrackID`) ON DELETE NO ACTION ON UPDATE NO ACTION; + +CREATE INDEX `IFK_TrackURLID` ON `TrackURL` (`TrackID`); + + + + + + + + + + + + + + + + + + + + +