คำถามติดแท็ก enum

3
วิธีใช้สิทธิ์ตรรกะทางธุรกิจใน PostgreSQL (หรือ SQL โดยทั่วไป)
สมมติว่าฉันมีสารบัญ CREATE TABLE items ( item serial PRIMARY KEY, ... ); ตอนนี้ฉันต้องการแนะนำแนวคิดของ "การอนุญาต" สำหรับแต่ละรายการ (โปรดทราบว่าฉันไม่ได้พูดถึงสิทธิ์การเข้าถึงฐานข้อมูลที่นี่ แต่สิทธิ์ทางตรรกะทางธุรกิจสำหรับรายการนั้น) แต่ละรายการมีสิทธิ์เริ่มต้นและสิทธิ์ต่อผู้ใช้ที่อาจแทนที่สิทธิ์เริ่มต้น ฉันพยายามคิดหลายวิธีในการใช้งานและหาวิธีแก้ไขปัญหาต่อไปนี้ แต่ฉันไม่แน่ใจว่าวิธีใดดีที่สุดและเพราะเหตุใด: 1) โซลูชันบูลีน ใช้คอลัมน์บูลีนสำหรับการอนุญาตแต่ละครั้ง: CREATE TABLE items ( item serial PRIMARY KEY, can_change_description boolean NOT NULL, can_change_price boolean NOT NULL, can_delete_item_from_store boolean NOT NULL, ... ); CREATE TABLE item_per_user_permissions ( item int …
16 postgresql  enum 

3
สร้างค่าคงที่ระดับฐานข้อมูล (การแจงนับ) โดยไม่ใช้ CLR หรือไม่
ฉันมีวัตถุ SQL หลายอย่างที่ต้องดำเนินการทางเลือกอื่นตามสถานะที่ต้องการของคำขอ มีวิธีในการสร้างค่าคงที่ระดับฐานข้อมูล (การแจงนับ) ที่สามารถส่งผ่านไปยังกระบวนงานที่เก็บไว้ฟังก์ชันค่าตารางและใช้ในแบบสอบถาม (โดยไม่ต้องใช้ CLR) หรือไม่ CREATE PROCEDURE dbo.DoSomeWork(@param1 INTEGER, ..., @EnumValue myEnumType) AS ...; แล้วใช้มัน: EXEC doSomeWork 85, ..., (myEnumType.EnumValue1 + myEnumType.EnumValue2); ไหนmyEnumTypeจะเก็บค่าการแจงนับไม่กี่ ในขั้นตอนที่ฉันจะสามารถใช้@EnumValueและทดสอบกับค่าในmyEnumTypeการทำงานที่จำเป็น ฉันจะทำให้ค่าของmyEnumTypebitmask สำหรับกรณีที่ฉันกำลังพิจารณา สำหรับตัวอย่างง่ายๆให้พิจารณากระบวนการที่มีราคาแพงซึ่งใช้ชุดข้อมูลขนาดใหญ่และลดลงเป็นชุดข้อมูลที่มีขนาดเล็กลง แต่ยังคงมีขนาดใหญ่มาก ในกระบวนการนี้คุณต้องทำการปรับเปลี่ยนบางอย่างในระหว่างกระบวนการที่จะมีผลต่อผลลัพธ์ สมมติว่านี่เป็นตัวกรองสำหรับ (หรือต่อ) บันทึกบางประเภทตามสถานะของการคำนวณระดับกลางภายในการลดลง @EnumValueชนิดmyEnumTypeสามารถนำมาใช้ในการทดสอบสำหรับการนี้ SELECT ... FROM ... WHERE (@EnumValue & myEnumType.EnumValue1 = myEnumType.EnumValue1 AND ...) OR …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.