Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #1 from jjm06012/Schema-Migration
Schema migration
  • Loading branch information
jjm06012 committed Oct 28, 2015
2 parents 25022a3 + 57eb314 commit 9d2dc50
Show file tree
Hide file tree
Showing 2 changed files with 359 additions and 0 deletions.
359 changes: 359 additions & 0 deletions 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`);





















Binary file modified chinookmodel.mwb
Binary file not shown.

0 comments on commit 9d2dc50

Please sign in to comment.