Я пытаюсь создать схему базы данных, которая должна работать на набор данных, который выглядит следующим образом:Redshift схема дизайн
Events
event_id|time|key1|key2|data
И это необходимо для выполнения запросов, как это эффективно:
Получить все события, key1/key2 = ... и время между ... и ...
Одна схема, я думал о том, будет иметь
Events
primary_key=event_id|key1|key2|data
Key1Lookup
primary_key=key1|sortkey=time|event_id
Key2Lookup
primary_key=key2|sortkey=time|event_id
Так что мой запрос может выглядеть
SELECT data FROM Events, Key1Lookup WHERE key1=... AND time BETWEEN ... AND ... AND Events.event_id = Key1Lookup.event_id
или
SELECT data FROM Events, Key2Lookup WHERE key2=... AND time BETWEEN ... AND ... AND Events.event_id = Key2Lookup.event_id
ли это, кажется, как правая клавиша выбора конструкции/запроса? Я совершенно новый для красного смещения, поэтому мне действительно нужно руководство здесь.
Дополнительная информация: Event_id уникален. В Key1Lookup ключ1 не уникален, но в Key1Lookup есть несколько повторений (подумайте об этом как user_id в таблице комментариев). В Key2Lookup key2 не уникален, но в Key2Lookup есть несколько повторений (подумайте об этом как location_id в таблице комментариев). Существует огромное количество различных ключей1, и существует огромное количество различных ключей2. Я ожидаю, что отличное количество key1s будет много увеличиваться, и я ожидаю, что значительное количество key2s увеличится.
Итак, единственная разница, которую вы предлагаете, - сделать event_id отличной, правильно? – michaelsnowden
см. Пункт № 2 выше: я сказал, что нет смысла использовать ключ dist в вашей настройке. Пример №3: вы можете поместить event_id в качестве первичного ключа, если хотите. –
Моя основная рекомендация - иметь денормализованные данные, в отличие от нормализованного, который вы имеете в виду. и я думаю, я поставил достаточно аргументов за это –