Реструктуризировать таблицы на существующем веб-сайте, чтобы хранить исторические данные? - PullRequest
1 голос
/ 16 августа 2011

Я пытался найти соответствие своей проблеме в существующих вопросах, и я приму ссылки в качестве ответа и закрою свой вопрос, если они у вас есть.

Я пытаюсь найти способ реструктурировать мои существующие таблицы. У меня есть веб-сайт, и я потратил немало времени, работая над ним. Теперь у меня есть все таблицы и выбор на месте. К сожалению, таблица «Имя» и «Фамилия» сильно меняется, так как пользователи обновляют свою информацию. Я хочу сохранить исторические данные для этих полей, чтобы после их изменения я мог найти пользователей по их настоящим именам. Имена не уникальны, но их легче запомнить, чем их идентификационные номера. Итак, у меня есть таблица участника с полями (имя пользователя, адрес электронной почты, имя, отчество, фамилия, dob, пароль, страна). Должен ли я просто создать новые таблицы для имени и фамилии, чтобы я мог сохранить изменения?

Ответы [ 3 ]

2 голосов
/ 16 августа 2011

У меня была похожая проблема. Я вышел из ситуации так Создана таблица с такими полями.

| Id | id_user | name_field | value | date |

Я думаю, что много ясного ... "name_field" в том, что пользователь изменился ... (Имя, Страна и т. Д.) «value», который был в ячейке, и «date», когда произошло изменение

1 голос
/ 16 августа 2011

Просто чтобы убедиться, что я правильно истолковал ваш вопрос: В настоящее время у вас есть таблица с полями username, email, firstname, middlename, familyname, dob, password, country и вы хотите сохранить историю для колонок имени и фамилии. Это правильно?

Если это так, я бы порекомендовал добавить столбцы достоверности времени в вашу таблицу (valid_from, valid_until) и вставлять новые строки для каждого изменения, устанавливая "valid_from" для текущей записи в now (), а valid_until в null. Вы также установите для столбца valid_until последней строки для этого пользователя значение now (). Текущая запись - это та, где valid_until равен нулю.

Этот дизайн является самоописанием, хотя было бы лучше, если бы вы сохранили изменения для всех полей в таблице, а не только для имен и фамилий. Это также позволяет хранить историю паролей.

Таблица будет выглядеть примерно так:

id
username
email
firstname
middlename
familyname
dob
password
country
valid_from
valid_until

Например:

    id    username    email    firstname    familyname    ...    valid_from    valid_until
-----------------------------------------------------------------------------------------------------
   1      bob        bob@b.com Bob          Smith                1/Jan/2011    null

Когда Боб меняет свою фамилию, это становится

    id    username    email    firstname    familyname    ...    valid_from    valid_until
-----------------------------------------------------------------------------------------------------
   1      bob        bob@b.com Bob          Smith                1/Jan/2011    1/Aug/2011
   1      bob        bob@b.com Bob          Brown                1/Aug/2011    null
1 голос
/ 16 августа 2011

Я бы предложил ответ ДА. Добавьте новые поля для имени / фамилии и найдите достойный алгоритм для преобразования «полного имени» в «первое» и «последнее» (их много, вы даже можете использовать excel )

...