如果条目不存在,我该如何创建条目?如果存在,我只需添加日期?

How do i create an entry if it not exists and if it exists i just add the date?

我有一个 table 曲目:

id integer NOT NULL,
title text,
artist_name text,
album_name text,
date text,
PRIMARY KEY (id),
FOREIGN KEY (artist_name) REFERENCES artists(name),
FOREIGN KEY (album_name) REFERENCES albums(name)

我想做的是,如果歌曲条目存在(同一艺术家、相同专辑名称、相同歌曲名称)添加条目日期(即 YYYY-MM-DD)。我不关心时间,只关心日期。

所以我有这首歌的一个条目,但播放日期不同。我想要重复的日期,因为那样我可以计算播放次数。

这是其他 table:

专辑:

id integer NOT NULL,
title text,
artist_name text,
PRIMARY KEY (id),
FOREIGN KEY (artist_name) REFERENCES artists(name)

艺术家:

id integer NOT NULL,
name text UNIQUE,
PRIMARY KEY (id),
FOREIGN KEY (artist_name) REFERENCES artists(name)

我可以用

INSERT OR IGNORE INTO artists(name) VALUES(?)

对于艺术家,因为名称是唯一的,但其他人我不知道该怎么做,因为不同的艺术家可以有相同的专辑名称和歌曲名称。

样本数据:

我将以 YYYY-MM-DD 格式向数据库提供“艺术家”、“歌曲”、“专辑”和系统日期。

program.py -a "Michael Jackson" -t "Billie Jean" -d "Thriller" 程序将自动输入 YYYY-MM-DD。

所以今天我给应用程序 -a "Michael Jackson" -t "Billie Jean" -d "Thriller" 三遍。

明天再听两遍

我希望程序在第一时间创建艺术家、专辑、歌曲和日期,并在 TRACKS 中再添加两个 2021-06-24,而不复制其他所有内容。

明天将添加 2021-06-25 两次。

我必须通过 COUNT() 的方式来了解我播放歌曲、专辑或艺术家的次数。

满足您要求的规范化模式是有一个单独的 table,您每次收听曲目时都会在其中插入一行(带有曲目 ID 和当前时间戳)。
因此,table TRACKS.

中没有 date

此外,您应该将相册的 ID 存储在 table TRACKS 而不是它的标题中。
这是常见的做法,这是有原因的:有相同标题的专辑。
另外,也不需要存储艺术家,因为你可以从专辑的id中获取。

CREATE TABLE ALBUMS(
  id integer NOT NULL,
  title text,
  artist_id integer,
  PRIMARY KEY (id),
  FOREIGN KEY (artist_id) REFERENCES artists(id)
);

CREATE TABLE ARTISTS(
  id integer NOT NULL,
  name text UNIQUE,
  PRIMARY KEY (id)
); 

CREATE TABLE TRACKS( 
  id integer NOT NULL,
  title text,
  album_id text,
  PRIMARY KEY (id),
  FOREIGN KEY (album_id) REFERENCES albums(id)
);

CREATE TABLE LISTEN(
  track_id integer NOT NULL,
  date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (track_id, date),
  FOREIGN KEY (track_id) REFERENCES tracks(id)
);

您只需提供曲目的 ID 即可向 table LISTEN 插入新行:

INSERT INTO LISTEN(track_id) VALUES (152);

日期默认为当前时间戳。