如何在 MySQL/SQL 中存储评价和推荐歌曲或项目的数据

How to store data on who rated and recommended a song or item in MySQL/SQL

基本上,我试图记录推荐资源的人数以及推荐歌曲的人数和每个人的人数 - 但是我不确定如何在 relational database.这是我的架构和 SQLFiddle Link 上的示例:http://sqlfiddle.com/#!9/29063/1

这是我的 DDL:

  CREATE TABLE IF NOT EXISTS Users(
  userID INT NOT NULL AUTO_INCREMENT,
  forename VARCHAR(100),
  surname VARCHAR(100),
  PRIMARY KEY(userID)
  );


CREATE TABLE IF NOT EXISTS Type(
  typeID INT NOT NULL AUTO_INCREMENT,
  typeName VARCHAR(100),
  PRIMARY KEY(typeID)
  );


CREATE TABLE IF NOT EXISTS Songs(
    songID INT NOT NULL AUTO_INCREMENT,
    typeID INT NOT NULL,
    songName VARCHAR(100),
    rating INT,
    recommended TINYINT(1),
    FOREIGN KEY (typeID) REFERENCES Type(typeID),
    PRIMARY KEY (songID)
);

INSERT INTO Users VALUES
(NULL, "Jack", "Son"),
(NULL, "Bob", "Marley"),
(NULL, "Ringo", "Star");

INSERT INTO Type VALUES
(NULL, "Rap"),
(NULL, "RnB"),
(NULL, "HipHop"),
(NULL, "Jazz");

INSERT INTO Songs VALUES
(NULL, 1, "California Love", 2, 1),
(NULL, 2, "Locked Up", 4, 0),
(NULL, 3, "Tell Em", 5, 0),
(NULL, 4, "Jazz it up", 1, 1);

您在 table Songs 中看到了 Rating row/column - 我想记录谁评价了这首歌并将其存储在另一个 table 也许吧?我只想存储平均评分。我也想记录谁推荐了这首歌以及他们的详细信息。

我该怎么做?如果有人能给我模式或想法,我会节省很多时间和头痛。

使用 userid、songid 和 rating 列创建一个新的 table UserRating。可能还有一个日期栏,因为他们给它打分的时间。 Table 和 FKUserID int, FKSongID int, Rating it, RankDate datetime

然后您可以使用 select songs.id, AVG(Rating) from songs inner join UserRating on UserRating.FKSongID = songs.ID group by songs.id 这将按平均排名为您提供所有歌曲。

或者如果您需要用户评价的所有歌曲 Select * from users inner join UserRating on UserRating.FKUserID = user.ID

或者如果您需要所有评分高于 5 的歌曲 select * from songs inner join UserRating on UserRating.FKSongID = Songs.ID where rating > 5等等等等