Как извлечь реляционные данные из плоской таблицы, используя SQL? - PullRequest
0 голосов
/ 22 января 2020

У меня есть единый плоский стол, содержащий список людей, в которых записывается их участие в различных группах и их деятельность с течением времени. Таблица содержит следующие столбцы: - имя (первое / последнее) - электронная почта - дополнительный адрес электронной почты - группа - дата события + некоторые другие данные в серии столбцов, относящиеся к конкретному событию c (встреча, семинар) .

Я хочу выделить отдельных людей из этого в отдельную таблицу, чтобы в дальнейшем ее можно было использовать для их профилей, давая им список того, что они посетили, и соответствующую информацию. Другими словами, я хотел бы иметь список людей (профилей) и затем связать его со списком групп, в которых они находятся, а затем со списком событий для группы, в которой они участвовали.

Очевидно, те же люди появляются несколько раз:

| Full name  | email                | secondary email     | group | date       |
| John Smith | jsmith@someplace.com |                     | AcOP  | 2010-02-12 |
| John Smith | jsmith@gmail.com     | jsmith@somplace.com | AcOP  | 2010-03-14 |
| John Smith | jsmith@gmail.com     |                     | CbDP  | 2010-03-18 |
| John Smith | jsmith@someplace.com |                     | BDz   | 2010-04-02 |

Конечно, я хотел бы свернуть его в одну запись для Джона Смита с обоими электронными письмами в итоговой таблице People. Я не могу исключить, что может быть больше записей для одного и того же человека с другими электронными письмами, чем эти два - я могу жить с этим. В идеале, чтобы сделать его более сложным, я хотел бы составить список групп, создать таблицу групп (возможно, с дополнительной информацией о группах), а затем список собраний / мероприятий для каждой группы. Связав это, я получу чистую реляционную модель.

Теперь вопрос: есть ли способ выполнить такое преобразование данных в SQL? Или мне нужно написать процедуру (программу), которая будет проходить через базу данных и делать это?

База данных находится в MySQL, хотя я также могу использовать MS Access (он был предоставлен мне в этом формате).

1 Ответ

1 голос
/ 22 января 2020

Нет инструмента, который делает это автоматически. Вам придется написать пару запросов (если вы не хотите писать пакет DTS или что-то проприетарное). Вот типичный подход:

  1. Напишите два оператора выбора для двух таблиц, которые вы будете создавать sh - одну для пользователей и одну для групп. Возможно, вам придется использовать DISTINCT или GROUP BY, чтобы гарантировать, что вы получите только одну строку, когда исходная таблица содержит дубликаты.

  2. Запустите два оператора select и проверьте их на наличие проблем. Например, возможно, что некоторые пользователи появляются с двумя разными адресами электронной почты, или некоторые пользователи имеют одинаковые имена и были неправильно объединены. Они должны быть очищены, чтобы продолжить. Есть отличный способ сделать это - это более или менее ручной процесс, требующий экспертного знания данных.

  3. Написание сценариев CREATE TABLE на основе двух операторов SELECT, чтобы вы могли хранить результаты где-то.

  4. Используйте INSERT FROM или SELECT INTO, чтобы заполнить таблицы из ваших двух операторов SELECT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...