CREATE DATABASE MusicLibraryDB;
GO
USE MusicLibraryDB;
CREATE TABLE Genre (
GenreID INT PRIMARY KEY IDENTITY(1,1),
GenreName VARCHAR(50) NOT NULL,
Description VARCHAR(200)
);
CREATE TABLE Artist (
ArtistID INT PRIMARY KEY IDENTITY(1,1),
ArtistName VARCHAR(100) NOT NULL,
Country VARCHAR(50),
Description VARCHAR(500),
Established DATE
);
CREATE TABLE Album (
AlbumID INT PRIMARY KEY IDENTITY(1,1),
AlbumTitle VARCHAR(100) NOT NULL,
ArtistID INT NOT NULL,
ReleaseDate DATE,
GenreID INT,
CoverImageURL VARCHAR(200),
Rating DECIMAL(2,1),
TrackCount INT,
RecordLabel VARCHAR(100),
FOREIGN KEY (ArtistID) REFERENCES Artist(ArtistID),
FOREIGN KEY (GenreID) REFERENCES Genre(GenreID)
);
CREATE TABLE Song (
SongID INT PRIMARY KEY IDENTITY(1,1),
SongTitle VARCHAR(100) NOT NULL,
AlbumID INT,
Duration INT NOT NULL,
TrackNumber INT,
Lyrics TEXT,
FilePath VARCHAR(200),
FileSize BIGINT,
GenreID INT,
Rating DECIMAL(2,1),
PlayCount INT DEFAULT 0,
IsFavorite BIT DEFAULT 0,
FOREIGN KEY (AlbumID) REFERENCES Album(AlbumID),
FOREIGN KEY (GenreID) REFERENCES Genre(GenreID)
);
CREATE TABLE SongArtist (
SongID INT NOT NULL,
ArtistID INT NOT NULL,
PRIMARY KEY (SongID, ArtistID),
FOREIGN KEY (SongID) REFERENCES Song(SongID),
FOREIGN KEY (ArtistID) REFERENCES Artist(ArtistID)
);
CREATE TABLE [User] (
UserID INT PRIMARY KEY IDENTITY(1,1),
Username VARCHAR(50) UNIQUE NOT NULL,
PasswordHash VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
RegistrationDate DATE NOT NULL,
LastLoginDate DATE,
Role VARCHAR(20) CHECK (Role IN ('普通用户', '管理员')) DEFAULT '普通用户',
AvatarURL VARCHAR(200),
Theme VARCHAR(20) DEFAULT 'light'
);
CREATE TABLE Playlist (
PlaylistID INT PRIMARY KEY IDENTITY(1,1),
PlaylistName VARCHAR(100) NOT NULL,
UserID INT NOT NULL,
CreationDate DATE NOT NULL,
Description VARCHAR(200),
IsPublic BIT DEFAULT 0,
LastUpdateDate DATE,
FOREIGN KEY (UserID) REFERENCES [User](UserID)
);
CREATE TABLE PlaylistSong (
PlaylistID INT NOT NULL,
SongID INT NOT NULL,
AddedDate DATE DEFAULT GETDATE(),
PlayOrder INT,
PRIMARY KEY (PlaylistID, SongID),
FOREIGN KEY (PlaylistID) REFERENCES Playlist(PlaylistID),
FOREIGN KEY (SongID) REFERENCES Song(SongID)
);