Как хранить в БД поле «зарплата»?
Можно попробовать пойти таким путем.
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, но думаю будет правилнее все же ограничить ее определенными рамками «От» и «До»
С реляционными базами 2 варианта: 1 (на мой взгляд наиболее предпочтительный) — это создание полей для всех возможных вариантов, 2 — хранение сериализованных данных в blob. 2 вариант имеет огромный минус — не получится выполнять сортировку.

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