mysql - 如何设计电影数据库?

标签 mysql database sqlite

<分区>

我正在使用 TMDB api 分别获取热门、即将上映、评分最高和正在播放的电影列表。我想将它们本地存储在每天更新的数据库中。每部返回的电影都有一个唯一的 ID。因此,我想将流行电影存储在名为 popular 的表中,即将上映的电影存储在名为 commoning 的表中,反之亦然。如果我采用这种方法,我将创建四个具有相同属性的表,但我可以保持 movieId 不同以避免像更新数据库时那样出现冗余。

另一方面,如果我创建一个表,那么我不能将 movieId 区分为不同的,因为电影可能既流行又即将上映,这将在我更新数据库时导致冗余。有没有办法只插入电影如果数据库中没有具有相同 ID 和相同标签(热门、评分最高、即将上映、正在播放)的电影?

我如何设计我的数据库,以便我可以轻松地从数据库中获取与从 api 收到的不同的电影列表?

最佳答案

使用一个表:movies。在两个字段上创建唯一索引。这将只允许每种类型的电影出现一次此唯一 ID:external_idtype:

CREATE TABLE `movies` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `external_id` INT NOT NULL,
  `type` ENUM('popular', 'upcoming', 'top-rated', 'now-playing') NOT NULL,
  `name` VARCHAR(45) NULL,
  `genre` VARCHAR(45) NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `external_id_type_idx` (`external_id` ASC, `type` ASC));

使用此表结构,您可以在尝试添加电影时使用 INSERT IGNORE 语句:

INSERT IGNORE INTO `movies` (`external_id`, `type`, `name`, `genre`) VALUES (?, ?, ?, ?);

INSERT IGNORE 将尝试插入记录,但如果约束导致它失败,它将被忽略(不会插入、更新任何内容等)。参见 https://stackoverflow.com/a/548570/416412

要获得不同的电影列表(本例中即将上映),按类型过滤:

SELECT * FROM `movies` WHERE `type` = 'upcoming';

关于mysql - 如何设计电影数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31440673/

相关文章:

sql - 如果使用附加列名再次创建删除的临时表,则无法选择附加列名

安卓数据库。提供数据或代码?

Amazon EC2 上的 MySQL 与 SQLite

具有 PersistentStore 的 iOS 应用程序 coreData 作为静态 sqlite 数据迁移?

php - 使用 PHP 生成 XML 时的奇怪行为

mysql - ld 找不到 libmysqlclient

php - 不要立即看出这背后的意义(php,学校)

php - 数据库驱动的永无止境的菜单系统

php - header 、逻辑和数据库

python - 插入sqlite db-python