Я пишу простой интерфейс в 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 год: потребовалось бы перебирать таблицу «tracklists», чтобы получить каждый трек-лист исполнителя A, а затем посмотреть его в таблице «events» (который уже является болью, как сохранить список?)
Поиск который художник играл трек Наиболее времен: проходную таблицы в целом «треклист» и получить какое-то счетчик, который выглядит для TrackID трекового
Это может стать немного запутанным, потому что я говорю о многом другом, но мне кажется, что моя база данных может быть спроектирована намного лучше или мне нужно использовать какой-то другой подход для решения этой программы по базе данных? Я ищу базовый старт-офф или подсказки/советы, чтобы получить эту базу данных намного эффективнее и лучше. Я знаю, что не каждый поиск может быть быстрым, но для меня это не кажется очень эффективным. Кроме того, есть ли лучший способ хранения списка в SQL-базе данных без необходимости их хранения в строках?
Очень интересно, некоторые вопросы: если у меня есть 10 треков с тем же именем и тремя разными художниками, он все равно будет создавать 10 записей в таблице треков? Разве это не пустая трата пространства? А во-вторых; вы связываете event_id <-> track_id, имеет ли это определенную причину? – wvd
@wvd - Связывание event_id и track_is похоже на высказывание «Этот трек был воспроизведен на этом событии». Дело в том, чтобы обратить внимание на то, что что-то произошло. Вы подсчитываете то, что произошло после факта, а не когда вы его записываете. Это гораздо лучший подход по многим причинам. Что касается вашего вопроса о 10 треках и трех художниках, я не уверен, что буду следовать за вами. Вы имеете в виду, что три артиста сотрудничали с 10 разными песнями или вы имеете в виду, что на одном мероприятии были исполнены 10 отдельных песен от трех разных исполнителей? Можете ли вы привести пример (даже составленный)? –
Я понимаю, как вы думаете. Кажется умным. Я записал некоторые записи в таблицах [здесь] (http://pastebin.com/uE2C1PtJ), единственная проблема: художники могут ПРОИЗВОДИТЬ и ВОСПРОИЗВЕДИТЬ дорожки. С помощью своего метода я никогда не могу сказать, что «художник Х играл большую часть времени в треке». – wvd