create_schema
Alanlar, türler, uzunluklar, karakter kodlaması ve indeksler.
Bir şema bir tabloyu tanımlar: alanları, türleri, kuralları ve indeksleri.
create_schema('uyeler')
.fields({
'id': {type: string, max_length: 32, guid: true, primary_key: true},
'name': {type: string, max_length: 50},
'surname': {type: string, max_length: 50, encoding: latin5},
'nickname': {type: string, max_length: 20, default: '🍉'},
'email': {type: string, max_length: 100, index: {unique: true, name: 'idx_email'}},
'age': {type: int8},
'seq': {type: int64, autoincrement: true},
'birth': {type: date, format: 'dd.mm.yyyy'},
'balance': {type: decimal, precision: 12, scale: 2, default: 0}
})
.commit();.commit()yoksa şema yalnızca doğrulanır. Hatalar satır ve sütunla gelir.- Alan sırası korunur.
fields('*')alanları bu sırayla döndürür. - Her alana tekrar kullanılmayan bir kimlik verilir. Bu sayede alan silinip yeni bir alan eklendiğinde eski kayıtlar karışmaz.
- Adlar küçük harf
snake_caseolmalı ve en fazla 63 karakter olabilir.privilegesadı venar_ile başlayan adlar sisteme ayrılmıştır.
Şemayı silmek için:
drop_schema('uyeler').commit();Silmek, tablonun bütün sayfalarını boşa çıkarır.
Türler#
| Grup | Türler |
|---|---|
| Tamsayı | int8 int16 int32 int64 · uint8 uint16 uint32 uint64 |
| Ondalıklı | float32 float64 · decimal (precision, scale ile) |
| Metin | string (varsayılan max_length: 255) · text (sınırsız) |
| Mantıksal | bool |
| Zaman | date datetime time timestamp |
| Kimlik | guid |
| İkili | binary blob |
Tek başına int geçersizdir; boyut yazılmalıdır. int8 en fazla 127 tutar, yanlışlıkla seçildiğinde değer taşar.
# hata: 'int' is ambiguous: write the size, e.g. int8 (−128..127), int32 or int64
create_schema('x').fields({'age': {type: int}});Alan seçenekleri#
| Seçenek | Ne yapar |
|---|---|
max_length | string ve binary için üst sınır. Karakter sayar, bayt değil. |
encoding | utf8 (varsayılan), ascii, latin1, latin5. Bkz. aşağısı. |
precision, scale | decimal için toplam ve ondalık basamak sayısı. |
format | Tarih alanlarının giriş ve gösterim biçimi, örneğin 'dd.mm.yyyy'. |
nullable | Varsayılan true. Birincil anahtar ile autoincrement ve guid alanlarında varsayılan false. |
default | Değer, now(), guid() ya da null. |
primary_key | En fazla bir alan. Verilmezse gizli bir satır kimliği kullanılır. |
autoincrement | Tamsayı alanlar için. guid ile birlikte kullanılamaz. |
guid | string (max_length ≥ 32) ya da guid türü için kimlik üretir. |
index | true ya da {name, unique}. Şimdilik yalnızca btree. |
check | Doğrulama kuralları. Bkz. Doğrulama. |
Karakter kodlaması ve emoji#
Metin her zaman UTF-8 olarak işlenir. encoding, bir alanın hangi karakterleri kabul ettiğini belirler:
| Kodlama | Kabul eder |
|---|---|
utf8 | Unicode'un tamamı, emoji dahil: 🍉 👩💻 🇹🇷 |
ascii | Yalnızca 7 bitlik karakterler (kod, slug, ülke kodu) |
latin1 | ISO-8859-1 ile gösterilebilenler |
latin5 | ISO-8859-9 ile gösterilebilenler: Türkçe ğ ı ş İ Ğ Ş dahil |
create_schema('etiketler')
.fields({
'slug': {type: string, max_length: 40, encoding: ascii, primary_key: true},
'ad': {type: string, max_length: 40}
})
.commit();
from('etiketler').insert_one({slug: 'nar-suyu', ad: 'Nar suyu 🍹'});# hata: character 'ç' is not allowed in ascii
from('etiketler').insert_one({slug: 'çay', ad: 'Çay'});max_length Unicode kod noktası sayar. 🍉 bir karakterdir. 👩💻 ise üç karakterdir (iki emoji ve aradaki birleştirici).
Tarih biçimi#
Hem şemadaki format hem de FORMAT ve TO_DATE fonksiyonları aynı belirteçleri kullanır:
| Belirteç | Anlamı | Belirteç | Anlamı |
|---|---|---|---|
yyyy | yıl (2026) | hh | saat (00–23) |
yy | yıl (26) | ii | dakika |
mm | ay | ss | saniye |
dd | gün |
MM ve HH sırasıyla mm ve hh ile aynı anlamdadır. Ayraç olarak - / . : , T ve boşluk kullanılabilir. Biçim verilmezse ISO 8601 kullanılır. Bir date alanına saat belirteci yazılamaz.
İndeksler#
Birincil anahtar otomatik olarak indekslenir (pk_<şema>). Diğer alanlar için:
create_schema('siparisler')
.fields({
'no': {type: int64, autoincrement: true, primary_key: true},
'uye_id': {type: string, max_length: 32, index: true},
'kod': {type: string, max_length: 20, index: {unique: true, name: 'idx_siparis_kod'}}
})
.commit();where içinde birincil anahtar ya da indeksli bir alan eşitlikle aranırsa tablo taranmaz, doğrudan indeksten okunur. Benzersiz indekslerde null değerler birbirine eşit sayılmaz; birden fazla satır null olabilir.