mysql - 如何为以下数据模型创建表?

标签 mysql sql

我需要为在线音乐流媒体服务创建一个数据模型,其中有 4 个表:付款、用户、歌曲、流派。

IMGSHACK LINK FOR DATABASE STRUCTURE

我上传了结构图像,它突出显示了表和相应关联实体之间的关系。 (对链接表示歉意,我还不能发布图片)

模型必须确保外键有效并且引用完整性成立。

我尝试创建数据模型,并分配相应的外键,但作为一个完全的初学者,我不确定我是否正确创建了数据模型,最重要的是创建了正确的外键关系,因此我可以添加和检索数据。

有人愿意检查我的代码吗?谢谢:)

付款表

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)
);

最佳答案

付款表

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)
);

关于mysql - 如何为以下数据模型创建表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760362/

相关文章:

php - 使用 AJAX 时,如何在同一个 PHP 文件中放置选择和插入代码?

php - 试图阻止文本区域中的项目符号作为特殊字符进入我的数据库

mysql - 数据库表更改显示所有关联表

mysql - MySQL语句中的未知语法错误

即使我有索引,MySQL ORDER BY 也会花费很长时间

mysql - 从两个表中选择匹配对

MySQL 日期范围

sql - 多个选择查询合并为一个查询

php - 何时用撇号将 SQL 字段括起来?

MySQL:如何在 mysql 命令行中导入 sql 转储?