aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorulya-sidorina <yulia@ydb.tech>2022-08-16 12:37:49 +0300
committerulya-sidorina <yulia@ydb.tech>2022-08-16 12:37:49 +0300
commit50d4ea46ebb20bcfc369eebb40b9c7e36170cd91 (patch)
tree3c5c7bf7ca7b01c18507ac3047caae7ec0ca22a1
parentc5e95d876426ce8f25755f8472298ade3fbd6423 (diff)
downloadydb-50d4ea46ebb20bcfc369eebb40b9c7e36170cd91.tar.gz
add not null pk info to ydb docs
feature(ydb_docs): add not null pk info
-rw-r--r--ydb/docs/en/core/yql/reference/yql-core/syntax/_includes/create_table.md6
-rw-r--r--ydb/docs/presets.yaml1
-rw-r--r--ydb/docs/ru/core/concepts/datamodel/_includes/table.md2
-rw-r--r--ydb/docs/ru/core/getting_started/_includes/yql.md4
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-cpp.md6
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-dotnet.md6
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/example/_includes/example-nodejs.md2
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/example/go/index.md10
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/example/python/index.md2
-rw-r--r--ydb/docs/ru/core/yql/reference/yql-core/syntax/_includes/create_table.md6
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 %}