我正在爲一個簡單的數據庫編寫一個簡單的Python接口。數據庫是一個簡單的數據庫,它存儲哪個特定曲目在哪個活動中以及由哪個藝術家播放。 Python中的接口還不是問題,儘管數據庫的設計是。我想出了以下事情:用於舞蹈事件曲目列表存儲的數據庫設計
--- EVENTS ---
CREATE TABLE events (
id INTEGER PRIMARY KEY autoincrement,
event_name TEXT NOT NULL,
event_date TEXT NOT NULL,
<list of tracklist-ids - foreign key?>
);
--- TRACKLISTS ---
CREATE TABLE tracklists (
id INTEGER PRIMARY KEY autoincrement,
artist TEXT NOT NULL,
<list of track-ids - foreign key?>
);
--- TRACKS ---
CREATE TABLE tracks (
id INTEGER PRIMARY KEY autoincrement,
trackartist TEXT NOT NULL,
trackname TEXT NOT NULL,
timesplayed INTEGER NOT NULL,
);
它只是不覺得邏輯對我來說,我需要的方式來許多操作得到一些簡單的事情了數據庫,幾個例子:
獲取藝術家A在2006年至2009年期間播放的歌曲(曲目)列表:需要循環播放「曲目列表」以獲取藝術家A的每個曲目組,然後在「活動」表中查找它(這已經很痛苦,如何存儲清單?)
查找該藝術家播放的曲目一個最次數:貫穿整個「tracklists」表循環,並得到某種計數器看起來對的TrackID曲目一
它可能會變得有點混亂,因爲我說的關於很多不同的事情,但對我來說,似乎我的數據庫可以設計得更好,或者我應該使用某種其他方法來以數據庫方式處理這個程序?我正在尋找一個基本的起點或提示/技巧來讓這個數據庫更高效和更好。我知道不是每個查詢都可以很快,但對我來說這似乎不是很有效。另外,有沒有更好的方式將列表存儲到SQL數據庫中,而無需將它們存儲到字符串中?
非常有趣,有些問題:如果我有10個同名的曲目和三個不同的藝術家,它仍然會在曲目表中創建10個條目?這不是浪費空間嗎?其次;你鏈接的event_id <-> track_id,有這個特定的原因? – wvd 2012-03-12 15:53:09
@wvd - 鏈接event_id和track_is就像是說「這個曲目是在這個活動中播放的」。關鍵是要記錄事情發生的事實。你數了事後發生的事情,而不是在你錄製它的時候。這是一個更好的方法,原因很多。關於你關於10首曲目和三位藝術家的問題,我不確定我是否跟着你。你的意思是三位藝術家合作了10首不同的歌曲,還是你的意思是說,來自3位不同藝術家的10首獨立歌曲是在一個事件中進行的?你能舉一個例子(甚至是一個化妝)嗎? – 2012-03-12 19:46:15
我明白你的想法。看起來很聰明。我在表格[這裏](http://pastebin.com/uE2C1PtJ)寫下了一些條目,唯一的問題是:藝術家可以製作和播放曲目。用你的方法,我永遠不能說「藝術家X在大部分時間都演奏過A曲」。 – wvd 2012-03-12 20:41:58