mysql - 创建具有描述属性的表访问歌曲列表

标签 mysql sql diagram

有3个表User和SongList(一对多),1个用户可以有1个及更多songList。子列表(一对多)到歌曲列表。 SongList 可以是公开的(对所有人可见)、私有(private)的(只有所有者可以查看)和友好的(所有者+一些其他用户)。也许对于 SubList 来说应该是相同的(私有(private)的,公共(public)的......),但现在并不重要。

如何更好地做到这一点?

CREATE TABLE IF NOT EXISTS `mydb`.`user` (
  `username` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  `id` INT NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB


CREATE TABLE IF NOT EXISTS `mydb`.`song_list` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(100) NOT NULL,
  `cretaed` DATE NOT NULL,
  `updated` DATE NULL,
  `user_id` INT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_group_user1_idx` (`user_id` ASC),
  CONSTRAINT `fk_group_user1`
    FOREIGN KEY (`user_id`)
    REFERENCES `mydb`.`user` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

CREATE TABLE IF NOT EXISTS `mydb`.`subgroup` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(100) NULL,
  `created` DATE NULL,
  `updated` DATE NULL,
  `song_list_id` INT NOT NULL,
  PRIMARY KEY (`id`, `song_list_id`),
  INDEX `fk_subgroup_song_list1_idx` (`song_list_id` ASC),
  CONSTRAINT `fk_subgroup_song_list1`
    FOREIGN KEY (`song_list_id`)
    REFERENCES `mydb`.`song_list` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

谢谢。

最佳答案

直接建模就可以了。添加另一个表,例如
AccessType (AccessTypeID int, AccessTypeName varchar(200))
在此插入记录,例如1-公共(public)、2-私有(private)等。然后在您的表中
SongList 和 SubSongList 添加 AccessTypeID 列和
使它们的外键 (FK) 指向 AccessType 表。
像 AccessType 这样的表通常称为查找表。

关于mysql - 创建具有描述属性的表访问歌曲列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28419885/

相关文章:

C# MySQL ExecuteReader

php - mysql - 在一个查询中获取显式值和随机值

MySQL SELECT 记录从特定日期开始不存在

class - UML 类图

mysql - 如何使用 E/R 图绘制以下数据库模式?

drawing - 一些更有效的白板技巧?

mysql - 评级地点

mysql - CodeIgniter SQL Update 和 Union 在一起?

mysql - 将 SQL 查询转换为 JPQL

mysql - (SQL) 如果某列包含特定字符串则更新该列