За последние 24 часа нас посетил 17581 программист и 1623 робота. Сейчас ищут 1557 программистов ...

Совет по созданию поля

Тема в разделе "MySQL", создана пользователем Vladislav_Yushkin, 25 мар 2008.

  1. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Посоветуйте как поступить
    Есть две таблицы данных

    table1
    id name country
    1 Вася 1
    2 Фред 2
    3 Гена 1

    table2
    id country
    1 Russia
    2 USA
    3 Spain

    Необходимо каким то образом производить запись в базу данных смены гражданства но при этом первое гражданство должно оставаться. В базе должно храниться до трех гражданств.

    Самое простое решение, это добавить в первую таблицу два столбца и получим
    id name country1 country2 country3

    но гражданство меняется у малого количества людей, и в таком случае придется хранить две практически пустые колонки.

    Второй вариант это создать дополнительную таблицу

    table3
    id peoples country

    куда записывать
    изменения гражданств у людей.
    Но тогда возникают всевозможные проблемы с поиском, так как должна быть возможность поиска по CONCAT(table1.name,table2.name)

    Подскажите каким образом лучше организовать базу, может у кого будет лучшее предложение...
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    в твоем случае скорее всего проще будет создать два столбца
    проверь разницу в размере базы - мускул может и сократить пустые.
    В более сложных - таблица с историей изменения параметров.
     
  3. tmanager

    tmanager Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    108
    Симпатии:
    0
    Я бы предложил такую структуру:

    persons
    id
    name

    countries
    id
    country

    citizenships
    personID
    countryID
    ts

    Таблица citizenships как раз и хранит информацию, у кого какое гражданство. Поле ts типа timestamp позволяет узнать дату/время получения гражданства -- а значит, и узнать последнее (т.е. текущее).
    а