Эффективный способ создания большой таблицы

#mysql

#mysql

Вопрос:

Я пытаюсь создать базу данных из 3 континентов (Африка, Азия и Европа), разного количества стран из каждой и разного количества языков, на которых говорят в каждой стране. Например,

 Continent-Country-Language
Africa - Egypt - Arabic
Africa - Egypt - English
Africa - Somalia - English
Asia - China - English
Asia - China - Mandarin
Asia - China - Cantonese
Asia - Japan - japanese
Asia - Iraq - Arabic
Europe - Germany - German
Europe - Belgium - Dutch
Europe - Belgium - French
  

Приведенная выше таблица становится невероятно огромной, если использовать 5 континентов, 150 стран и 2000 языков! Кроме того, если каждая переменная связана с одной внешней ссылкой, общая работа становится очень болезненной.

Мой вопрос в том, как я могу создать такую большую таблицу более эффективным способом?

ТИА!

Комментарии:

1. создавайте небольшие таблицы и используйте внешние ключи в главной таблице. т.Е. создайте одну таблицу для стран, языков и т.д.

2. 2000 записей — это ничто для mysql 🙂

3. MySQL может обрабатывать миллиарды совпадающих строк! Пара тысяч строк не вызовет у вас проблем с масштабируемостью, поверьте мне. У Google, Yahoo, LiveJournal, Technocarati установлены MySQL со многими миллиардами строк, что обеспечивает отличную производительность.

4. @stefgosselin: Ему все еще нужна нормализация, даже для 2000 записей.

5. @stefgosselin, но на самом деле я ищу эффективный способ, а не создаю огромную таблицу : (

Ответ №1:

Не делайте этого.

Создайте пять таблиц — одну для континентов, одну для стран, одну для связи языков и стран и, наконец, одну для языков.

 Continent       ContinentCountry    Country       CountryLanguage    Language
------------    ----------------    ----------    ---------------    -----------
continent_id <- continent_id        name          language_id     -> language_id
name            country_id       -> country_id <- country_id         name
  

Это называется нормализацией базы данных.

Цель нормализации базы данных — разложить отношения с аномалиями, чтобы создать меньшие, хорошо структурированные отношения.

Из статьи Википедии о нормализации базы данных.

Комментарии:

1. Поскольку отношение между Country и Language , вероятно, многие ко многим, подойдет 4-я таблица CountryLanguage .

2. @Michael, @Ibu: Если в ваших данных страна может отображаться более чем на одном континенте, то ContinentCountry промежуточная таблица тоже подойдет.

3. как создать эту таблицу здесь, как это сделал Майкл?

4. Континент ContinentCountry Страна CountryLanguage язык ——— —————- ———- ————— ——— 1 Африка 1 7 1 Бельгия 1 9 1 Арабский 2 Азия 2 3 2 Египет 1 1 2 кантонский диалект 3 Европа 2 5 3 Китай 2 1 3 Голландский 2 6 4 Германия 3 2 4 Английский 3 1 5 Ирак 3 7 5 Французский 3 4 6 Япония 3 9 6 Немецкий 1 2 7 Сомали 4 5 7 мандаринский 4 6 8 Испанский 5 1 9 Диалект 6 10 10 Японский 7 1 7 9 2 9

5. @SM вам нужно создать каждую из этих таблиц, возможно, в phpMyAdmin, затем изменить вашу логику создания / обновления / удаления, чтобы она была совместима с вашей новой структурой базы данных