2013-08-20 2 views
0

Я использую MySQL. У меня есть таблица с тремя полями: id, price, count. Мне нужно написать небольшую биллинговую систему, и я столкнулся с какой-то проблемой. Пример:Дублирование полей базы данных

  1. Пользователю нужен новый компьютер. Пользователь записывает цену и рассчитывает на БД (например, 999, 1).
  2. Администратор имеет право подтвердить эту цену или изменить. Если администратор подтвердит эту цену и подсчитает, мне нужно сохранить цену пользователя и счет и администратор. Мне нужно создать повторяющиеся поля (например, confirm_price, confirm_count), и если администратор изменил эту цену, мне нужно создать поля changed_price и changed_count. В этой таблице вариантов будет много значений 0, и кто-нибудь может порекомендовать мне другой способ решения этой проблемы.
+0

Ответ на ваш '2.' зависит от того, что вы собираетесь делать с этой информацией: какие формы необходимо заполнить, что вам нужно сохранить для аудита/отчетности и т. д. –

+0

Независимо от используемой схемы, я бы написал подтвержденную цену и рассчитывал на подтверждение независимо от того, были ли они изменены. Если вам нужно выяснить, было ли изменено одно из этих значений, вы можете просто сравнить значения для равенства. –

ответ

0

Одним из подходов может быть просто создание еще одного столбца STATUS.

После того, как пользователь вводит, это может быть 1 статус (что означает только что вошла) Approved - 2 Измененных - 3

В то время как 1 и 2 может быть в той же строке Измененной может быть отдельной строкой, при получении вы можете получить эти записи с max (status), чтобы получить только одну запись за элемент, даже если они могут иметь несколько идентификаторов в базе данных.

Та же логика состояния может использоваться другими способами для достижения того же конца.

+0

Благодарим за решение, но мне нужно сохранить все значения (неподтвержденные, подтвержденные, измененные). Мне нужно отобразить его в формате: assert_price, said_count, changed_price, changed_count ... –

+0

Итак, все, что вам нужно сделать, это сохранить каждое значение в строке и принять тот же подход, что и при максимальном статусе, если вы хотите получить самое последнее значение – skv

0

Самый простой способ - добавить дополнительный столбец, но это зависит от вашей ситуации.

Если вам не нужно, чтобы сохранить то, что первоначальная цена/кол-были, то добавление столбца легко и будет работать следующим образом:

| ID | Price | Num | Verified | 
+--------+-----------+---------+--------------+ 
| 1 | 110 | 1 |  1  | 
| 2 | 999 | 2 |  0  | 

При проверке, вы можете UPDATE строку и при сохранении вас измените Verified на 1. Затем все, что имеет колонку Verified = 0, нуждается в пересмотре и Verified = 1 подтверждено.

Так, скажем ID 2 должен иметь Количество 3. Вы бы администратора редактирования:

UPDATE myTable SET Num=3 WHERE ID=2 

Затем, когда они нажмите кнопку «Сохранить»

UPDATE myTable SET Verified=1 WHERE ID=2 

Вы также можете сделать как в один раз

UPDATE myTable SET Num=3, Verified=1 WHERE ID=2 

Если вы хотите сохранить старые значения, вы можете легко создать таблицу архива, которая может содержать метку времени. Затем просто добавьте свои значения в эту таблицу перед запуском обновлений.

Примечание:Count плохое имя столбца, как это ключевое слово в SQL

+0

, но если мне нужно хранить данные, это хороший вариант для создания двух других полей? –

+0

@incredible_titan Это сработает, но так же легко иметь таблицу архива, в которую вы вставляете данные (вместе с временной меткой) в каждое UPDATE в таблицу live. –

Смежные вопросы