Все потоки
Поиск
Написать публикацию
Обновить
100.53

SQL *

Формальный непроцедурный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Автоинкрементные первичные ключи (суррогатные ключи) = зло?

Время на прочтение7 мин
Количество просмотров27K
В этой статье я приведу взгляд (отрицательный по большей части) Джоша Беркуса, CEO компании PostgreSQL Experts Inc. на использование суррогатных ключей для таблиц базы данных, тех самых INT NOT NULL AUTO_INCREMENT PRIMARY KEY, к которым мы привыкли. Фактически, это будет вольный, сильно сокращенный перевод его статьи на ittoolbox.

За статьей последует разбор моих собственных ошибок по этой теме, допущенных в одном старом проекте. Я был молод и глуп, но это меня не извиняет.

Честно говоря, прочитав эту статью и не заметив, кто автор, я подумал, что он все же преувеличивает и вообще, я без него как-нибудь разберусь, где и какие ключи мне использовать. Потом я еще немного подумал и полез за дампом структуры базы моего старого проекта. Было интересно.

Если вы опытный DBA, наверное, вам стоит пройти мимо, чтобы не расстраиваться.

Но обо всем по порядку. Сначала ОЧЕНЬ сокращенный перевод:
Читать дальше →

Секционирование. Автоматическое добавление секций

Время на прочтение15 мин
Количество просмотров33K
В версии 11g в Oracle появилась несколько новых замечательных схем секционирования — например, удобная функциональность интервального секционирования — автоматического создания секций по мере выхода range из заданных границ.
В версиях до 11g необходимо периодически вручную либо заранее добавлять секции, либо разбивать секцию по умолчанию. То есть постоянно необходимо отслеживать состояние таких таблиц. В данной статье я поделюсь своими решениями для автоматизации таких задач секционирования.
Сначала приведу пример для 11g:
  1. create table res (
  2.   res_id     number not null,
  3.   res_date  date,
  4.   hotel_id  number(3),
  5.   guest_id  number
  6. )
  7. partition by range (res_id)
  8. interval (100) store in (users)
  9. (
  10.   partition p1 values less than (101)
  11. );

Этот скрипт создает секцию p1 для записей, значение столбца res_id которых находится в диапазоне 1-100. Когда вставляются записи со значением столбца res_id меньшим 101, они помещаются в секцию p1, а когда в новой записи значение этого столбца равно или больше 101, сервер Oracle Database 11g создает новую секцию, имя которой генерируется системой. Подробнее с этим примером и прочими новыми схемами секционирования вы можете познакомиться в переводе статьи Арупа Нанды в русском издании Oracle Magazine.
Рассмотренные ниже решения можно применить и в других СУБД, не поддерживающих автоматическое добавление секций
Читать дальше →

Выпущен SQL Server 2008 Service Pack 2 и еще некоторые обновления

Время на прочтение1 мин
Количество просмотров1.7K
image

Выпущен второй сервисный пакет исправлений для SQL Server 2008.

Полный список нововведений можно найти тут, ниже некоторые из них:
  • представлена поддержка до 15000 разделов для таблиц и индексов. Ранее существовал предел до 1000 разделов. Полное описание нововведения можно найти в этом отдельном документе (.docx);
  • интеграция Reporting Services с SharePoint 2010;
  • SQL Server 2008 R2 Application and Multi-Server Management теперь совместим и может работать с SQL Server 2008;
  • новый административный инструмент SQL Server Utility;
  • поддержка приложениями Data-tier Application (DAC), которая была ранее представлена для SQL Server 2008 R2.
Загрузить второй сервис-пак для SQL Server 2008 можно по этому адресу.
Кроме того, были обновлены следующие инструменты:
  • SQL Server 2008 SP2 Reporting Services Report Builder (link);
  • SQL Server 2008 SP2 Reporting Services Add-in for Microsoft SharePoint Technologies (link).

Обзор типов индексов Oracle, MySQL, PostgreSQL, MS SQL

Время на прочтение6 мин
Количество просмотров207K
В одном из комментариев здесь была просьба рассказать подробнее об индексах, и так как, в рунете практически нет сводных данных о поддерживаемых индексах различных СУБД, в данном обзоре я рассмотрю, какие типы индексов поддерживаются в наиболее популярных СУБД
Взглянем?

Библиотека dklab_rowlog для версионирования строк в таблицах PostgreSQL

Время на прочтение4 мин
Количество просмотров3K
В продолжение сегодняшнего топика Версионность и история данных — поделюсь простеньким инструментом, который мы используем.

Dklab_rowlog — это библиотека из нескольких хранимых процедур PostgreSQL, позволяющая добавить версионирование записей к любой таблице в БД. Иными словами, что бы ни происходило с таблицей, как бы данные там ни менялись (добавлялись/удалялись), это будет отражено в специальной табличке-логе.

Преимущества:
  • Версионирование добавляется к любой таблице за 1 минуту с использованием 1 SQL-команды.
  • Можно указать, какие колонки надо сохранять, а какие — нет (что экономит место). При этом запись в лог добавится только в случае, если хотя бы одна из указанных колонок изменилась.
  • Можно указать колонку, которая будет трактоваться как «ID автора изменения».
  • Можно задать колонки, которые будут логироваться в любом случае, независимо от того, менялись они или нет.

Примеры использования


Предположим, нам нужно логировать изменения вот в такой табличке:
Читать дальше →

Версионность и история данных

Время на прочтение5 мин
Количество просмотров145K
При разработке баз данных зачастую требуется обеспечить поддержку версионности и хранения истории объектов. Например, у работника может изменяться должность, у должности в свою очередь может меняться оклад — в многомерном моделировании это называется Slowly changing dimensions(далее SCD) — редко изменяющиеся измерения, то есть измерения, не ключевые атрибуты которых имеют тенденцию со временем изменяться. Всего существует 6 основных типов(методов) SCD, которые определяют как история изменений может быть отражена в модели.

Подробнее...

О, эти планы запросов

Время на прочтение2 мин
Количество просмотров77K


История стара как мир. Две таблицы:
  • Cities – 100 уникальных городов.
  • People – 10 млн. людей. У некоторых людей город может быть не указан.

Распределение людей по городам – равномерное.
Индексы на поля Cites.Id, Cites.Name, People .CityId – в наличии.

Нужно выбрать первых 100 записей People, отсортированных по Cites.

Читать дальше →

Анонсирован SQL Server Compact Edition 4

Время на прочтение1 мин
Количество просмотров13K
Скотт Гатри в своем блоге анонсировал новую версию компактной базы данных SQL Server Compact Edition 4. SQL Server Compact Edition 4 – это бесплатный, встраиваемый движок базы данных, который был спроектирован в том числе для работы в среде веб-приложений ASP.NET.

SQL Server Compact Edition 4 обладает следующими особенностями:
  • работает с существующим API, вы можете использовать ADO.NET, Entity Framework, NHibernate для работы с базами данным SQL CE 4;
  • установка не требуется, вам не нужно ничего устанавливать, стоит только скопировать файл базы данных в соответствующую папку и ваше приложение сможет работать с ней. Кроме того, вам не нужны права администратора для работы с базами данных;
  • для работы с базами данным SQL CE4 поддерживаются сценарии shared-хостинга. Хостерам и разработчикам не требуется ничего предпринимать, все просто работает;
  • полноценная поддержка разработки и дизайна баз данных в Visual Studio 2010 и Visual Web Developer 2010 Express;
  • поддержка многопоточных сценариев веб-приложений и применение в ASP.NET без лицензионных ограничений;
  • простая миграция на полноценный SQL Server или SQL Azure, которая потребует от разработчика просто смены строки подключения в приложении;
Релиз SQL Server Compact Edition 4 намечен на следующую неделю (вместе с IIS Express и рядом других новых вещей).

Ждем!

SAP приобретает Sybase — новый раунд в борьбе за крупных клиентов и (весьме вероятно) лидерство в облачных вычислениях

Время на прочтение3 мин
Количество просмотров2.1K
Сегодня пришла новость о том, что SAP приобретает Sybase за 5.8 миллиардов долларов (новость на Хабре, статья на Yahoo Finance, оригинальный пресс-релиз тут).

Это достаточно знаковая сделка, хотя на первый взгляд может показаться не так — Sybase, по различным оценкам, владеет 2-3% рынка баз данных, за что отдавать 6 миллиардов (тем более в текущей экономической ситуации)? Конечно, статистика о долях рынка вообще вещь лукавая, но факт есть факт — сейчас не лучшие времена Sybase.
В то же время, Sybase является носителем того самого «сокровенного» знания о реляционных базах данных. Основы реляционных СУБД и практические удачные реализации устоялись за последние 20 лет, и основные изменения в СУБД за последнее десятилетие связаны с попытками по максимуму использовать вычислительные мощности и решить, наконец, проблему горизонтального масштабирования.
Основы же были и остаются неизменными, и Sybase обладает большим опытом в развитии ядра.
Уместно вспомнить, что именно на кодовой базе Sybase были основаны первые версии MSSQL, и что именно Sybase одним из первых начал активно продвигать идею хранилищ данных.
И сейчас мы видим, как компания, производящая ERP, приобретает компанию, производящую СУБД и средства data warehousing. Ранее эта же компания приобрела Business Objects, производителя Crystal Reports. Что же за этим стоит?
Читать дальше →

Простой подход к версионированию баз данных MS SQL Server

Время на прочтение8 мин
Количество просмотров12K

Простой подход к версионированию баз данных MS SQL Server



Предисловие.

Очень часто в прикладных программах возникает необходимость использовать современные базы данных, которые предоставляют разработчику очень большой функционал, основанный не только на уровне данных, но также и созданию собственного API для предоставления доступа к этим данным, посредством хранимых процедур, триггеров, функций. Очевидно, что во всей этой структуре в зависимости от обстоятельств, могут понадобятся какие-либо изменения. И в самом безобидном случае, когда разработчик имеет дело с одним клиентом и одной изменяющейся базой данных (предположим на небольшом предприятии), процесс обновления выглядит просто – мы делаем необходимые изменения в структуре, сравниваем с помощью специальных утилит, например SQL Examiner, старую и новую версию и накатываем сгенерированный sql-скрипт на существующую базу. Как видно в описанном случае, миграция данных происходит каждый раз при обновлении структуры базы. Но к сожалению, описанная ситуация встречается крайне редко, чаще — клиенты и соответствующих для них базы данных для какого-либо продукта у разработчиков исчисляется сотнями, если не больше. Таким образом, для нормального жизненного цикла базы данных необходима система версионирования (не путать с системами версионирования исходников типа Subversion).
Читать дальше →

Использование SQLCLR для увеличения производительности

Время на прочтение3 мин
Количество просмотров37K
Начиная c MS SQL Server 2005 в распоряжение разработчиков баз данных была добавлена очень мощная технология SQL CLR.

Эта технология позволяет расширять функциональность SQL сервера с помощью .NET языков, например C# или VB.NET.

Используя SQL CLR можно создавать написанные на высокопроизводительных языках свои хранимые процедуры, триггеры, пользовательские типы и функции, а также агрегаты. Это позволяет серьезно повысить производительность и расширить функциональность сервера до немыслимых границ.

Рассмотрим простой пример: напишем пользовательскую функцию разрезания строки по разделителю используя SQL синтаксис и SQL CLR на базе C# и сравним результаты.
Читать дальше →

Базы данных. Конфликты параллельного доступа (Часть 1 — поиск проблемы)

Время на прочтение4 мин
Количество просмотров15K
Уважаемые коллеги, в данной статье будем рассматривать не виды блокировок в SQL, а способы решения проблем, когда обращаемся к одним и тем же данным из разных подключений, и часть обновлений при этом может быть потеряна. Статья не зависит от конкретной базы данных и может быть одинаково интересна многим.

Всегда может быть такая ситуация, когда в одном соединении мы прочитали какие-то записи, а затем попытались их обновить. Но за момент, пока мы их редактировали, а затем попытались сохранить, в другом соединении эти же записи уже были обновлены. Иначе говоря, первый процесс читает данные, после чего те же данные читает второй процесс, и второй процесс обновляет эти же данные до того, как это сможет сделать первый процесс, то возникнет конфликт, когда первый процесс попытается обновить эти данные.

Если к базе данных обращаться из нескольких соединений и проводить изменения, то возникновение конфликтов — это лишь вопрос времени и везения.

Приложение само должно решать, какие действия ему необходимо сделать, чтобы решить этот конфликт. Например, ситуация может быть такая: администратор сайта зашел на страницу, отображающую данные обычного пользователя (администратор имеет возможность обновлять эти данные).Если после того, как страница администратора прочитает пользовательские данные из базы, и обычный пользователь обратиться к странице, отображающую его пользовательские данных, и внесет измения, то возникнет конфликт, когда администратор сохранит свои изменения. Если же конфликт не возникнет — то изменения обычного пользователя будут перекрыты и потеряны. Может быть и иначе — изменения администратора потеряны. Какое поведение должно быть верным в каждом конкретном случае — это и есть сложная проблема. Первый шаг — обнаружить её. Второй — разрешить. Есть два базовых подхода к разрешению конфликтов параллельного доступа — оптимистичный и пессимистичный.
Читать дальше →

LogParser — привычный взгляд на непривычные вещи

Время на прочтение5 мин
Количество просмотров59K
Когда я в очередной раз использовал LogParser, то чтобы проникнуться и чужим опытом, ввел его название в поиск на Хабре. Как результат — сообщение «Удивительно, но поиск не дал результатов». Вот уж воистину удивительно, когда столь интересный инструмент обойден вниманием. Пришла пора восполнить этот пробел. Итак, встречайте LogParser. Маленькая, но чертовски полезная утилита для любителей SQL.

Из названия инструмента, казалось бы, очень непросто понять, что он делает в разделе SQL. А правда заключается в том, что он такой же LogParser, как и ChartGenerator. В то смысле, что он справляется с обоими задачами с одинаковыми успехом. В целом я бы его охарактеризовал как SQL-процессор гетерогенных данных. Концепция работы в общем такова, что он берет данные из некоторого формата и преобразует их в табличный вид (собственно говоря, только на этом этапе и выполняется иногда парсинг). Затем, посредством выполнения над этими табличными данными некоторого SQL-запроса формирует таблицу с результатом и сохраняет ее опять же в некотором формате. Если коротко, то цепочка выглядит как подготовка входных данных->SQL-процессинг->генерация выходных данных.
Читать дальше →

Ближайшие события

Оптимизация хранимых процедур в SQL Server

Время на прочтение3 мин
Количество просмотров41K
Доброго дня, хабрачеловек. Сегодня я бы хотел обсудить с вами тему хранимых процедур в SQL Server 2000-2005. В последнее время их написание занимало львиную долю моего времени на работе и чего уж тут скрывать – по окончанию работы с этим делом осталось достаточно информации, которой с удовольствием поделюсь с тобой %пользовательимя%.
Знания, которыми я собираюсь поделиться, к сожалению,(или к счастью) не добыты мной эмперически, а являются, в большей степени, вольным переводом некоторых статей из буржуйских интернетов.
Итак, как можно понять из названия речь пойдет об оптимизации. Сразу оговорюсь, что все действия, которые я сейчас буду описывать, действительно дают существенный(некоторые больший, некоторые меньший) прирост производительности.
Данная статья не претендует на полное раскрытие темы оптимизации, скорее это собрание практик, которые я применяю в своей работе и могу ручаться за их эффективность. Поехали!
Читать дальше →

Новая версия C#-SQLite

Время на прочтение1 мин
Количество просмотров8.6K
C#-SQLite — это независимый от SQLite.org opensource-проект, который представляет собой полный порт SQLite на управляемый код C#. В итоге, C#-SQLite работая в .NET-окружении может встраиваться в приложения Silverlight и применяться в браузерах на стороне клиента.

Новая версия C#-SQLite в очередной раз приносит улучшения производительности.

image

Для управляемого кода совсем неплохо. В одном тесте оптимизация позволила даже превзойти SQLite в производительности. На странице измерения производительности проекта можно скачать тест и ознакомиться с прогрессом в разработке проекта: прогресс достигнутый в последних сборках, по сравнению с первой версией, очень радует.

Вышел SQL Server 2008 R2 November CTP!

Время на прочтение2 мин
Количество просмотров876
image

На мероприятии PASS Summit 2009, Тед Каммерт (Ted Kummert) анонсировал о скором появлении ноябрьской версии SQL Server 2008 R2 CTP. И сегодня мы рады сообщить, что November SQL Server 2008 R2 CTP доступен сегодня для загрузки подписчикам MSDN и TechNet. Все остальные получат доступ к November SQL Server 2008 R2 CTP 11 ноября.

Вы можете перейти на www.microsoft.com/sqlserver/2008/en/us/R2.aspx, чтобы получить больше информации.

читать далее описание нововведений в этом CTP

DbOctopus — SQL редактор с поддержкой интелектуального завершения кода

Время на прочтение2 мин
Количество просмотров3.2K
image Как-то в поисках бесплатного редактора для работы с SQL Server'ом наткнулся я на неплохую с моей точки зрения программу DBOctopus. Проект не так давно появился на свет, поэтому я не ожидал увидеть нечто сверхъестественное. Но надо сказать, я был приятно удивлен. Конечно многого еще не хватает, кое-что неудобно, но из плюсов значительных для меня могу отметить упомянутое в теме интелектуальное завершение кода. Посмотреть как это реализовано в программе. Надо сказать, что даже в SQL Server Management Studio 2005 от известной всем Майкрософт нет такого функционала. Возможен экспорт результатов выборки в такие тектовые форматы как xml, html, Excel, pdf и тектовый формат. Порадовал удобный экспорт в Excel. Программа очень неплохо оформляет результат в конечном файле xls с заголовками колонок.
Читать дальше →

Работаем с SQLite в AIR приложениях

Время на прочтение7 мин
Количество просмотров4.1K


Здравствуйте ценители (и не только) Flash, Flex и AIR.

Сегодня я расскажу как работать с локальной базой данных (SQLite) в AIR приложениях.

Для работы нам понадобится Flex Builder, какой-нибудь, редактор SQLite (я использую приложение для FireFox SQLite Manager) и немного терпения.

Подробности под катом...

Создание документации для базы данных MS SQL

Время на прочтение2 мин
Количество просмотров29K
Предлагаю вашему вниманию небольшой проект для разработчика баз данных. Начиналось это как изучение возможностей построения отчетов для SQL Server Management Studio, а закончилось как:
Database Documentation Reports, адрес проекта: http://DbDocReports.CodePlex.com.

Database Objects Report
Это набор отчетов для MS SQL Management Studio и MS SQL Reporting Services для создания документации базы данных с использованием описаний из Extended Properties. Отчеты содержат детальную информацию об объектах базы данных, таких как таблицы, представления и хранимые процедуры.

Поддерживается SQL Server Management Studio 2005/2008 и SQL Server Reporting Services 2005/2008. Использование движка отчетов позволяет с легкостью экспортировать полученные отчеты в Excel, Word, PDF и др. форматы.
Читать дальше →

Баг при установке MS SQL Server 2008

Время на прочтение2 мин
Количество просмотров6.2K
Возникла на работе потребность поставить SQL Сервер. Нуу думаю, что там, вот возьму и прям поставлю, ибо ни с 2000-м ни с 2005-м проблем при установке никогда не было. Ага! Не тут-то было! Был обнаружен один замечательный баг, с которым я очень долго боролся и все-таки победил. Проблема состоит в том, что при установке сервера, нельзя включить смешанный режим аутентификации.
О том как я это поборол читайте под хабракатом.
Читать дальше →

Вклад авторов