Задать вопрос

Как хранить в БД поле «зарплата»?

Зарплата бывает разная:


33000 рублей

от 33000 рублей

до 33000 рублей

28000–30000 рублей

33 000 рублей + процент

33 000 рублей + премии

сдельная 70%

договорная
и так далее и тому подобное


Как с вашей точки зрения наилучшим способом организовать хранение этих данных в базе?


Приходили идеи указывать нижнюю и верхнюю границу (отрезок), а также тип (сдельная, равно, от, до и т.п.). Или, к примеру, указывать только минимальную (от Х рублей) и возможное отклонение, а пустое поле считать «договорной». Вариантов уйма, но, быть может, есть что-то более-менее универсальное?
  • Вопрос задан
  • 2846 просмотров
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
@korvindest
Можно попробовать пойти таким путем.
3 поля
MinSalary
MaxSalary
PercentSalary

1. Константная зарплата MaxSalary=MinSalary, PercentSalary=NULL
2. Зарплата «От» MinSalary=someValue, MaxSalary=NULL, PercentSalary=NULL
3. Зарплата «До» MinSalary=NULL, MaxSalary=someValue, PercentSalary=NULL
4. Сдельная MinSalary=NULL, MaxSalary=NULL, PercentSalary=someValue
5. Собственно зарплата + % MaxSalary=MinSalary, PercentSalary=someValue
6. Договорную можно оставить все NULL, но думаю будет правилнее все же ограничить ее определенными рамками «От» и «До»
Ответ написан
Не знаю что вы там делаете, но могу предположить что базу данных вакансий. И смотреть её будет соискатель.
Во-первых, «сдельная 70%» — это сколько соискатель будет получать в месяц?

Во-вторых, будет удобно, если будет фильтр, которым можно пользоваться. А в фильтре то нужно только одно поле: «минимальная зарплата От». Вряд ли кто-то будет ограничивать себя сверху.

Думаю, что хранить надо два значения «от», «до». Отсутствие значения в том или ином поле означает неограниченность. Оба значения отсутствуют — зарплата договорная. Чтобы указать фиксированную зарплату надо хранить одно и тоже значение (как его будут вводить — это отдельный разговор). Процент, премии, и т.п. можно расставлять галочками, хранить в виде флагов.
Ответ написан
mekegi
@mekegi
Заведите для зарплат и надбавок две отдельные таблицы.
Надбавки это премии или процент. Там структура очень простая.
У надбавок и зарплат должна быть ссылка на сотрудника. (тк один человек может получать несколько зарплат и разных надбавок)
В таблице с зарплатами храните минимальную и максимальную зарплату, тип валюты (рубли, доллары)
тип самой зарплаты (от, до и пр)

В самом коде я бы сделал BasePrice и отнаследовал бы от него IntervalPrice и тд
Ответ написан
Комментировать
Об универсальном стандарте хранения заработных плат в реляционной базе я не слышал. Не вижу проблем создать базу с учетом всех возможностей.
Или вас пугают пустые поля? От них можно избавится, но могут начаться проблемы с производительностью, тогда придется делать избыточную таблицу для выборок, где все-равно будут все эти пустые поля. В общем, не переживайте.

Если вы хотите узнать какие вообще есть стандарты начисления заработных плат, то:
www.google.com.ua/search?q=основные+формы+начисления+заработных+плат
Ответ написан
lafayette
@lafayette
С реляционными базами 2 варианта: 1 (на мой взгляд наиболее предпочтительный) — это создание полей для всех возможных вариантов, 2 — хранение сериализованных данных в blob. 2 вариант имеет огромный минус — не получится выполнять сортировку.

Если допускается использование NoSQL решения, то я бы сделал примерно так:
{
	/* ... */
	"salary": {
		"fixed": 30000,
		"bonus": 1, // Тип бонуса, например 1 - процент, 2 - премии и т.п.
	}
},
{
	/* ... */
	"salary": {
		"range": [28000, null], // Сверху не ограничено
	}
},
{
	/* ... */
	"salary": null, // Не указана (договорная)
},
Ответ написан
Комментировать
@ChemAli Автор вопроса
Решено. Делаем два поля: от X и до Y.

X = X рублей
X–Y = X–Y рублей
Y = до Y рублей
—— = договорная (включая сдельную, попроектную, посменную, посуточную, при гибком графике и проч.)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы