Как стать автором
Обновить
64.81

SQL *

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

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

Введение в многомерный анализ

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

Некоторое время назад мне довелось организовывать новую группу разработки, которая должна была заняться развитием OLAP и BI продуктов в дружеской софтверной компании. А так как группа была собрана из свежих выпускников ВУЗов, то мне пришлось написать «краткий курс молодого бойца» для того чтобы максимально доступно дать начальные понятия об OLAP людям, которые ни разу с ним не сталкивались, но уже имели опыт программирования и работы с БД.



Выкладываю теперь это Введение в Общественное Достояние.



В статье несколько смешиваются понятия OLAP, Business Intelligence, и Data Warehouse, но и в жизни часто сложно понять, где проходит граница. А уж в реальных проектах, так и подавно, все они ходят рядом. Поэтому прошу не судить строго.



Итак, что же такое OLAP.
Всего голосов 63: ↑61 и ↓2+59
Комментарии12

Выпущен SQL Server 2008 R2 SP1, дополнительные инструменты для SQL Server Denali

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

Для загрузки доступна финальная версия первого сервисного пакета исправлений для SQL Server 2008 R2. Пакет SP1 содержит шесть вышедших ранее кумулятивных обновлений для сервера, плюс предлагает некоторые новые возможности.

Загрузить пакет исправлений для разных языков и редакций можно по следующей ссылке (версия для express-редакций).

Кроме того, для загрузки доступны инструменты для сервера баз данных следующего поколения SQL Server Denali, который недавно был выпущен в очередной предварительной версии CTP3. Среди доступных инструментов следующие:
  • Product Documentation for Microsoft SQL Server Code-Named “Denali” CTP3 (link);
  • Express Core CTP 3 (link);
  • PowerPivot for Microsoft Excel CTP 3 (link);
  • Semantic Language Statistics CTP 3 (link);
  • Report Builder CTP 3 (link);
  • Reporting Services Add-in for SharePoint Technologies CTP 3 (link).
Кроме того, через средство Web Platform Installer доступна новая версия интегрированной среды разработки баз данных под кодовым именем Juneau (для замены SQL Server Management Studio).

Читать дальше →
Всего голосов 31: ↑20 и ↓11+9
Комментарии7

Основы SQL на примере задачи

Время на прочтение6 мин
Количество просмотров682K
В этом руководстве мы рассмотрим основные sql команды на примере небольшой задачи. При прочтении желательно сидеть за консолью mysql и вводить все запросы для большей наглядности.

Постановка задачи


Дана база данных, в ней 3 таблицы следующего вида:




table1: user_id (INT(5), PRIMARY KEY), username (VARCHAR(50), INDEX)
table2: phone_id (INT(5), PRIMARY KEY), user_id (INT(5), INDEX), phone_number (INT(10), INDEX)
table3: room_id (INT(5), PRIMARY KEY), phone_id (INT(5), INDEX), room_number(INT(4) INDEX)

Необходимо выбрать номер комнаты в которой сидит пользователь с ником qux…
Читать дальше →
Всего голосов 72: ↑42 и ↓30+12
Комментарии42

Методы оптимизации производительности приложения при работе с РБД

Время на прочтение3 мин
Количество просмотров7.5K
Действуют они везде – хоть MySQL, хоть Oracle хоть самописная БД. Чем умнее БД – тем больше она старается оптимизировать сама, но лучше ей помочь

1. Разделяй и властвуй, а попросту кластеризация БД – все данные одного типа можно еще разбить на кластеры – отдельные таблицы, в каждую таблицу попадают записи, которые удовлетворяют какому-то простейшему правилу, например в таблицу с индексом I попадают данные у которых ID%N==I, где N – кол-во кластеров. Таким образом очень просто и эффективно делим те данные, которые не надо считывать последовательно – например разбиваем все слова на 100-200-миллион блоков, в каждом блоке только слова у которых ID%N==I. В качестве примера в большой системе, типа социальной сети, можно поделить все данные по признаку принадлежности одному пользователю — например все фото разместить в N таблиц, информация о фото помещается в таблицу K=USER_ID%N

2. Условно — работа с диском. Всегда пиши (вставляй) последовательно, кэшируй и буферизуй запись, читать старайся подряд от начала до конца. Ускорение записи может быть просто фантастическое – много порядков, просто от того что Вы правильно используете запись зная как работает Ваш (или производителя) алгоритм записи на диск. Данные почти всегда можно отсортировать до записи – в памяти ли, разные файлы ли с кускам текста – всегда можно построить индекс или простейший массив, который отсортирован по ID данных и читать-писать их в порядке как в индексе. Как один из вариантов – всегда можно придумать более оптимальную структуру хранения данных. К примеру когда надо вставить кусок таблицы в другую таблицу делать это лучше последовательно от меньшего ID к большему, заодно отключив механизм индексации. И включив его после вставки.
Читать дальше →
Всего голосов 19: ↑12 и ↓7+5
Комментарии20

MS SQL 2011 — новое в SSMS

Время на прочтение4 мин
Количество просмотров4.3K
Одна из наиболее интересных и захватывающих разработок от Майкрософт в технологическом плане была представлена 8 ноября 2010 года. В этот день состоялся релиз CTP 1 SQL Server 2011 (Codename Denali). CTP доступна как в х86, так и в х64. Как и ожидалось, новый сервер принес много вкусненького для всех поклонников MS SQL будь то разработчик, администратор или бизнес аналитик.

За последние несколько лет Майкрософт внедрила много интересных технологий, которые были приняты разработчиками на вооружение. Самые значительные изменения были сделаны в 2005 SQL сервере и получили дополнительное развитие в 2008 выпуске. В этой статье (заключительной) будут рассмотрены изменения и новые возможности которые произошли в новой версии SQL Server.

Если у вас возникнут проблемы при установке сервера, то рекомендую обратиться к этой статье.
Далее пойдет речь о новшествах в SQL Server Management Studio (SSMS).
Читать дальше →
Всего голосов 30: ↑26 и ↓4+22
Комментарии12

MS SQL 2011 – Модификация возвращаемого набора данных

Время на прочтение5 мин
Количество просмотров11K
В оригинальном звучании и в жизни эта возможность звучит как With Result Set. Эта штука позволяет менять имена и типы данных в возвращаемом хранимой процедурой наборе данных.

Перед тем, как мы углубимся в детали использования данной возможности, рассмотрим, как предыдущие версии SQL серверов обходились с данными, которые возвращает хранимая процедура. Какие возможности они предоставляли для работы с результатом.

Для демонстрации работы будем использовать в качестве примера таблицу tbl_Test состоящую из 3 колонок.


Читать дальше →
Всего голосов 29: ↑25 и ↓4+21
Комментарии3

MS SQL 2011 — Обработка ошибок

Время на прочтение11 мин
Количество просмотров56K
Новое полезное дополнение для SQL Server 2011 (Denali) ­– выражение Throw. Разработчики на .Net уже догадались наверно, где и как оно будет использоваться.

Это слово может использоваться в сочетании с управляющей конструкцией Try…Catch и позволяет послать уведомление о возникновении ошибки времени исполнения. Когда возникает исключение, программа ищет ближайший по иерархии вверх блок Catch который может обработать исключение. Используя это выражение внутри блока Catch можно изменить вывод ошибки. Более того, теперь вызывать исключение можно произвольно в любом месте скрипта.

Далее рассмотрим различные способы поимки исключении, которые предоставляет SQL Server начиная с версии 2000 и до версии 2011, с указанием плюсов и минусов.

Читать дальше →
Всего голосов 43: ↑32 и ↓11+21
Комментарии2

MS SQL 2011 – новый оператор Offset

Время на прочтение9 мин
Количество просмотров78K
В новом SQL Server 2011 (Denali) расширяются возможности команды Order By с помощью двух долгожданных дополнительных команд:
  • Offset (смещение)
  • Fetch First или Fetch Next (взять первые… или взять следующие…)


Offset


Использование данной команды позволяет пропустить указанное количество строк перед тем как выводить результаты запроса. Что под этим подразумевается: Допустим, у нас есть 100 записей в таблице и нужно пропустить первые 10 строк и вывести строки с 11 по 100. Теперь это легко решается следующим запросом:
Select *
From  <SomeTable>
Order by  <SomeColumn>
Offset 10 Rows

Для тех товарищей, которые практикуют .Net должен быть знаком метод расширения для коллекций Skip, который пропускает указанное количество строк. Так вот выражение Offset работает точно так же. После того как данные упорядочены каким-либо образом, можно применять выражение Offset.

Читать дальше →
Всего голосов 47: ↑34 и ↓13+21
Комментарии23

MS SQL 2011 – новый объект Sequence

Время на прочтение8 мин
Количество просмотров39K
Возможность, которой не удивишь нынче пользователей Oracle, DB2, PostgreSQL и множества других реляционных баз данных, наконец-то появилась и в MS SQL Server. На арене Sequence!

Sequence – генерирует последовательность чисел так же как и identity. Однако основным плюсом sequence является то, что последовательность не зависит от какой-либо конкретной таблицы и является объектом базы данных.

Рассмотрим пример скрипта написанного на SQL Server 2008. Создание простой таблицы с двумя колонками, одна из которых будет автоинкрементной.

Create Table WithOutSequence1
(
	 EmpId int identity not null primary key
	,EmpName varchar(50) not null
)

Insert into WithOutSequence1
	Select 'Violet' Union All
	Select 'Tape'

Select * from WithOutSequence1

Похожим образом создадим еще одну таблицу.
Create Table WithOutSequence2
(
	 EmpId int identity not null primary key
	,EmpName varchar(50) not null
)

Insert into WithOutSequence2
	Select 'Violet' Union All
	Select 'Tape'

Select * from WithOutSequence2

Как можно заметить из примеров, мы записали значения в таблицу при этом значение инкрементального поля автоматически и независимо от нас заполнилось. Мы не можем повторно использовать значение этого поля в другой таблице. Давайте посмотрим как можно выйти из этой ситуации с помощью Sequence.

Общий синтаксис для команды выглядит так:
CREATE SEQUENCE [schema_name . ] sequence_name
[ AS { built_in_integer_type | user-defined_integer_type } ]
| START WITH <constant>
| INCREMENT BY <constant>
| { MINVALUE <constant> | NO MINVALUE }
| { MAXVALUE <constant> | NO MAXVALUE }
| { CYCLE | NO CYCLE }
| { CACHE [<constant> ] | NO CACHE }


Читать дальше →
Всего голосов 41: ↑33 и ↓8+25
Комментарии26

Версионная миграция структуры базы данных: еще один подход

Время на прочтение7 мин
Количество просмотров5.6K
Прочитал интересную и полезную статью (1) — и захотел поделиться собственным опытом. В нашей фирме за 12 лет работы с одной (своей, Oracle-ориентированной) программой у сотен клиентов накоплен богатейший материал на тему апгрейда структуры БД.

Первоначально мы предполагали, что достаточно хранить в каждой БД номер версии последнего апгрейда и накатывать скрипты инкрементально, поднимая версию до нужной. Такая методика успешно использовалась в предыдущей версии нашей программы, работавшей с СУБД Paradox. Но с СУБД Oracle все пошло не так, у каждого клиента было собственное видение, какой должна быть его БД, и рассинхронизация версий стала неизбежным злом. Привычная методика апгрейдов по версиям стала постоянно приводить к ошибкам, на которые уже никто и не обращал внимание, и рассогласование структур продолжалось несколько лет. В итоге у каждого клиента оказалась собственная, не идентичная никакой другой, структура БД, а клиентская часть программы как-то должна была с этим бороться.

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

Читать дальше →
Всего голосов 33: ↑29 и ↓4+25
Комментарии50

Версионная миграция структуры базы данных: основные подходы

Время на прочтение15 мин
Количество просмотров135K
Проблемы контроля версий баз данных и миграций между версиями уже не раз поднимались как на Хабре (1, 2, 3 и др.), так и в Интернете (преимущественно, англоязычном).

В первом разделе этой статьи я рассматриваю основные проблемы, которые возникают в командах программистов при внесении любых изменений в структуру базы данных. Во втором разделе я попытался выделить основные общие подходы к тому, в каком виде изменения структуры базы данных можно хранить и поддерживать в процессе разработки.
Читать дальше →
Всего голосов 89: ↑87 и ↓2+85
Комментарии83

Применение метамодели при проектировании баз данных с несколькими абстрактными слоями (часть 2)

Время на прочтение5 мин
Количество просмотров6.9K
В последнее время реляционные СУБД немного потеснены системами с альтернативными моделями данных. Отчасти это вызвано задачами повышения производительности за счет упрощения структур хранения. С другой стороны, идут поиски путей расширения выразительных средств, в том числе за счет перехода к более богатым информационным моделям. Ведь многие поняли, что повышения уровня абстракции предметной области на один порядок дает расширение сферы применения продукта в десятки раз и возможность занять многие смежные ниши, порой увеличивая количество клиентов в сотни и тысячи раз.

Первая часть: http://habrahabr.ru/blogs/sql/119317/
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии4

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

Применение метамодели при проектировании баз данных с несколькими абстрактными слоями

Время на прочтение6 мин
Количество просмотров13K
Классический подход предусматривает разработку структур баз данных, где все сущности информационной модели находятся на одном абстрактном уровне, являются однородными. Однако, сложные и слабо-структурированные предметные области приводят реляционную декомпозицию к комбинаторному взрыву, непропорциональному росту количества таблиц и связей. А динамические предметные области, в которых ежедневные изменения являются нормой жизненного цикла, требуют постоянного реинженеринга структуры реляционной базы данных.
Читать дальше →
Всего голосов 37: ↑34 и ↓3+31
Комментарии58

MSSql: Использование оператора APPLY в TSql

Время на прочтение2 мин
Количество просмотров50K
Недавно, реализуя некоторый код доступа к данным, я столкнулся с задачей выбора последних N записей для каждой сущности. Пользователь kuda78 подсказал вместо многоэтажной выборки использовать метод SelectMany.
Исследуя, какой SQL код создает LinqToSQL, я натолкнулся на интересный SQL оператор APPLY.
Читать дальше →
Всего голосов 28: ↑21 и ↓7+14
Комментарии16

GreenSQL: Защита SQL-серверов от инъекций

Время на прочтение4 мин
Количество просмотров6.3K
Иногда возникает необходимость использовать клиент-серверное программное обеспечение, реализующее нужный функционал, но крайне уязвимое к SQL-инъекциям. В основном это веб-сайты, сетевые приложения и другие сервисы, доступ к которым открыт широкому кругу пользователей, в том числе и злоумышленникам. В силу различных причин не всегда есть возможность предотвратить SQL-инъекции на уровне приложения — исходный код может быть закрыт, либо, в случае открытого кода, недостаточно знаний для внесения в него изменений, либо эта операция является дорогостоящей.

Обеспечить безопасность приложения в данном случае поможет GreenSQL — файрволл или прокси для SQL-серверов. Сервис GreenSQL размещается между вашим приложением и SQL-сервером, принимает sql-запросы от приложения и в зависимости от степени его благонадежности либо перенаправляет их на целевой SQL-сервер, либо отвергает.


Читать дальше →
Всего голосов 18: ↑12 и ↓6+6
Комментарии19

Университет Kimball: 10 основных правил многомерного моделирования

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

Марги Росс (Margy Ross) — Президент Kimball Group.

Соблюдайте следующие правила чтобы гарантировать гранулированность данных, а так же гибкость и доступность информационного ресурса в будущем. Нарушайте правила, и бросайте смятённых пользователей на глухие неприступные стены вашего хранилища данных.

Студенты, посещающие лекции Kimball Group по многомерному моделированию, попросили у меня список «заповедей Kimball» для многомерного моделирования. Воздержимся от использования религиозной терминологии. Поэтому, нижеследующее, добытое методом проб и ошибок, назовём не слишком строгими рекомендациями и правилами «как-ничего-не-сломать».
Читать дальше →
Всего голосов 23: ↑19 и ↓4+15
Комментарии19

Parameter sniffing в SQL Server 2005/2008 (на примере Project Server 2007)

Время на прочтение6 мин
Количество просмотров4.3K
Столкнулся с интересной ошибкой на загруженном Project Server 2007. Причем проявляется она при активном использовании (читай, в продакте). При разработке, отладке и тестировании данная ошибка не проявилась ни разу. Еще хуже то, что при возникновении ошибки SQL «переклинивает», и без постороннего вмешательства ошибка не исчезает. Ну и под конец — из логов крайне сложно понять причину ее возникновения. Гугл, к сожалению, не помог, что, собственно, и побудило написать об этой проблеме.
Если у вас на странице сведений о проекте «Возникла неожиданная ошибка», а в логе ошибка 7888 (SQL Timeout) — добро пожаловать под кат. Если вы интересуетесь внутренним «эго» SQL Server — тоже стоит почитать.
Читать дальше →
Всего голосов 15: ↑12 и ↓3+9
Комментарии11

SP4 для MSSQL 2005 доступен посредством Windows Update

Время на прочтение1 мин
Количество просмотров10K
В свете всех последних новостей, праздников, а также наличия более актуального MS SQL Server 2008, про «малыша» 2005 многие забыли.

Днями Microsoft начала распространение Service Pack 4 для MS SQL Server 2005 посредством Windows Update.

Пакет можно было скачать ещё в середине декабря 2010, однако в свете 2008-й версии, выход 4-го пакета обновления для 2005-й версии громко не афишировался.

Пакет обновления 4 (SP4) для SQL Server 2005 можно также загрузить со страницы загрузки пакета обновления 4 (SP4) для SQL Server 2005. Для каждой платформы, поддерживаемой SQL Server 2005, доступен отдельный загружаемый пакет установки:

  • Для владельцев корпоративных версий, это можно сделать на соответствующей странице Download Center.
  • Для владельцев Express или Express Edition with Advanced Services, следует скачивать обновление с отдельной страницы Download Center.
Читать дальше →
Всего голосов 13: ↑9 и ↓4+5
Комментарии1

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