私はシンプルなデータベースのために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,
);
、私はいくつかのデータベースのうち簡単なもの、いくつかの例を得るために多くの操作に方法が必要です
2006年から2009年にアーティストAが演奏した曲(トラック)のリストを取得するには、 'tracklists'テーブルをループしてアーティストAのすべてのtracklistidを取得し、 'events'テーブルで検索しますそれは既に痛みです、どのようにリストを保存する?)
ルックアップ私が話しているので、それは少し混乱になるかもしれません
を全部「tracklists」テーブルをループし、トラックのtrackid探しカウンタのいくつかの並べ替えを取得する:どのアーティストがトラックAを何回のほとんどを果たしました私にとってはデータベースがはるかに優れていると思われますが、このプログラムをデータベースに取り組むために何らかのアプローチをとるべきでしょうか?私は基本的なスタートオフやヒント/ヒントを探して、このデータベースをはるかに効率的かつより良いものにしています。すべてのルックアップが高速になるわけではありませんが、私にとっては非常に効率的ではありません。また、リストをSQLデータベースに格納するには、文字列に格納する必要がありません。
非常に興味深い、いくつかの質問:私は同じ名前と3つの異なるアーティストと10トラックを持っている場合でも、トラックテーブルに10のエントリを作成するだろうか?これはスペースの無駄ですか?そして第二に、あなたはevent_id <-> track_idをリンクしていますが、これには何らかの理由がありますか? – wvd
@wvd - event_idとtrack_isをリンクすると、「このトラックはこのイベントで再生されました」というようなものです。ポイントは何かが起こったという事実をメモすることです。あなたはそれを記録している間ではなく、事実の後に起こった何かを数えます。これは多くの理由によりずっと良いアプローチです。 10曲と3人のアーティストについてのあなたの質問については、私はあなたに従うかどうかわかりません。 3人のアーティストが10種類の曲をコラボレーションしているということですか、3つの異なるアーティストから10曲ずつ別々の曲がイベントで演奏されたということですか?あなたは一例を挙げることができますか? –
私はあなたの考えを理解しています。スマートに見えます。私はテーブル[ここ](http://pastebin.com/uE2C1PtJ)にいくつかのエントリを書きましたが、唯一の問題はアーティストがトラックを制作して再生できることです。あなたの方法では、「アーティストXはトラックAを時代に演奏しました」とは決して言わない。 – wvd