จำกัดค่าคุณสมบัติโดยใช้ข้อ จำกัด ของ Cypher [ซ้ำกัน]

ฉันกำลังเพิ่มข้อจำกัดให้กับฐานข้อมูล neo4j โดยใช้ข้อจำกัดของ Cypher และมีช่องคุณสมบัติบนโหนดที่ฉันต้องการให้ค่าเป็นหนึ่งในชุดสตริง

ฉันได้สร้างข้อจำกัดว่าต้องมีฟิลด์นี้อยู่ แต่ไม่แน่ใจว่าคุณสามารถจำกัดค่านั้นเองได้หรือไม่

ตัวอย่างเช่น โหนดของฉันอาจมีลักษณะเช่นนี้

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

และฉันก็มีข้อจำกัด

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

แต่ฉันต้องการให้ foo เป็น a, b, c หรือ d เท่านั้น ดังนั้นในตัวอย่างนี้ โหนดก็ใช้ได้ อย่างไรก็ตามหากจะต้องเพิ่มโหนดอื่น

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

ถ้าอย่างนั้นฉันก็อยากให้สิ่งนี้ล้มเหลวและมีข้อยกเว้น

เอกสารประกอบเกี่ยวกับข้อจำกัด neo4j ระบุว่าปัจจุบันยังไม่มีวิธี ของการทำเช่นนี้ มีใครเคยเจอสิ่งนี้มาก่อนและมีวิธีแก้ปัญหาที่เป็นไปได้หรือไม่?

ขอบคุณล่วงหน้า!


person kernowal    schedule 29.05.2020    source แหล่งที่มา
comment
เท่าที่ฉันทราบ ไม่มีวิธีกำหนดค่าข้อจำกัด Neo4j ในค่าคุณสมบัติได้ ฉันนำข้อจำกัดประเภทนี้ไปใช้ในเลเยอร์ API เสมอ ค่าที่อนุญาตสามารถกำหนดค่าได้ใน Enum ในภาษาใดก็ตามที่คุณใช้ หรือสามารถวางไว้ใน Neo4j เองและแคชไว้ในเลเยอร์ API ไม่มีแนวทางใดที่สมบูรณ์แบบ วิธีการ Enum จำเป็นต้องมีการเปลี่ยนแปลงโค้ดและการปรับใช้ทุกครั้งที่ค่าเปลี่ยนแปลง แต่ตรวจพบค่าที่ไม่ถูกต้องในเวลาคอมไพล์ การจัดเก็บค่าใน Neo4j จำเป็นต้องมีการรีเฟรชแคช และค่าที่ไม่ถูกต้องถือเป็นข้อผิดพลาดรันไทม์   -  person hoyski    schedule 29.05.2020
comment
@hoyski ขอบคุณสำหรับการตอบกลับ นั่นคือข้อสรุปที่ฉันได้มาเช่นกัน ฉันได้สร้างการพิมพ์ในเลเยอร์ API สำหรับการดำเนินการ CRUD แล้ว เหตุผลที่ฉันต้องการจำกัดฐานข้อมูลเช่นกันคือเพื่อบรรเทาปัญหาที่มาจากการย้ายฐานข้อมูลและการอัพโหลดเป็นชุดจากแหล่งอื่น   -  person kernowal    schedule 29.05.2020