UPD: как это влияет на БД и в чём выгода использования конкретных типов полей?
Если используется PostgreSQL - то там про эти типы данных написано:
Тип integer (4 байта - диапазон от -2147483648 до +2147483647) - обычный выбор, дающий баланс между диапазоном, занимаемым местом и производительностью. Тип smallint (2 байта, диапазон -32768 до +32767) обычно используется когда необходима экономия места на диске. Тип bigint (8 байт, диапазон -9223372036854775808 до 9223372036854775807) следует использовать только если диапазона integer не хватает, поскольку выборки integer значительно производительнее.
Ну и соответственно Positive... следует использовать в тех случаях когда у вас используются только положительные числа - к примеру коды товаров, дабы избежать ошибок.