diff options
author | ulya-sidorina <yulia@ydb.tech> | 2022-08-16 12:37:49 +0300 |
---|---|---|
committer | ulya-sidorina <yulia@ydb.tech> | 2022-08-16 12:37:49 +0300 |
commit | 50d4ea46ebb20bcfc369eebb40b9c7e36170cd91 (patch) | |
tree | 3c5c7bf7ca7b01c18507ac3047caae7ec0ca22a1 | |
parent | c5e95d876426ce8f25755f8472298ade3fbd6423 (diff) | |
download | ydb-50d4ea46ebb20bcfc369eebb40b9c7e36170cd91.tar.gz |
add not null pk info to ydb docs
feature(ydb_docs): add not null pk info
10 files changed, 27 insertions, 18 deletions
diff --git a/ydb/docs/en/core/yql/reference/yql-core/syntax/_includes/create_table.md b/ydb/docs/en/core/yql/reference/yql-core/syntax/_includes/create_table.md index 72b7373cb8..33bd86b825 100644 --- a/ydb/docs/en/core/yql/reference/yql-core/syntax/_includes/create_table.md +++ b/ydb/docs/en/core/yql/reference/yql-core/syntax/_includes/create_table.md @@ -38,8 +38,12 @@ For key columns and non-key columns, only [primitive](../../types/primitive.md) {% if feature_not_null == true %} Without additional modifiers, the column is assigned the [optional type](../../types/optional.md) and can accept `NULL` values. To create a non-optional type, use `NOT NULL`. {% else %} +{% if feature_not_null_for_pk %} +By default, all columns are [optional](../../types/optional.md) and can accept `NULL` values. `NOT NULL` constraint is supported only for primary keys. +{% else %} All columns allow writing `NULL` values, that is, they are [optional](../../types/optional.md). {% endif %} +{% endif %} {% if feature_map_tables %} It is mandatory to specify the `PRIMARY KEY` with a non-empty list of columns. Those columns become part of the key in the listed order. {% endif %} @@ -47,7 +51,7 @@ It is mandatory to specify the `PRIMARY KEY` with a non-empty list of columns. T **Example** CREATE TABLE my_table ( - a Uint64, +{% if feature_not_null_for_pk %} a Uint64 NOT NULL,{% else %} a Uint64,{% endif %} b Bool, {% if feature_not_null %} c Float NOT NULL,{% else %} c Float,{% endif %} {% if feature_column_container_type %} d "List<List<Int32>>"{% endif %} diff --git a/ydb/docs/presets.yaml b/ydb/docs/presets.yaml index 5a51b63250..9eefaa45da 100644 --- a/ydb/docs/presets.yaml +++ b/ydb/docs/presets.yaml @@ -30,6 +30,7 @@ default: ydb-cli: ydb k8s: Kubernetes oss: true + feature_not_null_for_pk: true ydb-doc-repo: https://github.com/ydb-platform/ydb/tree/main/ydb/docs diff --git a/ydb/docs/ru/core/concepts/datamodel/_includes/table.md b/ydb/docs/ru/core/concepts/datamodel/_includes/table.md index b6e7b5bd07..23aa912401 100644 --- a/ydb/docs/ru/core/concepts/datamodel/_includes/table.md +++ b/ydb/docs/ru/core/concepts/datamodel/_includes/table.md @@ -4,7 +4,7 @@ ![Datamodel_of_a_relational_table](../../_assets/datamodel_rtable.png) -{{ ydb-short-name }} использует типы данных [YQL](../../datatypes.md), в качестве типов столбцов могут использоваться [простые типы данных YQL](../../../yql/reference/types/primitive.md). Все столбцы могут содержать специальное значение `NULL`, используемое для обозначения отсутствия значения. +{{ ydb-short-name }} использует типы данных [YQL](../../datatypes.md), в качестве типов столбцов могут использоваться [простые типы данных YQL](../../../yql/reference/types/primitive.md). По умолчанию все столбцы [опциональные](../../../yql/reference/types/optional.md) и могут иметь значение `NULL`. При создании для столбцов, входящих в первичный ключ, можно указать ограничение `NOT NULL`, тогда им нельзя будет присвоить пустое значение. Таблица {{ ydb-short-name }} всегда имеет один или несколько столбцов, составляющих ключ ([primary key](https://en.wikipedia.org/wiki/Unique_key)). Строки таблицы уникальны по ключу, то есть для одного значения ключа может быть не больше одной строки. Таблица {{ ydb-short-name }} всегда упорядочена по ключу. Это означает, что точечное чтение по ключу, а также диапазонные запросы по ключу или префиксу ключа выполняются эффективно (фактически используя индекс). В примере выше ключевые столбцы выделены серым цветом и отмечены специальным знаком. Допускаются таблицы, состоящие только из ключевых столбцов. Таблицы без первичного ключа создавать нельзя. diff --git a/ydb/docs/ru/core/getting_started/_includes/yql.md b/ydb/docs/ru/core/getting_started/_includes/yql.md index 5b08a931e7..727d66d8b4 100644 --- a/ydb/docs/ru/core/getting_started/_includes/yql.md +++ b/ydb/docs/ru/core/getting_started/_includes/yql.md @@ -42,13 +42,13 @@ YQL - язык запросов к базе данных {{ ydb-short-name }}, Таблица с заданными колонками создается [командой YQL `CREATE TABLE`](../../yql/reference/syntax/create_table.md). В таблице обязательно должен быть определен первичный ключ. Типы данных для колонок приведены в статье [Типы данных YQL](../../yql/reference/types/index.md). -{{ ydb-short-name }} в настоящее время не поддерживает ограничение `NOT NULL`, все колонки будут допускать отсутствие значений, включая колонки первичного ключа. {{ ydb-short-name }} также не поддерживает ограничения `FOREIGN KEY`. +По умолчанию все колонки опциональные и могут содержать `NULL`. Для колонок, входящих в первичный ключ, можно указать ограничение `NOT NULL`. Ограничения `FOREIGN KEY` {{ ydb-short-name }} не поддерживает. Создайте таблицы каталога сериалов: `series` (Сериалы), `seasons` (Сезоны), и `episodes` (Эпизоды), выполнив следующий скрипт: ```sql CREATE TABLE series ( - series_id Uint64, + series_id Uint64 NOT NULL, title Utf8, series_info Utf8, release_date Date, diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-cpp.md b/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-cpp.md index 0ac9b5d0d8..a44f5d0b84 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-cpp.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-cpp.md @@ -29,7 +29,7 @@ //! Creates sample tables with CrateTable API. ThrowOnError(client.RetryOperationSync([path](TSession session) { auto seriesDesc = TTableBuilder() - .AddNullableColumn("series_id", EPrimitiveType::Uint64) + .AddNonNullableColumn("series_id", EPrimitiveType::Uint64) .AddNullableColumn("title", EPrimitiveType::Utf8) .AddNullableColumn("series_info", EPrimitiveType::Utf8) .AddNullableColumn("release_date", EPrimitiveType::Uint64) @@ -65,7 +65,7 @@ ```bash > Describe table: series -Column, name: series_id, type: Uint64? +Column, name: series_id, type: Uint64 Column, name: title, type: Utf8? Column, name: series_info, type: Utf8? Column, name: release_date, type: Uint64? @@ -139,7 +139,7 @@ static TStatus SelectSimpleTransaction(TSession session, const TString& path, TResultSetParser parser(*resultSet); if (parser.TryNextRow()) { Cout << "> SelectSimple:" << Endl << "Series" - << ", Id: " << parser.ColumnParser("series_id").GetOptionalUint64() + << ", Id: " << parser.ColumnParser("series_id").GetUint64() << ", Title: " << parser.ColumnParser("title").GetOptionalUtf8() << ", Release date: " << parser.ColumnParser("release_date").GetOptionalString() << Endl; diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-dotnet.md b/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-dotnet.md index 5f4e89edba..5923844911 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-dotnet.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-dotnet.md @@ -43,7 +43,7 @@ var response = await tableClient.SessionExec(async session => { return await session.ExecuteSchemeQuery(@" CREATE TABLE series ( - series_id Uint64, + series_id Uint64 NOT NULL, title Utf8, series_info Utf8, release_date Date, @@ -147,7 +147,7 @@ var resultSet = queryResponse.Result.ResultSets[0]; foreach (var row in resultSet.Rows) { Console.WriteLine($"> Series, " + - $"series_id: {(ulong?)row["series_id"]}, " + + $"series_id: {(ulong)row["series_id"]}, " + $"title: {(string?)row["title"]}, " + $"release_date: {(DateTime?)row["release_date"]}"); } @@ -177,7 +177,7 @@ public void executeScanQuery() foreach (var row in resultSet.Rows) { Console.WriteLine($"> ScanQuery, " + - $"series_id: {(ulong?)row["series_id"]}, " + + $"series_id: {(ulong)row["series_id"]}, " + $"season_id: {(ulong?)row["season_id"]}, " + $"episodes_count: {(ulong)row["episodes_count"]}"); } diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-nodejs.md b/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-nodejs.md index 76290faada..54e0708989 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-nodejs.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-nodejs.md @@ -37,7 +37,7 @@ async function createTables(session: Session, logger: Logger) { new TableDescription() .withColumn(new Column( 'series_id', - Types.optional(Types.UINT64), + Types.UINT64, // not null column )) .withColumn(new Column( 'title', diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/go/index.md b/ydb/docs/ru/core/reference/ydb-sdk/example/go/index.md index 46b132c588..84553b58f7 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/go/index.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/go/index.md @@ -81,7 +81,7 @@ err = db.Table().Do( ctx, func(ctx context.Context, s table.Session) (err error) { return s.CreateTable(ctx, path.Join(db.Name(), "series"), - options.WithColumn("series_id", types.Optional(types.TypeUint64)), + options.WithColumn("series_id", types.TypeUint64), // not null column options.WithColumn("title", types.Optional(types.TypeUTF8)), options.WithColumn("series_info", types.Optional(types.TypeUTF8)), options.WithColumn("release_date", types.Optional(types.TypeDate)), @@ -136,7 +136,7 @@ err := db.Table().Do( func(ctx context.Context, s table.Session) (err error) { var ( res result.Result - id *uint64 // указатель - для опциональных результатов + id uint64 // переменная для required результатов title *string // указатель - для опциональных результатов date *time.Time // указатель - для опциональных результатов ) @@ -170,7 +170,7 @@ err := db.Table().Do( // в ScanNamed передаем имена колонок из строки сканирования, // адреса (и типы данных), куда следует присвоить результаты запроса err = res.ScanNamed( - named.Optional("series_id", &id), + named.Required("series_id", id), named.Optional("title", &title), named.Optional("release_date", &date), ) @@ -179,7 +179,7 @@ err := db.Table().Do( } log.Printf( " > %d %s %s\n", - *id, *title, *date, + id, *title, *date, ) } } @@ -239,7 +239,7 @@ err = c.Do( // named.OptionalOrDefault позволяет "развернуть" опциональные // результаты или использовать дефолтное значение типа go err = res.ScanNamed( - named.OptionalOrDefault("series_id", &seriesID), + named.Required("series_id", &seriesID), named.OptionalOrDefault("season_id", &seasonID), named.OptionalOrDefault("title", &title), named.OptionalOrDefault("first_aired", &date), diff --git a/ydb/docs/ru/core/reference/ydb-sdk/example/python/index.md b/ydb/docs/ru/core/reference/ydb-sdk/example/python/index.md index f6fefba6df..2588f4bc60 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/example/python/index.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/example/python/index.md @@ -52,7 +52,7 @@ def create_tables(session, path): session.create_table( os.path.join(path, 'series'), ydb.TableDescription() - .with_column(ydb.Column('series_id', ydb.OptionalType(ydb.PrimitiveType.Uint64))) + .with_column(ydb.Column('series_id', ydb.PrimitiveType.Uint64)) # not null column .with_column(ydb.Column('title', ydb.OptionalType(ydb.PrimitiveType.Utf8))) .with_column(ydb.Column('series_info', ydb.OptionalType(ydb.PrimitiveType.Utf8))) .with_column(ydb.Column('release_date', ydb.OptionalType(ydb.PrimitiveType.Uint64))) diff --git a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/create_table.md b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/create_table.md index ad63484fd3..3ded0e3a7c 100644 --- a/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/create_table.md +++ b/ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/create_table.md @@ -39,8 +39,12 @@ {% if feature_not_null == true %} Без дополнительных модификаторов колонка приобретает [опциональный тип](../../types/optional.md) тип, и допускает запись `NULL` в качестве значений. Для получения неопционального типа необходимо использовать `NOT NULL`. {% else %} +{% if feature_not_null_for_pk %} +По умолчанию все колонки [опциональные](../../types/optional.md) и могут иметь значение NULL. Ограничение `NOT NULL` можно указать только для колонок, входящих в первичный ключ. +{% else %} Все колонки допускают запись `NULL` в качестве значений, то есть являются [опциональными](../../types/optional.md). {% endif %} +{% endif %} {% if feature_map_tables %} Обязательно указание `PRIMARY KEY` с непустым списком колонок. Эти колонки становятся частью ключа в порядке перечисления. {% endif %} @@ -48,7 +52,7 @@ **Пример** CREATE TABLE my_table ( - a Uint64, +{% if feature_not_null_for_pk %} a Uint64 NOT NULL,{% else %} a Uint64,{% endif %} b Bool, {% if feature_not_null %} c Float NOT NULL,{% else %} c Float,{% endif %} {% if feature_column_container_type %} d "List<List<Int32>>"{% endif %} |