Batasi nilai properti menggunakan batasan Cypher [duplikat]

Saya menambahkan batasan ke database neo4j menggunakan batasan Cypher dan memiliki bidang properti pada node di mana saya ingin nilainya menjadi salah satu dari sekumpulan string.

Saya telah membuat batasan bahwa bidang ini harus ada tetapi saya tidak yakin apakah Anda dapat membatasi nilainya sendiri.

Misalnya, simpul saya mungkin terlihat seperti ini

(e:Entity { foo: 'a' })

dan saya memiliki kendala

CREATE CONSTRAINT ON (e:Entity) ASSERT EXISTS (e.foo)

tapi saya hanya ingin foo menjadi a, b, c atau d, jadi dalam contoh ini, node akan baik-baik saja. Namun, jika saya menambahkan node lain

(e:Entity { foo: 'e' }),

maka saya ingin ini gagal dan memberikan pengecualian.

Dokumentasi kendala neo4j menunjukkan bahwa saat ini tidak ada cara melakukan ini. Adakah yang pernah mengalami hal ini sebelumnya dan punya solusi potensial?

Terima kasih sebelumnya!


person kernowal    schedule 29.05.2020    source sumber
comment
Sepengetahuan saya, tidak ada cara untuk mengonfigurasi batasan Neo4j pada nilai properti. Saya selalu menerapkan batasan seperti ini di lapisan API. Nilai yang diperbolehkan dapat ditentukan dalam Enum dalam bahasa apa pun yang Anda gunakan. Atau mereka dapat ditempatkan di Neo4j itu sendiri dan di-cache di lapisan API. Tidak ada pendekatan yang sempurna. Pendekatan Enum memerlukan perubahan kode dan penerapan setiap kali nilai berubah tetapi nilai yang tidak valid ditangkap pada waktu kompilasi. Menyimpan nilai di Neo4j memerlukan penyegaran cache dan nilai yang tidak valid adalah kesalahan runtime.   -  person hoyski    schedule 29.05.2020
comment
@hoyski Terima kasih atas tanggapannya. Pada dasarnya itulah kesimpulan yang saya dapatkan juga. Saya sudah membuat pengetikan di lapisan API untuk operasi CRUD. Alasan saya ingin membatasi db juga adalah untuk mengurangi masalah yang berasal dari migrasi database dan unggahan batch dari sumber lain   -  person kernowal    schedule 29.05.2020