Чому на верхніх платформах бази даних не доступні цілі цільові типи?


15

Бази даних, як правило, дуже настроюються з різними типами даних та спеціальною довжиною.

Мене це дивує, коли я намагаюся шукати синтаксис для використання unsigned intтипів, які вони недоступні ні в PostgreSQL, ні в MS SQL Server. Здається, MySQL і Oracle.

Здається, це як неабиякий упущення з їхнього боку - наступний найкращий варіант, який є перфомантом, є long / bigint, (8-байтне ціле число), але може бути абсолютно непотрібним! Хтось знає, чому він вирішив би не включати рідну неподписану підтримку int?


2
Портативний == стандартний мандат. Стандарт C не визначає ширину звичайних точок або довжин, а лише мінімальні діапазони репрезентативних чисел. Платформи з 16 бітовими входами були поширеними в певний момент. 64 біт можливий. 36 теж (хоч і вимерло). 24 трапляється (ДСП). Як часто у вас є дані, що відповідають 32-бітовим, але не 31, і ви оцінили, що використання звичайних числових типів дає вам результативність?
Мат

2
І SQL-Server, і Postgres має NUMERIC(10)цілі числа до 9.999.999.999(і з обмеженням ви можете заборонити негативні значення.)
ypercubeᵀᴹ

4
З однієї причини: вони не визначені в стандарті SQL. Для більш тривалої дискусії щодо Postgres подивіться на цю дискусію: postgresql.1045698.n5.nabble.com/… та це: postgresql.1045698.n5.nabble.com/…
a_horse_with_no_name


1
@ Mat Це не хит продуктивності Я хвилююся, це 4 зайвих байти x 153 мільйони = ~ 612 зайвих МБ, витрачені значення перевищують 3 мільярди, але не 4 мільярди. Числовий
Ehryk

Відповіді:


14

Джим Хогг від Microsoft відповів на це питання наступним чином:

Є плюси і мінуси. З іншого боку, це здається хорошим способом уникнути деяких помилок - перевірка (підписаного) int має значення> 0. І я б також ризикну, що багато застосувань int насправді стосуються підрахунків, які ніколи не повинні бути негативними . На питання про подвоєння максимальної кількості рядків? - правда, але я б сказав, що це менш переконливо.

З боку проти… змішування підписаних / неподписаних типів у C або C ++ здається, що це повинно бути досить простим. Це не. Це відкриває невелику скарбничку важко знайти помилок - більшість із-за складних правил неявного просування / розширення. На жаль, SQL вже має ще складніший набір правил кастингу. Додаю, що непідписані вставки, я, боюся, ще більше заплутають нас.

Я буду тримати цю пропозицію в книгах. Але, серед усіх можливостей, які ми могли / слід додати, ця, з повагою, не знаходиться у верхній частині цього списку.

Джерело: Microsoft Connect

Я б додав істотно до списку профі та ще раз зазначив, що їх SQL-движок вже робить більш складні речі, ніж це, і тому їх команда може впоратися з додатковою складністю. Хоча я не згоден з їх підсумком, саме тому SQL Server не підтримує неподписані типи .

Посилання Connect спочатку було опубліковано Мартіном Смітом у коментарях до запитання.


3
"плутайте нас усіх ще більше" - напевно, це стосується всіх, хто використовує SQL Server, а не лише власну команду розробників.
Оскар Берггрен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.