98 lines
5.8 KiB
Plaintext
98 lines
5.8 KiB
Plaintext
---
|
||
title: Genel Bakış
|
||
description: Uygulamanızın bir çalışma alanına eklediği verileri şekillendirin — nesneler, alanlar ve ilişkiler.
|
||
icon: database
|
||
---
|
||
|
||
Bir Twenty uygulamasının **veri katmanı**, uygulamanızın bir çalışma alanına *eklediği* veridir — bildirdiği yeni kayıt türleri, mevcut nesnelere eklediği sütunlar ve bu kayıtların birbirine nasıl bağlandığı.
|
||
|
||
```text
|
||
┌──────────────────────────────────────────────────┐
|
||
│ Object — a record type, e.g. PostCard │
|
||
│ ├─ Field (name, type, label) │
|
||
│ ├─ Field │
|
||
│ └─ Relation (link to another object) │
|
||
└──────────────────────────────────────────────────┘
|
||
│
|
||
├── lives in your app, OR
|
||
│
|
||
▼
|
||
┌──────────────────────────────────────────────────┐
|
||
│ Standard / other apps' objects │
|
||
│ └─ Field added by your app via defineField │
|
||
└──────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## Bu bölümde
|
||
|
||
<CardGroup cols={2}>
|
||
<Card title="Nesneler" icon="table" href="/l/tr/developers/extend/apps/data/objects">
|
||
`defineObject` — kendi alanlarına sahip yeni kayıt türleri bildirin.
|
||
</Card>
|
||
<Card title="Nesneleri Genişletme" icon="wand-magic-sparkles" href="/l/tr/developers/extend/apps/data/extending-objects">
|
||
`defineField` — standart nesnelere veya diğer uygulamaların nesnelerine alanlar ekleyin.
|
||
</Card>
|
||
<Card title="İlişkiler" icon="diagram-project" href="/l/tr/developers/extend/apps/data/relations">
|
||
Nesneler arasında çift yönlü `MANY_TO_ONE` / `ONE_TO_MANY` bağlantıları.
|
||
</Card>
|
||
</CardGroup>
|
||
|
||
## Varlıklara genel bakış
|
||
|
||
| Varlık | Amaç | Şununla tanımlanır |
|
||
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
|
||
| **Nesne** | Kendi alanlarına sahip yeni bir özel kayıt türü (ör. PostCard, Invoice) | `defineObject()` |
|
||
| **Alan** | Bir nesne üzerindeki sütun. Bağımsız alanlar, oluşturmadığınız nesneleri genişletebilir (ör. Company nesnesine `loyaltyTier` ekleyin) | `defineField()` |
|
||
| **İlişki** | İki nesne arasında, her iki tarafı da alan olarak bildirilmiş çift yönlü bir bağlantı | `defineField()` ile `FieldType.RELATION` |
|
||
| **Dizin** | Nesnelerinizden biri üzerinde yinelenen bir sorguyu hızlandırmak için bir veritabanı dizini | `defineIndex()` |
|
||
|
||
SDK bunları derleme zamanında AST analiziyle algılar, bu yüzden dosya organizasyonu size kalmıştır — kullanılan gelenek `src/objects/`, `src/fields/` ve `src/indexes/` dizinleridir. Kararlı `universalIdentifier` UUID’leri, dağıtımlar arasında her şeyi birbirine bağlar.
|
||
|
||
## Dizinler (İsteğe bağlı)
|
||
|
||
Uygulamalar, yinelenen sorguları hızlı tutmak için nesneleriyle birlikte dizinler sunabilir. En yaygın durum, sık okuduğunuz bir durum ya da yabancı anahtar sütunudur.
|
||
|
||
```ts src/indexes/post-card-status.index.ts
|
||
import { defineIndex } from 'twenty-sdk/define';
|
||
|
||
import {
|
||
POST_CARD_UNIVERSAL_IDENTIFIER,
|
||
STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||
} from '../objects/post-card.object';
|
||
|
||
export default defineIndex({
|
||
universalIdentifier: 'b6e9d2a1-5a4c-46ca-9d52-42c8f02d1ff0',
|
||
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
|
||
fields: [
|
||
{
|
||
universalIdentifier: 'b6e9d2a1-5a4c-46ca-9d52-42c8f02d1ff1',
|
||
fieldUniversalIdentifier: STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||
},
|
||
],
|
||
});
|
||
```
|
||
|
||
### Benzersiz dizinler
|
||
|
||
`defineIndex`, hem tek sütunlu hem çok sütunlu benzersizlik için `isUnique: true` kabul eder. Önerilen yöntem budur — `defineField({ isUnique: true })` kullanımdan kaldırılmıştır ve gelecekteki bir sürümde kaldırılacaktır.
|
||
|
||
```ts
|
||
defineIndex({
|
||
universalIdentifier: '…',
|
||
objectUniversalIdentifier: PERSON_UNIVERSAL_IDENTIFIER,
|
||
isUnique: true,
|
||
fields: [{ universalIdentifier: '…', fieldUniversalIdentifier: EMAIL_FIELD_UNIVERSAL_IDENTIFIER }],
|
||
});
|
||
```
|
||
|
||
### Diğer kısıtlamalar
|
||
|
||
* Kısmi `WHERE` koşulları yönetici kontrolü altında kalır — uygulamalar bunları tanımlayamaz.
|
||
* Her nesne, 10 özel dizin ile sınırlandırılmıştır (framework'ün kendi dizinleri buna dahil değildir).
|
||
|
||
`fields` dizisini, Postgres'in kullanması gereken şekilde sıralayın — en soldaki sütun ilk, bir telefon rehberinde olduğu gibi. Dizinler bedava değildir: tabloya yapılan her yazma işlemi bunları günceller. Bir dizini yalnızca ona ihtiyaç duyan bir sorgunuz olduğunda ekleyin.
|
||
|
||
<Note>
|
||
**Application Config** veya **Roles & Permissions** mı arıyorsunuz? Bunlar, ekledikleri verilerden çok uygulamanın kendisini tanımlar — [Config](/l/tr/developers/extend/apps/config/overview) altında bulunurlar. **Connections** (Linear, GitHub, Slack OAuth) mı arıyorsunuz? Bunlar, mantık fonksiyonları *içinden* çağrılmak için vardır ve [Logic](/l/tr/developers/extend/apps/logic/connections) altında bulunurlar.
|
||
</Note>
|