Нормализуйте базу данных MySQL, назначив уникальные идентификаторы определенным столбцам, затем переместите соответствующую информацию в новую таблицу - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть одна таблица со всей необходимой информацией для моей базы данных со столбцами: CompanyName, StoreLocation, StoreNumber, ItemName и ItemModel

One Table ERD

Я хочу переместить столбец CompanyName в свою собственную Company таблицу, которая будет содержать CompanyID и CompanyName в собственной таблице, а также переместить столбцы StoreLocation и StoreNumber всвои Store таблицы.Мне нужно назначить уникальные (с автоматическим приращением) идентификаторы для каждой компании и для каждого магазина при сохранении целостности внешнего первичного ключа для идентификаторов в каждой таблице.После внесения этих изменений ERD базы данных должна выглядеть примерно так:

Normalized ERD

Вот ожидаемый результат для всех данных в одной таблице:

One Table Output

И наконец, вот ожидаемый результат, когда все таблицы нормализованы:

Normalized Output

Каков наилучший способ сделать это?Я могу использовать Панд Python, если это необходимо, но мне было интересно, как лучше добавить эту нормализацию, чтобы избежать дублирования многих значений, если бы она оставалась в одной таблице.

Дайте мне знать, могу ли я предоставить какие-либо дополнительныеинформация.

1 Ответ

1 голос
/ 21 сентября 2019

Это можно сделать с 3 запросами SQL:

INSERT INTO company (companyname)
SELECT DISTINCT companyname
FROM originalTable;

INSERT INTO store (storelocation, storenumber, companyid)
SELECT DISTINCT o.storelocation, o.storenumber, c.companyid
FROM originalTable o
JOIN company c ON o.companyname = c.companyname;

INSERT INTO item (itemname, itemmodel, storeid)
SELECT o.itemname, o.itemmodel, s.storeid
FROM originalTable o
JOIN store s ON s.storelocation = o.storelocation AND s.storenumber = o.storenumber
JOIN company c ON s.companyid = s.companyid AND o.companyname = c.companyname;

Объединение с company в третьем запросе необходимо, если исходная таблица может иметь повторяющееся местоположение + хранилище для магазинов из разных компаний.

...