3 основополагающих принципов для написания эффективного SQL

Oracle спонсировал этот пост.

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

В этой статье я закладываю основу для продуктивного написания SQL, давая таблицам четкие имена и избегая ошибок данных посредством нормализации и ограничений.

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

Выберите хорошие имена

Хорошие имена таблиц ясны и кратко. Названия для основных таблиц в вашем приложении будут существительные в одном сложе. Эти карты соответствующим бизнес -концепциям. Например, клиенты, платежи и счета. Дети этих таблиц расширяют родительское имя с таким контекстом, как customer_addresses и vallice_items.

К сожалению, название ваших объектов базы данных — редкая роскошь. Как только вы создаете таблицу или столбец, ее имя исправлено. Хотя вы можете переименовать их, вы должны изменить весь код на новое имя одновременно. В крупных кодовых базах это нецелесообразно.

Итак, что вы делаете, если работаете со схемой, полной загадочных имен? Вы обречены навсегда?

Хорошая новость заключается в том, что есть уловки, которые вы можете использовать, чтобы принести ясность в запутанных именах:

  • Используйте представления, чтобы сделать виртуальные переименования.
  • Добавить схемы метаданные.

Вид — хранящий запрос. Вы можете использовать их, чтобы дать более понятное имя таблицам или столбцам. Например, эта точка зрения дает понять, что таблица CUST_ADRS хранит адреса клиентов и цель его столбцов:

Создать View custome_addresses, как выберите C_ID customer_id, a_id address_id, st start_date, en end_date from cust_adrs; 123456 Создание View Customer_Addresses As Select C_ID CUSTING_ID, A_ID ADDRICE_ID, ST START_DATE, EN END_DATE из CUST_ADRS;

Затем вы можете использовать представление как обычный таблицу. При условии, что вы даете только новые псевдонимы в представлении — т.е. единственные предложения SQL выбирают и из них, а выбранное не имеет выражений — доступ к представлению такой же, как и использование таблицы. Со временем вы можете сдвинуть код, чтобы использовать представления с лучшими именами.

Но этот подход требует времени. Там будет длительный период, пока вы все еще работаете с оригинальными непрозрачными именами. Добавление метаданных может помочь дать контекст им.

Комментарии таблицы и столбца-текст свободной формы, описывающие объекты-являются широко поддерживаемым способом сделать это.

Oracle Database 23AI расширила эту концепцию с помощью аннотаций схемы, парами ключей, которые вы можете использовать для документирования ваших таблиц, представлений, столбцов и индексов. Например, эти утверждения аннотируют неясные имена для таблицы CUST_ADRS и его столбца C_ID с описательным значением отображения:

alter table cust_adrs modify (c_id аннотации (отображение ‘идентификатор клиента’)); Alter Table Annotations (отображение «адреса клиента»); 12345 ALTEAL TABLE CUST_ADRS MODIFY (C_ID ANNOTATION (DISPLAY ‘ID CUSTORDING’)); Alter Table Annotations (отображение «адреса клиента»);

Вы можете просмотреть аннотации, запросив [dba|all|user]_annotations_usage Views:

выберите object_name, column_name, annotation_name, annotation_value from user_annotations_usage where object_name = «cust_adrs»; Object_name column_name annotation_name annotation_value cust_adrs отображать адреса клиента cust_adrs c_id отображать идентификатор клиента 1234567 Select object_name, column_name, annotation_name, annotation_value из user_annotations_usage wyover_name = ‘cust_adrs’; Object_name column_name annotation_name annotation_value cust_adrs отображать адреса клиента cust_adrs c_id отображать идентификатор клиента

Использование чистых имен — это первый шаг к созданию хорошей основы. Следующее — эффективно структурировать ваши таблицы.

Нормализовать свою схему

Нормализация базы данных — это процесс удаления избыточной информации из ваших таблиц. Это избегает дублирования данных и делает невозможным определенные типы ошибок данных.

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

Процесс нормализации определяет серию нормальных форм. Это правила, с которыми таблицы должны соответствовать, чтобы достичь этого уровня нормализации. Первые три нормальных форм:

  • Первая нормальная форма (1NF): Каждая строка и столбец хранит одно значение, и там нет дубликатов строк.
  • Вторая нормальная форма (2NF): Нет столбцов, которые зависят от части первичного или уникального ключа.
  • Третья нормальная форма (3NF): Нет столбцов, которые зависят от столбцов, которые не являются частью первичного или уникального ключа.

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

Хорошая проверка запаха, чтобы увидеть, нормализован ли столик как минимум до 3NF, чтобы спросить:

«Если я обновлю один столбец в таблице, подразумевает ли это мне одновременно обновлять другие столбцы?»

Если ответ да, вы почти наверняка нарушили нормальную форму. Чтобы исправить это, разделите зависимые столбцы на новую таблицу или полностью удалите их.

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

Создать таблицу Quiz_answers (quiz_id Integer, user_id Integer, ответ Clob, start_time TimeStamp, End_time TimeStam Time_taken Interval с днем ​​до второго, первичный ключ (quiz_id, user_id))

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

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

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

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

Создать соответствующие ограничения

Ограничения базы данных обеспечивают правила данных. База данных гарантирует, что все данные соответствуют этим правилам.

Без ограничений появятся ошибки данных, что может привести к тому, что клиенты могут потерять веру в ваши приложения. Поиск и исправление этих ошибок занимает много времени. Создание ограничений в начале избегает этой боли.

Основные ограничения:

  • Первичный ключ: Гарантирует, что ценности являются обязательными и уникальными. Таблица может иметь только один первичный ключ.
  • Уникальные ограничения: Как и первичный ключ, уникальное ограничение мешает вам хранить дубликаты значений. В отличие от первичного ключа, вы можете хранить нули в уникальных столбцах, а одна таблица может иметь много уникальных ограничений.
  • Иностранные ключи: Определите отношения между родителями и ребенком. Внешний ключ указывает от столбцов в детской таблице до первичного ключа или уникальное ограничение у родителя. С этим на месте вы не можете иметь сироты.
  • Не нулевые ограничения: Убедитесь, что вы можете хранить только ненулевые значения в столбцах, то есть они обязательны.
  • Проверьте ограничения: Убедитесь, что условие является истинным или неизвестным для каждой строки.

Определение этих ограничений помогает закрепить основы, заложенные в результате нормализации. Например, первичные ключи или уникальные ограничения необходимы для обеспечения соблюдения правила «без дубликатов строк» ​​в 1NF.

Ограничения также могут помочь, если вы обнаружите, что работаете с ненормализованными данными. При обсуждении нормализации мы увидели, как хранение времени начала, времени окончания и продолжительности для ответов на викторину может привести к несоответствиям. Хотя удаление одного из этих столбцов является лучшим решением, это может быть непрактичным в давнем применении.

Вместо этого вы можете убедиться, что все данные соответствуют формуле, добавив это ограничение проверки:

Альтер Таблица Quiz_answers Добавить ограничение Quan_answer_time_c check ((end_time — start_time) = time_taken) 123 Альтер Таблица Quiz_answers Добавить ограничение quan_answer_time_c check ((end_time — start_time) = time_taken)

Оказавшись на месте, новые данные, которые нарушают это правило, будут отклонены.

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

Создать невыполненные ограничения.

Они игнорируют существующие данные и применяют правила только к новым данным. Сделайте это в базе данных Oracle со следующим:

альтер -таблица … добавить ограничение … novalidate; 1 таблица альтер … добавить ограничение … novalidate;

Хотя вы все равно должны очистить существующие данные, вы можете быть уверены, что новые ошибки не появятся.

Опираясь на прочные основы

Работа с плохо названными таблицами и неверными данными означает, что тратить время на расшифровку времени и исправление их; Перетаскивание на вашу производительность.

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

Oracle предлагает широкий спектр технологий для строительства, тестирования и обслуживания приложений в облаке и в вашем центре обработки данных. Найдите бесплатные инструменты и учебные ресурсы на Developer.oracle.com Узнайте больше последних из Oracle Trending Stories YouTube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Крис является защитником разработчика базы данных Oracle, где его задача — помочь вам извлечь из нее максимальную пользу и повеселиться с SQL. Вы можете найти его в Twitter, @chrisrsaxon, и в его блоге все вещи SQL. Подробнее от Криса Саксона

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *