Ответ 1
все зависит от используемой вами СУБД. Если вы хотите знать, как это реализовано в MS SQL Server, все, что нужно прочитать:
- Страницы (я думаю, они находятся практически во всех современных СУБД) - в SQL Server они составляют 8 КБ. Файл базы данных состоит из страниц.
- Экстенты - логические группы из 8 непрерывных страниц
- (S) GAM - (общая) Глобальная карта распределения. Растровое изображение, содержащее информацию о свободных и занятых экстентах. Это одна из первых страниц в файле базы данных.
- IAM - Карта распределения индексов. Вы можете узнать, какой индекс/куча хранится в пределах экстентов. Имея эту информацию, вы можете получить место в файле, где хранится индекс/куча.
Используя IAM и GAM (или SGAM), вы можете разделить страницу - просто переместите часть страницы (которая должна быть переполнена) на другую страницу в файле.
IAM и GAM также отвечают на ваш первый вопрос.
Большинство этих имен берутся из MS SQL Server, но я уверен, что в других СУБД решается довольно похоже.
Надеюсь, что это поможет.