Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Ограничения и их использование в реляционной базе данных - Физическая

Лекция



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

...

Компонент Database Engine инициирует ошибку, и производится откат операции удаления строки родительской таблицы.

  • CASCADE. Если из родительской таблицы удаляется строка, соответствующие ей строки удаляются из ссылающейся таблицы.
  • SET NULL. Все значения, составляющие внешний ключ, при удалении соответствующей строки родительской таблицы устанавливаются в NULL. Для выполнения этого ограничения столбцы внешних ключей должны допускать существование значений NULL.
  • SET DEFAULT. Все значения, составляющие внешний ключ, при удалении соответствующей строки родительской таблицы устанавливаются в значение по умолчанию. Для выполнения этого ограничения все столбцы внешних ключей должны иметь определения по умолчанию. Если столбец допускает значение NULL и множество значений по умолчанию не задано явно, NULL становится неявным значением по умолчанию для данного столбца.
  • ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }. Указывает, какое действие совершается над строками в изменяемой таблице, когда эти строки связаны ссылкой и строка родительской таблицы, на которую указывает ссылка, обновляется. Значение по умолчанию — NO ACTION.
    • NO ACTION. Компонент Database Engine возвращает ошибку, и обновление строки родительской таблицы откатывается.
    • CASCADE. Соответствующие строки обновляются в ссылающейся таблице, если эта строка обновляется в родительской таблице.
    • SET NULL. Всем значениям, составляющим внешний ключ, присваивается значение NULL, когда обновляется соответствующая строка в родительской таблице. Для выполнения этого ограничения столбцы внешних ключей должны допускать существование значений NULL.
    • SET DEFAULT. Всем значениям, составляющим внешний ключ, присваивается их значение по умолчанию, когда обновляется соответствующая строка в родительской таблице. Для выполнения этого ограничения все столбцы внешних ключей должны иметь определения по умолчанию. Если столбец допускает значение NULL и множество значений по умолчанию не задано явно, NULL становится неявным значением по умолчанию для данного столбца.
  • CHECK. Ограничение, обеспечивающее доменную целостность путем ограничения возможных значений, которые могут быть введены в столбец или столбцы. Ограничения CHECK в вычисляемых столбцах должны быть также помечены как PERSISTED.
  • logical_expression. Логическое выражение, возвращающее значения TRUE или FALSE. Типы данных "псевдонимы" частью выражения быть не могут.
  • Column. Столбец или список столбцов (в скобках), который применяется в ограничениях таблицы для указания столбцов, используемых в определении ограничения.
  • [ ASC | DESC ]. Указывает порядок сортировки столбца или столбцов, участвующих в ограничениях таблицы: ASC — по возрастанию, DESC — по убыванию. Значение по умолчанию — ASC.
  • partition_scheme_name. Имя схемы секционирования, определяющей файловые группы, которым сопоставляются секции секционированной таблицы. Эта схема секционирования должна существовать в БД.
  • [ partition_column_name. ]. Указывает столбец, по которому будет секционирована таблица. Столбец должен соответствовать по типу данных, длине и точности столбцу, который указан в функции секционирования, используемой аргументом partition_scheme_name. Вычисляемый столбец, участвующий в функции секционирования, должен быть явно обозначен ключевым словом PERSISTED.
  • WITH FILLFACTOR = fillfactor. Указывает, насколько плотно компонент Database Engine должен заполнять каждую страницу индекса, используемую для хранения данных индекса. Пользовательские значения аргумента fillfactor могут находиться в диапазоне от 1 до 100. Если значение не задано, по умолчанию оно принимается равным 0. Значения фактора заполнения 0 и 100 во всех отношениях считаются равнозначными.
  • column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS. Имя набора столбцов. Набор столбцов представляет собой нетипизированное XML-представление, в котором все разреженные столбцы таблицы объединены в структурированные выходные данные.
  • < table_option> ::= Указывает один или более параметров таблицы.
  • DATA_COMPRESSION. Задает режим сжатия данных для указанной таблицы, номера секции или диапазона секций. Ниже приведены доступные параметры.
  • NONE. Таблица или указанные секции не сжимаются.
  • ROW. Таблицы или указанные секции сжимаются, используя сжатие строк.
  • PAGE. Таблицы или указанные секции сжимаются, используя сжатие страниц.
  • ON PARTITIONS ( { <выражение_номера_секции> | <диапазон> } [ ,...n ] ). Указывает секции, к которым применяется параметр DATA_COMPRESSION. Если таблица не секционирована, аргумент ON PARTITIONS приведет к формированию ошибки. Если не указано предложение ON PARTITIONS, параметр DATA_COMPRESSION применяется ко всем секциям секционированной таблицы.
  • <Выражение_номера_секции> можно указать одним из следующих способов:

    1. указав номер секции, например: ON PARTITIONS (2) ;
    2. указав номера нескольких секций, разделив их запятыми, например: ON PARTITIONS (1, 5) ;
    3. указав диапазоны секций и отдельные секции, например: ON PARTITIONS (2, 4, 6 TO 8).

    <Диапазон> можно указать номерами секций, разделенными ключевым словом TO, например: ON PARTITIONS (6 TO 8).

    Чтобы для разных секций задать разные типы сжатия данных, укажите параметр DATA_COMPRESSION несколько раз:

    • ::= Указывает один или более параметров индекса (см. далее).
    • PAD_INDEX = { ON | OFF }. Если указано значение ON, процент свободного места, определяемый параметром FILLFACTOR, применяется к страницам индекса промежуточного уровня. Если указано значение OFF или значение FILLFACTOR не указано, страницы промежуточного уровня заполняются до приблизительного объема, оставляющего достаточно места, как минимум, для одной строки максимального размера, которого может достигать индекс, при этом учитывается набор ключей на промежуточных страницах. Значение по умолчанию — OFF.
    • FILLFACTOR = fillfactor. Указывает процентное соотношение, определяющее, насколько заполненным компонент Database Engine должен делать конечный уровень каждой страницы индекса при его создании или изменении. Аргумент fillfactor должен быть целым числом в диапазоне от 1 до 100. Значение по умолчанию равно 0. Значения фактора заполнения 0 и 100 во всех отношениях считаются равнозначными.
    • IGNORE_DUP_KEY = { ON | OFF }. Определяет ответ на ошибку, случающуюся, когда операция вставки пытается вставить в уникальный индекс повторяющиеся значения ключа. Параметр IGNORE_DUP_KEY применяется только к операциям вставки, производимым после создания или перестроения индекса. Параметр не работает во время выполнения инструкции CREATE INDEX, ALTER INDEX или UPDATE. Значение по умолчанию — OFF.
      • ON. Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится предупреждающее сообщение. С ошибкой завершаются только строки, нарушающие ограничение уникальности.
      • OFF. Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится сообщение об ошибке. Будет выполнен откат всей операции INSERT.
      • IGNORE_DUP_KEY. Нельзя установить в значение ON для индексов, создаваемых для представлений, неуникальных индексов, XML-индексов, пространственных индексов и фильтруемых индексов.
    • STATISTICS_NORECOMPUTE = { ON | OFF }. Если указано значение ON, автоматический пересчет устаревших статистик индекса не производится. Если указано значение OFF, включается автоматическое обновление статистик. Значение по умолчанию — OFF.
    • ALLOW_ROW_LOCKS = { ON | OFF }. Если указано значение ON, при доступе к индексу допустимы блокировки строк. Необходимость в блокировке строк определяет компонент Database Engine. При значении OFF блокировки строк не используются. Значение по умолчанию — ON.
    • ALLOW_PAGE_LOCKS = { ON | OFF }. Если указано значение ON, при доступе к индексу допустимы блокировки страниц. Необходимость в блокировке строк определяет компонент Database Engine. При значении OFF блокировки страниц не используются. Значение по умолчанию — ON.

    Выше было дано описание аргументов команды CREATE TABLE. В настоящей лекции мы будем обсуждать не все из перечисленных аргументов. Секционирование таблиц будет рассмотрено в "Метаданные в хранилищах данных" . Сейчас мы остановимся на использовании ограничений.

    Ограничения и их использование в реляционной базе данных

    В предыдущих разделах мы уже сталкивались с несколькими типами ограничений в спецификациях колонок — NOT NULL, и ограничениях в таблицах — PRIMARY KEY, FOREING KEY. В данном разделе мы изучим практически еще несколько типов ограничений, которые поддерживаются в реляционных БД. Ограничения являются важным инструментом проектировщика, с помощью которого он поддерживает целостность (strong) БД. Их можно использовать для того, чтобы быть уверенным в том, что колонка первичного ключа таблицы является уникальной и всегда содержит значения. Ограничения применяются также для поддержки ссылочной целостности. Последнее означает, что значения в колонке внешнего ключа должны существовать как некоторое значение в колонке первичного ключа другой таблицы.

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

    Как мы видели выше, ограничения могут применяться на уровне колонки ( ограничения колонки ) или на уровне таблицы ( ограничения таблицы ). Ограничения первичного ключа — это ограничения, действующие на уровне таблицы, а NOT NULL -ограничения — это ограничение колонки. Существуют три основных типа ограничений, используемых в реляционной БД, — целостности данных, целостности ссылок и ограничения первичного ключа. Ограничения целостности данных (data integrity constraints) относятся к значениям данных в некоторых колонках и определяются в спецификации колонки с помощью элементов NOT NULL, UNIQUE, CHECK. Ограничения целостности ссылок (referential constraints) относятся к связям между таблицами на основе связи первичного и внешнего ключа. Ограничения первичного ключа относится к значениям данных в колонках первичного ключа таблицы и должны налагаться на каждую базовую таблицу реляционной БД. В табл. 11.3 приведен список ограничений, применяемых в реляционных БД.

    Таблица 11.3. Ограничения на объекты реляционной базы данных
    Ограничение Описание
    CHECK Гарантирует, что значения находятся в границах специфицированного интервала, задаваемого предикатом
    2 DEFAULT Помещает значение по умолчанию в колонку. Гарантирует, что колонка всегда имеет значение
    3 FOREING KEY Гарантирует, что значения существуют как значения в колонке первичного ключа другой таблицы. Обеспечивает процедуры удаления дочерних строк при удалении связанных с ней родительских
    4 NOT NULL Гарантирует, что колонка всегда содержит значение
    5 PRIMARY KEY Гарантирует, что колонка всегда содержит значение и оно уникально в таблице
    6 UNIQUE Гарантирует, что значение будет уникальным в таблице

    Использование ограничений NOT NULL и PRIMARY KEY было рассмотрено выше в настоящей лекции. Использование ограничения FOREING KEY будет рассмотрено при обсуждении создания таблицы фактов.

    Ограничение CHECK позволяет выполнять проверку содержимого колонки относительно некоторых условий и списка значений. Она налагается с помощью предложения CHECK. Для добавления этого ограничения нужно после объявления столбца в спецификации колонки определить синтаксическую конструкцию CHECK (предикат). Согласно требованиям стандарта с помощью ключевого слова VALUE в предикате вы ссылаетесь на значение колонки. Но практически во всех диалектах для этой цели используется имя колонки.

    Опция DEFAULT заставляет СУБД размещать значение по умолчанию в колонке, когда кортеж вставляется в таблицу и никакого значения колонки не представлено. Чтобы указать значение по умолчанию, нужно в спецификацию колонки добавить ключевое слово DEFAULT и после него указать любое значение, являющееся достоверным экземпляром типа данных колонки.

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

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

    Анализ команд создания объектов базы данных

    При решении задачи задания объектов БД для ХД проектировщик имеет на входе физическую модель данных, таблиц измерений и фактов, а на выходе должен создать набор команд CREATE TABLE, которые будут использоваться для создания таблиц и других объектов БД.

    Для всех суррогатных ключей таблиц измерений и таблицы фактов мы применяем определение колонки с типом данных uniqueidentifier. Задание такого типа колонки позволит увеличивать значение суррогатного ключа автоматически. Для этих столбцов используется функция NEWSEQUENTIALID() в ограничении DEFAULT для указания значений для новых строк. Также к столбцам типа uniqueidentifier применяется свойство ROWGUIDCOL, чтобы на столбец можно было ссылаться с помощью ключевого слова $ROWGUID, и ограничение первичного ключа.

    Создание таблиц измерений

    Команда CREATE TABLE для создания таблицы измерения "Покупатель" (Customer) на диалекте SQL семейства СУБД MS SQL Server имеет вид:

    create table Customer (
       Cust_ID uniqueidentifier 
                CONSTRAINT Guid_Default_1 DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
       FName                varchar(20)          not null,
       LName                varchar(20)          not null,
       Cust_Address         varchar(40)          null,
       Company              varchar(40)          not null,
       constraint PK_CUSTOMER primary key  (Cust_ID)
    )
    go

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

    Команда CREATE TABLE для создания таблицы измерения "Продавец" (Employee) на диалекте SQL семейства СУБД MS SQL Server имеет вид:

    create table Employee (
       Empl_ID  uniqueidentifier 
                CONSTRAINT Guid_Default_2 DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
       Empl_FName           varchar(20)          not null,
       Empl_LName           varchar(20)          not null,
       City                 varchar(20)          not null,
       Empl_Address         varchar(40)          null,
       constraint PK_EMPLOYEE primary key  (Empl_ID)
    )
    go

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

    Команда CREATE TABLE для создания таблицы измерения "Товар" (Product) на диалекте SQL семейства СУБД MS SQL Server имеет вид:

    create table Product (
       Prod_ID      uniqueidentifier 
              CONSTRAINT Guid_Default_3 DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
       Name                 varchar(80)          not null,
       Size                 varchar(20)          not null,
       Unit_Price           numeric(8,2)         not null,
       constraint PK_PRODUCT primary key  (Prod_ID)
    )
    go

    Наименование товара является уникальным значением, поэтому применим к этой колонке ограничение, изменив строку спецификации колонки "Наименование товара" на следующую:

    Name varchar(80) not null UNIQUE NONCLUSTERED,

    Цена товара является величиной положительной, поэтому целесообразно ввести проверку вводимого значения цены товара. Из анализа предметной области следует, что цена товаров, продаваемых компанией, находится в пределах от 15 руб. до 1500 руб. и можно ввести проверку этого значения на диапазон. Изменим строку, определяющую колонку "Цена товара" (Unit_Price), как показано ниже:

    Unit_Price  numeric(8,2)  not null CHECK (Unit_Price >= 15 and Unit_Price <= 1500),

    Команда CREATE TABLE для создания таблицы измерения "Время" (Time) на диалекте SQL семейства СУБД MS SQL Server имеет вид:

    create table Time (
       Time_ID       uniqueidentifier 
                CONSTRAINT Guid_Default_4 DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
       Year                 integer              not null,
       Quarter              integer              not null,
       constraint PK_TIME primary key  (Time_ID)
    )
    go

    По решению руководства компании данные в ХД будут заноситься, начиная с 2007 года. Поэтому целесообразно ввести проверку на значения колонки "Год" (Year). Число кварталов в году – четыре. Введем проверку на значения колонки "Квартал" (Quarter). Строки стрипта, определяющие колонки "Год" (Year) и "Квартал" (Quarter), теперь выглядят, как показано ниже.

    Year   integer  not null CHECK (Year >= 2007),
    Quarter  integer   not null CONSTRAINT Q_CHK CHECK (Quarter IN ('1', '2', '3', '4''),

    Создание таблицы фактов

    Команда CREATE TABLE для создания таблицы фактов "Продажи" (Sale) на диалекте SQL семейства СУБД MS SQL Server имеет вид:

    create table Sale (
       Sale_ID   uniqueidentifier 
           CONSTRAINT Guid_Default_5 DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
       Time_ID              uniqueidentifier               null,
       Cust_ID              uniqueidentifier               null,
       Prod_ID              uniqueidentifier               null,
       Empl_ID              uniqueidentifier               null,
       Amount               numeric(9,2)         not null,
       Quantity             integer              not null,
       constraint PK_SALE primary key  (Sale_ID)
    )
    go

    Значения колонок "Количество" (Quantity) и "Сумма платежа" (Amount) не могут быть нулевыми. Поэтому наложим соответствующие ограничения на значения этих колонок, как показано ниже.

    Amount numeric(9,2) not null CHECK (Amount >= 15),
    Quantity integer not null CHECK (Quantity >= 1),

    Колонки "Идентификатор времени" (Time_ID), "Идентификатор покупателя" (Cust_ID_ "Идентификатор товара" (Prod_ID)) и "Идентификатор продавца" (Empl_ID) являются значениями первичных ключей таблиц измерений и поэтому могут служить внешними ключами в таблице фактов. Наложим на значения этих колонок ограничения внешнего ключа.

    Ограничения внешнего ключа в таблице фактов

    Заметим, что ограничения задаются в спецификациях колонки или спецификациях ключей при создании таблицы в командах SQL CREATE TABLE или налагаются после создания таблицы в командах SQL ALTER TABLE. Как добавить ограничения в таблицу с помощью команды CREATE TABLE, мы уже знаем.

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

    ALTER TABLE table_name
    { [ ALTER COLUMN column_name 
       {DROP DEFAULT 
       | SET DEFAULT constant_expression 
       | IDENTITY [ ( seed , increment ) ]
       } 
    | ADD 
       { < column_definition > | < table_constraint > } [ ,...n ] 
    | DROP 
       { [ CONSTRAINT ] constraint_name 
       | COLUMN column }
    ] }
    < column_definition > ::= 
       { column_name data_type } 
       [ [ DEFAULT constant_expression ] 
          | IDENTITY [ ( seed , increment ) ] 
       ] 
       [ROWGUIDCOL]
       [ < column_constraint > ] [ ...n ] ]
    < column_constraint > ::= 
       [ NULL | NOT NULL ] 
       [ CONSTRAINT constraint_name ] 
       { 
          | { PRIMARY KEY | UNIQUE } 
          | REFERENCES ref_table [ (ref_column) ] 
          [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
          [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
       }
    < table_constraint > ::= 
       [ CONSTRAINT constraint_name ] 
       { [ { PRIMARY KEY | UNIQUE } 
          { ( column [ ,...n ] ) } 
          | FOREIGN KEY 
            ( column [ ,...n ] )
            REFERENCES ref_table [ (ref_column [ ,...n ] ) ] 
          [ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
          [ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ] 
       }
    Листинг .

    Не будем приводить описания тех аргументов, которые присутствуют в команде команде CREATE TABLE. Дадим описание только специфичных для этой команды аргументов.

    • ALTER COLUMN. Указывает, что определенный столбец будет изменен или модифицирован.
    • ADD. Указывает, что добавлено одно или несколько определений столбца или ограничений таблицы.
    • DROP { [CONSTRAINT] constraint_name| COLUMN column}. Указывает, что из таблицы будет удален constraint_name или column_name.

    Чтобы добавить ограничения внешнего ключа в таблицу фактов "Продажи" (Sale) с помощью команды ALTER TABLE, можно поступить следующим образом.

    alter table Sale
       add constraint FK_SALE_REFERENCE_TIME foreign key (Time_ID)
          references Time (Time_ID)
    go
    
    alter table Sale
       add constraint FK_SALE_REFERENCE_CUSTOMER foreign key (Cust_ID)
          references Customer (Cust_ID)
    go
    
    alter table Sale
       add constraint FK_SALE_REFERENCE_PRODUCT foreign key (Prod_ID)
          references Product (Prod_ID)
    go
    
    alter table Sale
       add constraint FK_SALE_REFERENCE_EMPLOYEE foreign key (Empl_ID)
          references Employee (Empl_ID)
    go

    Теперь проектировщик хранилища данных может перейти к созданию индексов.

    Создание индексов хранилища данных

    Когда вы определяете PRIMARY KEY при создании таблицы, многие реляционные СУБД, в том числе СУБД семейства MS SQL Server, требуют обязательного создания уникального индекса первичного ключа. Индексы, так же как и таблицы, являются объектами реляционной (но не реляционной модели данных). Логически индексы представляют собой таблицу, в которой каждому значению индексируемой колонки ставится в соответствие некоторая информация, связанная с ее месторасположением на физическом носителе. Индексы предназначены для организации быстрого доступа к строкам таблицы и обеспечения контроля целостности данных (механизм индексов будет блокировать БД от повторного ввода строк в таблицу с одинаковыми значениями индексируемых атрибутов).

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

    Синтаксис команды CREATE INDEX приведен ниже.

    Create Relational Index 
    CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
        ON  ( column [ ASC | DESC ] [ ,...n ] ) 
        [ INCLUDE ( column_name [ ,...n ] ) ]
        [ WHERE  ]
        [ WITH (  [ ,...n ] ) ]
        [ ON { partition_scheme_name ( column_name ) 
             | filegroup_name 
             |
      

    продолжение следует...

    Продолжение:


    Часть 1 Физическая модель хранилища данных
    Часть 2 Моделирование объектов физической модели хранилища данных - Физическая модель хранилища
    Часть 3 Разработка скрипта для создания объектов физической модели хранилища данных -
    Часть 4 Ограничения и их использование в реляционной базе данных - Физическая
    Часть 5 Резюме - Физическая модель хранилища данных

    создано: 2021-03-13
    обновлено: 2024-11-14
    16



    Рейтиг 9 of 10. count vote: 2
    Вы довольны ?:


    Поделиться:

    Найди готовое или заработай

    С нашими удобными сервисами без комиссии*

    Как это работает? | Узнать цену?

    Найти исполнителя
    $0 / весь год.
    • У вас есть задание, но нет времени его делать
    • Вы хотите найти профессионала для выплнения задания
    • Возможно примерение функции гаранта на сделку
    • Приорететная поддержка
    • идеально подходит для студентов, у которых нет времени для решения заданий
    Готовое решение
    $0 / весь год.
    • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
    • Вам предоставят готовое решение
    • Будет предоставлено в минимальные сроки т.к. задание уже готовое
    • Вы получите базовую гарантию 8 дней
    • Вы можете заработать на материалах
    • подходит как для студентов так и для преподавателей
    Я исполнитель
    $0 / весь год.
    • Вы профессионал своего дела
    • У вас есть опыт и желание зарабатывать
    • Вы хотите помочь в решении задач или написании работ
    • Возможно примерение функции гаранта на сделку
    • подходит для опытных студентов так и для преподавателей

    Комментарии


    Оставить комментарий
    Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
    To reply

    Базы данных, знаний и хранилища данных. Big data, СУБД и SQL и noSQL

    Термины: Базы данных, знаний и хранилища данных. Big data, СУБД и SQL и noSQL