Skip to content

Schema migration #1

Merged
merged 2 commits into from
Oct 28, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
359 changes: 359 additions & 0 deletions Chinook_Rev1.sql
Original file line number Diff line number Diff line change
@@ -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.