Перейти к содержимому

Для чего применяется атрибут база данных

  • автор:

Основы проектирования баз данных

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

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

  1. Выделение сущностей и их атрибутов, которые будут храниться в базе данных, и формирование по ним таблиц. Атомизация сложных атрибутов на более простые.
  2. Определение уникальных идентификаторов (первичных ключей) объектов, которые хранятся в строках таблицы
  3. Определение отношений между таблицами с помощью внешних ключей
  4. Нормализация базы данных

На первом этапе происходит выделение сущностей. Сущность (entity) представляет тип объектов, которые должны храниться в базе данных. Каждая таблица в базе данных должна представлять одну сущность. Как правило, сущности соответствуют объектам из реального мира.

У каждой сущности определяют набор атрибутов. Атрибут представляет свойство, которое описывает некоторую характеристику объекта.

Каждый столбец должен хранить один атрибут сущности. А каждая строка представляет отдельный объект или экземпляр сущности.

Восходящий и нисходящий подходы

При проектировании базы данных на этапе выделения сущностей и их атрибутов мы можем использовать два подхода: восходящий и нисходящий.

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

Например, нам дана следующая информация:

Том посещает курс по математике, который преподает профессор Смит. Сэм посещает курс по математике, которые преподает профессор Смит. Том посещает курс по языку JavaScript, который преподает ассистент Адамс. Боб посещает курс по алгоритмам, который преподает ассистент Адамс. Сэм имеет следующие электронный адрес sam@gmail.com и телефон +1235768789.

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

Затем мы можем выполнить группировку по сущностям, к которым относятся эти данные:

Дата рождения студента

Электронный адрес студента

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

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

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

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

Иногда подходы комбинируются. Для описания разных частей системы могут использоваться разные подходы. А затем их результаты объединяются.

Атомизация атрибутов

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

То же самое касается адреса — мы можем сохранить весь адрес целиком, а можем разбить его на части — дом, улицу, город и т.д.

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

В соответствии с этим аспектом мы можем выделить у сущности «Студент» следующие атрибуты: имя студента, фамилия студента, год рождения, город, улица, дом, телефон.

Домен

Каждый атрибут имеет домен (domain). Домен представляет набор допустимых значений для одного или нескольких атрибутов. По сути домен определяет смысл и источник значений, которые могут иметь атрибуты.

Домены могут отличаться для разных атрибутов, но также несколько атрибутов могут иметь один домен.

Например, выше были определены атрибуты сущности Студент. Определим используемые домены:

  • Имя . Домен представляет все возможные имена, которые могут использоваться. Каждое имя представляет строку длиной максимум 20 символов (маловероятно, что нам могут встретиться имена свыше 20 символов).
  • Фамилия . Домен представляет все возможные фамилии, которые могут использоваться. Каждая фамилия представляет строку длиной максимум 20 символов.
  • Год рождения . Домен представляет все года рождения. Каждый год является числовым значением от 1950 до 2017.
  • Город . Домен представляет все города текущей страны. Каждый город представляет строку длиной максимум 50 символов.
  • Улица . Домен представляет все улицы текущей страны. Каждая улица представляет строку длиной максимум 50 символов.
  • Дом . Домен представляет все возможные номера домов. Каждый номер дома является числом от 1 до, скажем, 10000.
  • Телефон . Домен представляет все возможные телефонные номера. Каждый номер является строкой длиной в 11 символов.

Определяя домен, мы сразу видим, какие данные и каких типов будут хранить атрибуты. Какое-то другое значение, которое не соответствует домену, атрибут иметь не может.

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

Определитель NULL

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

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

Как правило, большинство современных реляционных СУБД поддерживают определитель NULL и позволяют задать его допустимость для столбца таблицы.

Атрибут базы данных определяет свойства таблицы

Обрезанное изображение Деловые люди обсуждают за ноутбуком за столом на встрече

База данных состоит из таблиц, каждая из которых имеет столбцы и строки. Каждая строка (называемая кортежем) представляет собой набор данных, который применяется к одному элементу. Каждый столбец содержит характеристики, которые описывают строки; эти столбцы являются атрибутами. Атрибут базы данных — это имя столбца и содержимое полей под ним в таблице.

Обрезанное изображение Деловые люди обсуждают за ноутбуком за столом на встрече

Атрибуты описывают сущности

Если вы продаете продукты и вводите их в таблицу со столбцами для ProductName, Price и ProductID, каждый из этих заголовков является атрибутом. В каждом поле под этими заголовками вы должны ввести названия продуктов, цены и идентификаторы продуктов соответственно. Каждая из записей поля также является атрибутом.

Атрибут — это отдельный фрагмент данных в кортеже, к которому он принадлежит. Каждый кортеж представляет собой набор данных, который применяется к одному элементу.

Это имеет смысл, учитывая, что нетехническое определение атрибута состоит в том, что он описывает характеристику или качество чего-либо.

Вот пример часто цитируемой базы данных Northwinds . Эта база данных включает в себя таблицы — также называемые сущностями разработчиками базы данных — для клиентов, сотрудников и продуктов, среди прочих. Таблица «Продукты» определяет характеристики каждого продукта. К ним относятся идентификатор продукта, имя, идентификатор поставщика (используется в качестве внешнего ключа ), количество и цена. Каждая из этих характеристик является атрибутом таблицы (или сущности) с именем Products.

скриншот таблицы атрибутов

Имена столбцов являются атрибутами товара. Записи в столбцах также являются атрибутами товара.

Является ли атрибут полем?

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

В приведенной выше таблице ProductName во второй строке — Chang . Это поле. При обсуждении продуктов в целом, ProductName является столбцом продукта. Это атрибут.

Определение атрибутов

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

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

Больше информации о базах данных

Хотите узнать больше об основах баз данных? Базы данных для начинающих Lifewire — хорошее место для начала.

Готовые типовые базы данных доступны для бесплатной загрузки на веб-например, этот из MySQL. Работа с одним из них — отличный способ узнать, как работают базы данных.

Атрибуты (службы Master Data Services)

Атрибуты — это объекты, содержащиеся в сущностях служб Master Data Services. Значения атрибутов описывают элементы сущности. Атрибут может использоваться для описания конечного элемента, объединенного элемента или коллекции.

Связь атрибутов с другими объектами модели

Атрибут можно представить как столбец таблицы сущности. Значение атрибута — это значение, описывающее определенный элемент.

При создании сущности, содержащей множество атрибутов, можно организовать атрибуты в группы. Дополнительные сведения см. в разделе «Группы атрибутов» (службы Master Data Services).

Обязательные атрибуты

При создании сущности атрибуты «Имя» и «Код» создаются автоматически. Атрибут «Код» должен иметь значение, уникальное внутри сущности. Удалить атрибуты «Имя» и «Код» нельзя.

Типы атрибутов

Существует три типа атрибутов.

  • Атрибуты свободной формы, допускающие свободный ввод текста, чисел, дат или ссылок.
  • Атрибуты на основе домена, заполненные сущностями. Дополнительные сведения см. в разделе «Атрибуты на основе домена» (службы Master Data Services).
  • Файловые атрибуты, используемые для хранения файлов, документов или изображений. Атрибуты файлов помогают обеспечивать согласованность данных, требуя наличия у файла определенного расширения. Атрибуты файлов не могут гарантированно запретить злоумышленнику передать файл другого типа.

Числовые атрибуты в свободной форме

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

По умолчанию значение SqlDouble содержит 15 знаков после запятой, хотя для внутренних целей поддерживается до 17 знаков. Точность числа с плавающей запятой может иметь следующие эффекты.

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

Примеры атрибутов

В следующем примере сущность имеет атрибуты: Name, Code, Subcategory, StandardCost, ListPrice и FilePhoto. Эти атрибуты описывают элементы. Каждый элемент представлен отдельной строкой значений атрибута.

В следующем примере сущность Product содержит:

  • атрибуты в свободной форме Name, Code, StandardCost и ListPrice;
  • атрибут на основе домена Subcategory;
  • атрибут файла FilePhoto.

Сущность Subcategory используется в качестве атрибута на основе домена сущности Product. Сущность Category используется в качестве атрибута на основе домена сущности Subcategory. Как и сущность Product, сущности Category и Subcategory по умолчанию содержат атрибуты Name и Code.

Связанные задачи

Описание задачи Раздел
Создание нового текстового атрибута в свободной форме. Создание текстового атрибута (службы Master Data Services)
Создание нового числового атрибута в свободной форме. Создание числового атрибута (службы Master Data Services)
Создание нового атрибута ссылки в свободной форме. Создание атрибута ссылки (службы Master Data Services)
Создание нового файлового атрибута. Создание атрибута файла (службы Master Data Services)
Создание нового атрибута на основе домена. Создание атрибута на основе домена (службы Master Data Services)
Изменение имени существующего атрибута. Изменение имени атрибута и типа данных (службы Master Data Services)
Добавление существующих атрибутов в группу отслеживания изменений. Добавление атрибутов в группу отслеживания изменений (службы Master Data Services)
Удаление существующего атрибута. Удаление атрибута (службы Master Data Services)
Изменение порядка атрибутов. Изменение порядка атрибутов
Создание атрибута даты Создание атрибута даты (службы Master Data Services)

См. также

  • Атрибуты на основе домена (службы Master Data Services)
  • Группы атрибутов (службы Master Data Services)
  • Участники (службы Master Data Services)
  • Конечные разрешения (службы Master Data Services)

Сопоставление, основанное на атрибутах

LINQ to SQL сопоставляет базу данных SQL Server с LINQ to SQL объектной моделью путем применения атрибутов или внешнего файла сопоставления. В этом разделе представлен подход на основе атрибутов.

В самой простой форме LINQ to SQL сопоставляет базу данных с DataContext, таблицу с классом, а столбцы и связи со свойствами этих классов. Атрибуты также можно использовать для сопоставления иерархии наследования в объектной модели. Дополнительные сведения см. в разделе Практическое руководство. Создание объектной модели в Visual Basic или C#.

Разработчики, использующие Visual Studio, обычно выполняют сопоставление на основе атрибутов с помощью реляционный конструктор объектов. Можно также использовать программу командной строки SQLMetal или вручную написать код атрибутов самостоятельно. Дополнительные сведения см. в разделе Практическое руководство. Создание объектной модели в Visual Basic или C#.

Сопоставление можно также выполнять с помощью внешнего файла XML. Дополнительные сведения см. в разделе Внешнее сопоставление.

В следующих разделах представлено более подробное описание сопоставления на основе атрибутов. Дополнительные сведения см. в описании пространства имен System.Data.Linq.Mapping.

Атрибут DatabaseAttribute

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

Свойство Тип По умолчанию Описание
Name Строка См. раздел Name Используется со свойством Name, указывает имя базы данных.

Для получения дополнительной информации см. DatabaseAttribute.

Атрибут TableAttribute

Чтобы определить класс как класс сущности, связанный с таблицей базы данных или представлением, используется атрибут. LINQ to SQL классы, имеющие этот атрибут, рассматриваются как постоянные классы. В следующей таблице приводится описание свойства Name.

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

Для получения дополнительной информации см. TableAttribute.

Атрибут ColumnAttribute

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

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

В следующей таблице представлено описание свойств этого атрибута.

Свойство Тип По умолчанию Описание
AutoSync AutoSync Никогда Указывает среде CLR на необходимость получить значение после выполнения операции вставки или обновления.

Для получения дополнительной информации см. ColumnAttribute.

В значениях свойства Storage для атрибутов AssociationAttribute и ColumnAttribute учитывается регистр. Например, следует убедиться в том, что регистр символов в значении, использованном в атрибуте свойства AssociationAttribute.Storage, соответствует регистру символов в соответствующих именах свойств в остальном коде. Это относится ко всем языкам программирования .NET, даже к тем, которые обычно не чувствительны к регистру, включая Visual Basic. Дополнительные сведения о свойстве Storage см. в разделе DataAttribute.Storage.

Атрибут AssociationAttribute

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

В следующей таблице представлено описание свойств этого атрибута.

Свойство Тип По умолчанию Описание
DeleteOnNull Логическое false При задании данного свойства для ассоциации, в которой члены внешнего ключа не поддерживают значение NULL, удаляет объект при установке ассоциации значения NULL.
DeleteRule Строка Нет Добавляет в ассоциацию поведение удаления.
IsForeignKey Логическое false При значении «true» назначает член в качестве внешнего ключа в ассоциации, представляющей отношение базы данных.
IsUnique Логическое false При значении «true» указывает ограничение уникальности для первичного ключа.
OtherKey Строка Идентификатор связанного класса Назначает один или более членов целевого класса сущности в качестве ключевых значений на другой стороне ассоциации.
ThisKey Строка Идентификатор содержащего класса Назначает элементы данного класса сущности, которые будут представлять ключевые значения на этой стороне ассоциации.

Для получения дополнительной информации см. AssociationAttribute.

В значениях свойства Storage для атрибутов AssociationAttribute и ColumnAttribute учитывается регистр. Например, следует убедиться в том, что регистр символов в значении, использованном в атрибуте свойства AssociationAttribute.Storage, соответствует регистру символов в соответствующих именах свойств в остальном коде. Это относится ко всем языкам программирования .NET, даже к тем, которые обычно не чувствительны к регистру, включая Visual Basic. Дополнительные сведения о свойстве Storage см. в разделе DataAttribute.Storage.

Атрибут InheritanceMappingAttribute

Применяйте этот атрибут для сопоставления иерархии наследования.

В следующей таблице представлено описание свойств этого атрибута.

Свойство Тип По умолчанию Описание
Code Строка Нет. Необходимо предоставить значение. Указывает значение кода дискриминатора.
IsDefault Логическое false При значении «true» создает объект данного типа, когда значение дискриминатора в хранилище не соответствует ни одному заданному значению.
Type Тип Нет. Необходимо предоставить значение. Указывает тип класса в иерархии.

Для получения дополнительной информации см. InheritanceMappingAttribute.

Атрибут FunctionAttribute

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

В следующей таблице представлено описание свойств этого атрибута.

Свойство Тип По умолчанию Описание
IsComposable Логическое false Если значение равно false, указывает сопоставление с хранимой процедурой. При значении «true» указывает сопоставление с пользовательской функцией.
Name Строка Строка, соответствующая имени базы данных Указывает имя хранимой процедуры или пользовательской функции.

Для получения дополнительной информации см. FunctionAttribute.

Атрибут ParameterAttribute

Этот атрибут используется для сопоставления входных параметров в методах хранимых процедур.

В следующей таблице представлено описание свойств этого атрибута.

Свойство Тип По умолчанию Описание
DbType Строка Нет Указывает тип базы данных.
Name Строка Строка, соответствующая имени параметра в базе данных Указывает имя для параметра.

Для получения дополнительной информации см. ParameterAttribute.

Атрибут ResultTypeAttribute

Этот атрибут используется для указания типа результата.

В следующей таблице представлено описание свойств этого атрибута.

Свойство Тип По умолчанию Описание
Type Тип (нет) Используется в методах, сопоставленных с хранимыми процедурами, возвращающих IMultipleResults. Объявляет допустимые или ожидаемые сопоставления типов для хранимых процедур.

Для получения дополнительной информации см. ResultTypeAttribute.

Атрибут DataAttribute

Этот атрибут используется для указания имен и закрытых полей хранения.

В следующей таблице представлено описание свойств этого атрибута.

Свойство Тип По умолчанию Описание
Name Строка Строка, соответствующая имени базы данных Указывает имя таблицы, столбца и т. д.
Storage Строка Открытые методы доступа Указывает имя базового поля хранения.

Для получения дополнительной информации см. DataAttribute.

См. также

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

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