如何解决如果条目不存在,我如何创建条目,如果存在,我只添加日期?
我有一张桌子 TRACKS:
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)。我不在乎时间,只在乎日期。
所以我有这首歌的一个条目,但播放日期不同。我想要重复的日期,因为这样我可以计算播放次数。
这是其他表格:
专辑:
id integer NOT NULL,FOREIGN KEY (artist_name) REFERENCES artists(name)
艺术家:
id integer NOT NULL,name text UNIQUE,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" 3 次。
明天再听两遍。
我希望程序在第一时间创建艺术家、专辑、歌曲和日期,并在 TRACKS 中添加另外两个 2021-06-24,而不复制其他所有内容。
明天会增加两次 2021-06-25。
必须以某种方式我可以 COUNT() 日期的数量才能知道我播放了歌曲、专辑或艺术家的次数。
解决方法
针对您的要求的标准化架构是有一个单独的表,您每次收听曲目时都会在其中插入一行(带有曲目的 ID 和当前时间戳)。
因此,表 date
中没有 TRACKS
列。
此外,您应该将专辑的 ID 存储在表 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,album_id text,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 即可向表 LISTEN
中插入新行:
INSERT INTO LISTEN(track_id) VALUES (152);
日期默认为当前时间戳。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。