如果条目不存在,我该如何创建条目?如果存在,我只需添加日期?
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);
日期默认为当前时间戳。
我有一个 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);
日期默认为当前时间戳。