我需要为在线音乐流媒体服务创建数据模型,该服务有4个表:付款,用户,歌曲,流派。
我上传了结构图像,突出了表格与相应关联实体之间的关系。 (对于链接道歉,我不允许发布图片)
模型必须确保外键有效且参照完整性成立。
我曾尝试创建数据模型,并分配各自的外键,但作为一个初学者,我不确定我是否正确创建了数据模型,最重要的是创建了正确的外键关系,所以我可以添加和检索数据。
有人愿意检查我的代码吗?谢谢:)
付款表
CREATE TABLE Payment (
PayID INTEGER,
PayName CHAR (40),
Primary Key (PayID)
);
歌曲表
CREATE TABLE SONG (
SongID Integer,
Title VARCHAR (40),
Album VARCHAR (30),
Duration TIME,
ReleaseYear DATE,
PRIMARY KEY (SongID)
);
流派表
CREATE TABLE GENRE (
GenreID Integer,
Name CHAR(35),
Description VARCHAR (200),
PRIMARY KEY (GenreID),
CONSTRAINT foreinkey_holds_UserID FOREIGN KEY (UserID)
REFERENCES USER(UserID),
CONSTRAINT foreignkey_holds_GenreID FOREIGN KEY (GenreID)
REFERENCES Genre(GenreID)
);
用户表
CREATE TABLE Users (
UserID INTEGER,
UserFirst CHAR (40),
UserLast CHAR (40),
UserName VARCHAR (40),
UserAddress VARCHAR (35),
UserBirthdate DATE(),
UserGender CHAR (1),
UserEmail VARCHAR (35),
PRIMARY KEY (UserID),
CONSTRAINT foreignkey_holds_PayID FOREIGN KEY (PayID)
REFERENCES Payment(PayID),
CONSTRAINT foreignkey_holds_SongID FOREIGN KEY (SongID)
REFERENCES Song(SongID)
);
答案 0 :(得分:0)
付款表
CREATE TABLE Payment (
PayID INTEGER,
PayName CHAR (40),
Primary Key (PayID)
);
流派表
CREATE TABLE GENRE (
GenreID Integer,
Name CHAR(35),
Description VARCHAR (200),
PRIMARY KEY (GenreID)
);
歌曲表(歌曲与流派之间的多对一)
CREATE TABLE SONG (
SongID Integer,
GenreID Integer,
Title VARCHAR (40),
Album VARCHAR (30),
Duration TIME(),
ReleaseYear DATE(),
PRIMARY KEY (SongID),
CONSTRAINT foreignkey_holds_GenreID FOREIGN KEY (GenreID)
REFERENCES Genre(GenreID)
);
用户表
CREATE TABLE Users (
UserID INTEGER,
UserFirst CHAR (40),
UserLast CHAR (40),
UserName VARCHAR (40),
UserAddress VARCHAR (35),
UserBirthdate DATE(),
UserGender CHAR (1),
UserEmail VARCHAR (35),
PRIMARY KEY (UserID)
);
用户与歌曲之间,多对多的关系。所以你需要一个关联表。最好在此表上使用复合主键(PRIMARY KEY(UserID,SongID))
CREATE TABLE Users_Song (
UserID INTEGER,
SongID Integer,
PRIMARY KEY (UserID,SongID),
CONSTRAINT fk_users_song_user FOREIGN KEY (UserID)
REFERENCES Users(UserID),
CONSTRAINT fk_users_song_song FOREIGN KEY (SongID)
REFERENCES SONG(SongID)
);
再次,在支付与用户之间,多对多关系。所以你需要另一个关联表。此表上还有一个复合主键(PRIMARY KEY(UserID,PayID))
CREATE TABLE Users_Payment (
UserID INTEGER,
PayID INTEGER,
PRIMARY KEY (UserID,PayID),
CONSTRAINT fk_users_payment_user FOREIGN KEY (UserID)
REFERENCES Users(UserID),
CONSTRAINT fk_users_payment_pay FOREIGN KEY (PayID)
REFERENCES Payment(PayID)
);
答案 1 :(得分:0)
错过了一些基本的策略。例如,根据您的模型,您无法找到谁付款。为多对多关系创建基线或中间表。 例如:付款和用户表创建pay_user_middle,它使用由付款和用户表PK组成的复合密钥。