# FHIR veritabanı şeması

> FHIR kaynaklarını depolama: normalleştirilmiş tablolar ile JSON ve arama indeksleri veya grafik, Anpheros'un çalıştığı PostgreSQL şeması (kaynaklar, geçmiş, tipli indeksler, projeksiyonlar) ve önemli kurallar.

Source: https://developers.anpheros.com/tr/guides/fhir-database-schema

**Bir FHIR veritabanı, HL7 FHIR kaynaklarını FHIR API aracılığıyla okunabilir, aranabilir ve sürümlenebilir hale getirmek için depolar; en yaygın şema, her kaynağı JSON olarak tutar ve arama parametreleri için ayrı indeks tablolarını doldurur, her öğeyi normalleştirilmiş ilişkisel tablolara yaymak yerine.** Bu sayfa, üç yaygın tasarımı, Anpheros'un PostgreSQL'de çalıştırdığı şemayı ve kendi şemanızı ne zaman oluşturmamanız gerektiğini açıklar.

## FHIR'i Saklamanın Üç Yolu

<!-- visual:schema-compare -->

FHIR kaynakları derin, isteğe bağlı ve genişletilebilir yapıdadır: tek başına bir Observation'ın onlarca öğesi, seçim türleri (`value[x]`), tekrarlanan kodlamalar ve uzantıları vardır. Bunu ilişkisel sütunlara normalleştirmek, bir profil alan eklediğinde bir geçiş anlamına gelir. Kaynağı JSON olarak saklamak, geçerli olan her şeyi değişmeden depolar; dizin tabloları aranabilir olmasını sağlar.

## Anpheros şeması

<!-- visual:schema-stack -->

| Tablo | Bir satır başına | Anahtar sütunlar |
|---|---|---|
| `fhir_resources` | bir kaynağın mevcut sürümü | `resource_type`, `id`, `patient_id`, `version`, `json` (tam kaynak), `last_updated`, `deleted` ve köken sütunları |
| `fhir_history` | yazılmış her sürüm | `resource_type`, `id`, `version`, `json`, `last_updated` |
| `idx_token` | kodlanmış veya tanımlayıcı arama değeri | sistem, kod — `code`, `category`, `identifier`, `status` için |
| `idx_string` | metin arama değeri | normalleştirilmiş metin — adlar ve serbest metin için |
| `idx_date` | tarih arama değeri | aralığın başlangıcı ve sonu — `date`, `onset-date`, `birthdate` için |
| `idx_reference` | referans arama değeri | hedef türü ve kimliği — `patient`, `subject`, `encounter` için |
| `idx_quantity` | miktar arama değeri | değer, sistem, birim — `value-quantity` için |
| `proj_observations`, `proj_conditions`, `proj_medications` | kaynak, düzleştirilmiş | basit REST API'nin filtrelediği sütunlar |

Her yazma işleminde platform, kaynağı doğrular, yeni sürümü `fhir_resources` ve `fhir_history`'ya yazar, dizin satırlarını ve projeksiyonlarını değiştirir ve Kökeni kaydeder. `Observation?patient=…&code=http://loinc.org|4548-4&date=ge2026-01-01` gibi bir arama, `idx_reference`, `idx_token` ve `idx_date` üzerinde birleştirmeler haline gelir; sonuç, yazıldığı gibi saklanan JSON'u döndürür.

## Önemli Tasarım Kuralları

- **Yalnızca beyan edilmiş arama parametrelerini indeksleyin** ve bilinmeyenleri sessizce yok saymak yerine `400` ile reddedin.
- **Geçmiş olmadan asla yerinde güncelleme yapmayın**: düzeltmeler, önceden bilinenleri korumalıdır.
- **Yumuşak silme**: silinen bir kaynak okumalardan ve aramalardan kaybolur ancak sürümleri denetim için kalır.
- **Hasta bölmesi sütunu**: her kaynağa `patient_id` depolamak, `$everything`, onay filtreleri ve hasta başına izolasyonu ucuz hale getirir.
- **Depolamadan önce doğrulayın**: depodaki geçersiz JSON daha sonra her okuyucuyu bozar.

## Sıkça Sorulan Sorular

### FHIR için en iyi veritabanı hangisidir?
Çoğu üretim ortamındaki FHIR sunucusu, kaynakların JSON (JSONB) olarak saklandığı ve arama parametrelerinin ayrı tablolarda indekslendiği PostgreSQL gibi ilişkisel bir veritabanı kullanır. Bu, esnek depolamayı hızlı, standart arama ile birleştirir.

### FHIR kaynaklarını ilişkisel tablolara normalleştirmeli miyim?
Genellikle birincil depolama için hayır. Normalleştirilmiş tablolar raporlama için uygundur; bunları, Anpheros'un daha basit REST API'si için yaptığı gibi, saklanan kaynaklardan oluşturulan projeksiyonlar olarak saklayın.

### HAPI FHIR kaynakları nasıl saklar?
HAPI FHIR'ın JPA sunucusu da her kaynak sürümünü serileştirilmiş JSON olarak saklar ve arama parametrelerini ayrı indeks tablolarında tutar. Anpheros tasarımı aynı prensibi takip eder.

### Kendi FHIR veritabanımı oluşturmam gerekiyor mu?
Yalnızca profiller ve kaynak türleri üzerinde tam kontrol istiyorsanız. Aksi takdirde yönetilen bir FHIR platformu, şemayı çalıştırmadan depolama, arama, geçmiş, izin ve denetim sağlar.

<!-- visual:cta-schema -->

## İlgili Kaynaklar

- [FHIR ve özel bir tıbbi veritabanı karşılaştırması](https://developers.anpheros.com/tr/guides/fhir-vs-custom-database)
- [Tıbbi kayıtların FHIR R4 kullanılarak nasıl saklanacağı](https://developers.anpheros.com/tr/guides/store-medical-records-fhir)
- [Ücretsiz FHIR veritabanı ve sandbox](https://developers.anpheros.com/tr/guides/free-fhir-database)
- [Anpheros'un diğer FHIR sunucularıyla karşılaştırması](https://developers.anpheros.com/tr/guides/fhir-server-comparison)
- [FHIR platformu](https://developers.anpheros.com/tr/guides/fhir)
