Apakah DynamoDB mendukung foreign key?
Tidak. DynamoDB tak punya foreign key, constraint integritas referensial, atau cascading delete — sebagai database NoSQL, ia tak pernah menegakkan relasi antar item atau antar tabel. Sebagai gantinya Anda memodelkan relasi sendiri: denormalisasi data terkait ke dalam satu item, atau tempatkan item-item terkait berdampingan di bawah partition key bersama dengan single-table design. Untuk melihat dan menelusuri relasi yang Anda modelkan itu, Smart Table milik DynoTable menggambar relasi antara dua tabel di sebuah kanvas dan menjelajahi baris yang tergabung.
Mengapa tidak ada foreign key
Foreign key ada untuk mendukung join dan menegakkan integritas lintas tabel ternormalisasi. DynamoDB sengaja menghilangkan operator JOIN (AWS menyarankan denormalisasi sebagai gantinya), jadi sebuah constraint foreign key akan mengawasi relasi yang tak pernah dimanfaatkan model query-nya. Tak ada yang menghentikan Anda menyimpan key item lain sebagai atribut — DynamoDB saja yang tak akan memvalidasi atau meng-cascade-nya.
Bagaimana relasi dimodelkan sebagai gantinya
- Embed — data anak yang kecil dan terbatas hidup di dalam item induknya sebagai list atau map.
- Tempatkan berdampingan — induk dan anak berbagi satu partition key dengan sort key yang berbeda, jadi satu
Querymengembalikan seluruh relasinya; ini adalah inti dari single-table design. - Duplikasi — salin field yang dibutuhkan setiap pola akses ke item yang membutuhkannya, dengan menerima pemeliharaan saat tulis demi pembacaan sekali-request.
Panduan one-to-many dan many-to-many membahas setiap bentuknya secara mendalam.
Memberlakukan integritas ketika penting
Untuk kasus-kasus di mana Anda tadinya akan bersandar pada sebuah constraint, DynamoDB memberi Anda blok bangunan: condition expression menjaga sebuah penulisan berdasarkan keadaan item yang sedang ditulis, dan ConditionCheck dalam sebuah transaksi bisa memverifikasi item lain (misalnya induknya) ada dalam operasi semua-atau-tidak-sama-sekali yang sama. Cascading delete menjadi logika aplikasi yang eksplisit atau pembersihan berbasis Streams.
Seperti apa itu ketika Anda menjalankannya
Kami menempatkan satu item PROFILE dan dua item ORDER# di bawah pk = "CUSTOMER#1", menghapus profilnya, lalu melakukan query pada partisi itu lagi:
Count: 2
[{"sk":{"S":"ORDER#1"},"pk":{"S":"CUSTOMER#1"}},
{"sk":{"S":"ORDER#2"},"pk":{"S":"CUSTOMER#1"}}]Penghapusannya mengembalikan sukses. Dua item yatim, tanpa peringatan, tanpa error untuk ditangkap. Di PostgreSQL, penghapusan yang sama gagal, meng-cascade, atau menge-null-kan referensi anaknya, tergantung constraint mana yang Anda deklarasikan.
Lalu pengganti terdekatnya: sebuah TransactWriteItems yang memeriksa kondisi induknya sebelum menulis order ketiga.
TransactionCanceledException: Transaction cancelled, please refer cancellation
reasons for specific reasons [ConditionalCheckFailed, None]
CancellationReasons: [
{"Code":"ConditionalCheckFailed","Message":"The conditional request failed."},
{"Code":"None"}
]Posisi dalam array itu sesuai dengan posisi TransactItems Anda, jadi [ConditionalCheckFailed, None] berkata aksi 0 (pemeriksaan induk) gagal dan aksi 1 (penulisan anak) baik-baik saja. Dengan satu penjaga itu terbaca jelas; dengan delapan aksi, array itu satu-satunya cara mengetahui mana yang rusak.
Ia juga ditagih. Penulisan transaksional memakan dua write unit per item, dan AWS menyatakan dengan jelas bahwa "this capacity is consumed even when the transaction is canceled". Setiap penulisan yang ditolak berbiaya sama dengan yang diterima.
Pelajari lebih lanjut
Mulai dengan single-table design, bangun kondisi penjaganya di expression builder, lalu unduh DynoTable untuk menjelajahi relasi itu secara visual — Smart Table-nya menggabungkan tabel induk dan anak di sebuah kanvas sehingga Anda melihat seluruh item collection dalam satu tampilan.
Referensi
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- Best practices for NoSQL design — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.
Query item yatim dan keluaran pembatalannya direproduksi 2026-07-28 terhadap DynamoDB Local 3.3.0 dengan @aws-sdk/client-dynamodb 3.1095.0 pada Node v24.18.0.