【发布时间】:2021-09-08 03:11:31
【问题描述】:
我有一张桌子跟踪:
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,
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() 日期的数量,以了解我播放歌曲、专辑或艺术家的次数。
【问题讨论】:
-
发布样本数据和预期结果以阐明您想要什么。
-
@CaiusJard 不会替换只是覆盖日期吗?
-
这就是我解释你的意思,如果歌曲的条目存在......添加条目日期。如果您的意思是“DATE 应该是歌曲曾经播放过的所有日期的 CSV,并且每个插入的欺骗都应该扩展 CSV”,那么出于对良好工程的热爱,请不要这样做。放另一个表来跟踪在什么日期播放的歌曲 ID。对于将本机 1:many 关系的“多”端存储在表中的单个列中的想法,我无法反驳。这是一个糟糕的主意
-
@CaiusJard DATE 将复合。每次我播放一首歌时,它都会在 DATE 中添加另一个条目。所以我应该为此创建一个单独的表?这应该如何工作?每次新播放它都会记录 DATE 和 SONG_ID?
标签: sql sqlite database-design foreign-keys database-normalization