Создание таблицы
После создания общей структуры базы данных можно приступить к созданию таблиц, которые представляют собой отношения, входящие в состав проектабазы данных.
Таблица – основной объект для хранения информации в реляционной базе данных. Она состоит из содержащих данные строк и столбцов, занимает в базе данных физическое пространство и может быть постоянной или временной.
Поле, также называемое в реляционной базе данных столбцом, является частьютаблицы, за которой закреплен определенный тип данных. Каждая таблицабазы данных должна содержать хотя бы один столбец. Строка данных – это запись в таблице базы данных, она включает поля, содержащие данные из одной записи таблицы.
Приступая к созданию таблицы, необходимо иметь ответы на ряд вопросов:
· Как будет называться таблица?
· Как будут называться столбцы (поля) таблицы?
· Какие типы данных будут закреплены за каждым столбцом?
· Какой размер памяти должен быть выделен для хранения каждого столбца?
· Какие столбцы таблицы требуют обязательного ввода?
· Из каких столбцов будет состоять первичный ключ?
10 Индексирование: понятие индекса, типы индексных файлов. Индекс - структура данных, которая помогает СУБД быстрее обнаружить отдельные записи в файле и сократить время выполнения запросов пользователей. Индекс в базе данных аналогичен предметному указателю в книге. Это — вспомогательная структура, связанная с файлом и предназначенная для поиска информации по тому же принципу, что и в книге с предметным указателем. Индекс позволяет избежать проведения последовательного или пошагового просмотра файла в поисках нужных данных. При использовании индексов в базе данных искомым объектом может быть одна или несколько записей файла. Как и предметный указатель книги, индекс базы данных упорядочен, и каждый элемент индекса содержит название искомого объекта, а также один или несколько указателей (идентификаторов записей) на место его расположения.Типы: Первичный индекс - это такой специальный массив-указатель порядка записей, когда файл данных последовательно упорядочивается по полю ключа упорядочения, а на основе поля ключа упорядочения создается поле индексации, которое гарантированно имеет уникальное значение в каждой записи. Индекс кластеризации - это такой специальный массив-указатель порядка записей, когда файл данных последовательно упорядочивается по неключевому полю, и на основе этого неключевого поля формируется поле индексации, поэтому в файле может быть несколько записей, соответствующих значению этого поля индексации. Неключевое поле называется атрибутом кластеризации. Вторичный индекс - это индекс, который определен на поле файла данных, отличном от поля, по которому выполняется упорядочение.
создание, активация и удаление индекса. Переиндексирование
Переиндексация базы данных - процесс пересоздания индексов таблиц базы данных.Создание индекса:CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы> (<имя_столбца>,...)Эта команда создает индекс с заданным именем для таблицы <имя_таблицы> по столбцам, входящим в список, указанный в скобках. Индекс часто представляет из себя структуру типа B-дерева но могут использоваться и другие структуры. Создание индексов значительно ускоряет работу с таблицами. В случае указания необязательного параметра UNIQUE СУБД будет проверять каждое значение индекса на уникальность.Очень часто встает вопрос, какие поля необходимо индексировать. Обязательно надо строить индексы для первичных ключей, поскольку по их значениям осуществляется доступ к данным при операциях соединения двух и более таблиц. Также в ответе на этот вопрос поможет анализ наиболее частых запросов к базе данных. Например, для БД publications можно ожидать, что одним из наиболее частых запросов будет выборка всех публикаций данного автора. Для минимизации времени этого запроса необходимо посроить индекс для таблицы authors по именам авторов:
CREATE INDEX au_names ON authors (author);
Создание индексов для первичных ключей:
CREATE INDEX au_index ON authors (au_id);
CREATE INDEX title_index ON titles (title_id);
CREATE INDEX pub_index ON publishers (pub_id);
CREATE INDEX site_index ON wwwsites (site_id);
Первоначальное определение структуры индексов производится разработчиком на стадии создания прикладной системы. В дальнейшем она уточняется администратором системы по результатам анализа ее работы, учета наиболее часто выполняющихся запросов и т.д.
Удаление индекса:DROP INDEX <имя_индекса>
12) Для начала SQL-запрос на добавление новой записи в таблицу:INSERT INTO users (login, pass) values('TestUser', '123456')При добавлении записи вначале идёт команда "INSERT INTO", затем название таблицы, в которую мы вставляем запись. Далее идёт в круглых скобках названия полей, которые мы хотим заполнить. А затем в круглых скобках после слова "values" начинаем перечислять значения тех полей, которые мы выбрали. После выполнения этого запроса в нашей таблице появится новая запись.Иногда требуется обновить запись в таблице, для этого существует следующий SQL-запрос:UPDATE users SET login = 'TestUser2', pass='1234560' WHERE login='TestUser'
Данный запрос является более сложным, так как он имеет конструкцию "WHERE", но о ней чуть ниже. Вначале идёт команда "UPDATE", затем имя таблицы, а после "SET" мы описываем значения всех полей, которые мы хотим изменить. Было бы всё просто, но встаёт вопрос: "А какую именно запись следует обновлять?". Для этого существует "WHERE". В данном случае мы обновляем запись, поле "login" у которой имеет значение "TestUser". Обратите внимание, что если таких записей будет несколько, то обновятся абсолютно все! Это очень важно понимать, иначе Вы рискуете потерять свою таблицу. SQL-запрос на удаление записей из таблицы: DELETE FROM users WHERE login='TestUser2' После команды "DELETE FROM" идёт имя таблицы, в которой требуется удалить записи. Дальше описываем конструкцию "WHERE". Если запись будет соответствовать описанным условиям, то она будет удалена. Опять же обратите внимание, в зависимости от количества записей, удовлетворяющих условию после "WHERE", может удалиться любое их количество. Редактирование информации (записей) в таблицах базы данных. Редактировать записи в базе данных можно с помощью sql запроса UPDATE, вот его синтаксис: UPDATE [LOW_PRIORITY] [IGNORE] название_таблицы set имя_столбца = новое_значение,..... [WHERE - условая под которые подпадают изменяемые столбцы] [ORDER BY сортировка по критериям] [LIMIT число редактируемых записей] SELECT * FROM table_name WHERE (выражение) [order by field_name [desc][asc]] Эта команда ищет все записи в таблице table_name, которые удовлетворяют выражению выражение. Если записей несколько, то при указанном предложении order by они будут отсортированы по тому полю, имя которого записывается правее этого ключевого слова (если задано слово desc, то упорядочивание происходит в обратном порядке). В предложении order by могут также задаваться несколько полей. Особое значение имеет символ *. Он предписывает, что из отобранных записей следует извлечь все поля, когда будет выполнена команда получения выборки. С другой стороны, вместо звездочки можно через запятую непосредственно перечислить имена полей, которые требуют извлечения. Но чаще всего все же пользуются именно *.
13) Связь работает путем сопоставления данных в ключевых столбцах; обычно это столбцы с одним и тем же именем в обеих таблицах. В большинстве случаев связь сопоставляет первичный ключ одной таблицы, являющийся уникальным идентификатором каждой строки этой таблицы, с записями внешнего ключа другой таблицы. Например продажи книг можно связать с названиями проданных книг и создать связь между столбцом title_id таблицы titles (первичный ключ) и столбцом title_id таблицы sales (внешний ключ). Существует три типа связей между таблицами. Тип создаваемой связи зависит от того, как определены связанные столбцы. Связи «один ко многим» Связи «многие ко многим» Связи «один к одному» Связи «один ко многим» Связь «один ко многим» самая распространенная. В этом типе связей у строки таблицы А может быть несколько совпадающих строк таблицы Б, но каждой строке таблицы Б может соответствовать только одна строка из А. Например, между таблицами publishers и titles установлена связь «один ко многим»: каждый издатель публикует много книг, но каждая книга публикуется только у одного издателя. Используйте связь «один ко многим», если только у одного из связанных столбцов есть ограничение первичного ключа или уникальности. Столбец, являющийся первичным ключом в связи «один ко многим», отмечается символом ключа. Столбец, являющийся внешним ключом в связи «один ко многим», отмечается символом бесконечности. Связи «многие ко многим» В связи «многие ко многим» строке таблицы А может сопоставляться несколько строк таблицы Б, и наоборот. Такие связи создаются определением третьей таблицы, которая называется таблицей соединения, чей первичный ключ состоит из внешних ключей А и Б. Например, между таблицами authors и titles связь «многие ко многим» определена через связи «один ко многим» каждой из этих таблиц с таблицей titleauthors. Первичный ключ таблицы titleauthors представляет собой сочетание столбца au_id (первичный ключ таблицы authors) и столбца title_id (первичный ключ таблицы titles). Связи «один к одному» В связи «многие к одному» строке таблицы А может сопоставляться только одна строка таблицы Б, и наоборот. Связь «один к одному» создается, если для обоих связанных ключей определены ограничения первичного ключа или уникальности. Этот тип связи обычно не используется, так как большую часть связанных таким образом данных можно хранить в одной таблице. Связь «один к одному» можно использовать для: Разделения таблицы со многими столбцами. Изоляции части таблицы из соображений безопасности. Хранения кратковременных данных, которые можно легко удалить вместе со всей таблицей. Хранения данных, которые относятся только к части основной таблицы. Столбец, являющийся первичным ключом в связи «один к одному», отмечается символом ключа. Столбец, являющийся внешним ключом, также отмечается символом ключа. Создание связи по внешнему ключу в конструкторе таблиц: 1)В обозревателе объектов щелкните правой кнопкой мыши таблицу, которая будет содержать внешний ключ для связи, и выберите пункт Конструктор. 2)В меню конструктора таблиц выберите пункт Связи. 3)В диалоговом окне Связи внешнего ключа щелкните Добавить. 4)Щелкните нужную связь в списке Выбранные связи. 5)Щелкните Спецификация таблиц и столбцов в сетке справа и нажмите кнопку с многоточием (...) справа от свойства. 6)В диалоговом окне Таблицы и столбы в раскрывающемся списке Первичный ключ выберите таблицу, которая будет находиться на стороне первичного ключа связи. 7)В сетке внизу выберите столбцы, составляющие первичный ключ таблицы. В соседней ячейке сетки слева от каждого столбца выберите соответствующий столбец внешнего ключа таблицы внешнего ключа. 8)Нажмите кнопку OK, чтобы создать связь.
Удаление связи: 1)В обозревателе объектов щелкните правой кнопкой мыши таблицу, входящую в связь, и выберите пункт Конструктор 2)В меню Конструктор таблиц выберите пункт Связи. 3)В диалоговом окне Связи по внешним ключам выберите связь из списка Выбранная связь. 4)Нажмите кнопку Удалить. Типы ключей: 1)Потенциальные ключи. Потенциальным ключом будем называть такую комбинацию столбцов, которая обладает следующими свойствами: Уникальностью В таблице нет двух разных строк с одинаковыми значениями в нашем потенциальном ключе. Не избыточностью. Нельзя убрать один из столбцов из ключа, так, чтобы он не потерял уникальности. Первичные ключи.Итак с потенциальными ключами определились. 2) Первичный ключ - это один из потенциальных ключей. Тот, который нам больше понравится. Вам какой больше нравиться? В реальной ситуации, новичок выберет номер паспорта. А что выберет профессионал? Профессионал добавит еще одно поле-счетчик, которое будет содержать уникальное для каждой записи значение. В Delphi такой тип поля называется AutoIncrement, в SQL Server есть целых 2 варианта - TimeStamp и свойство Identity поля. Подробнее этот момент мы рассмотрим в уроках по в взаимодействию с SQL Server'ом. Про полезность введения дополнительного поля, так называемого "суррогатного ключа", можно почитать здесь. Мы ведь собрались стать профессионалами? Вот и поучимся у умных людей. Лирическое отступление - умный человек, а тем более профессионал никогда не скажет "Я и так все знаю, ничему меня не научишь". Потому что он знает - всегда есть чему учиться. 3)Альтернативные ключи. Первичный ключ может быть только один на всю таблицу! После выбора первичного ключа из набора потенциальных ключей, оставшиеся ключи называются альтенативными. 4)Внешние ключи- он не может существовать без соответствующей строки из второй таблицы,