EAV-Django

ภาพหน้าจอของซอฟแวร์:
EAV-Django
รายละเอียดซอฟแวร์:
รุ่น: 1.4.4
วันที่อัพโหลด: 14 Apr 15
ผู้พัฒนา: Andrey Mikhaylenko
การอนุญาต: ฟรี
ความนิยม: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django เป็น app Django นำมาใช้ใหม่ที่ช่วยให้การดำเนินงานของกิจการ-Attribute-Value รูปแบบข้อมูล
& nbsp; รุ่น Entity-Attribute-Value (EAV) ยังเป็นที่รู้จักกันในรูปแบบวัตถุแอตทริบิวต์ค่าและคีมาเปิดซึ่งจะใช้ในกรณีที่จำนวนของคุณลักษณะ (คุณสมบัติพารามิเตอร์) ที่สามารถนำมาใช้เพื่ออธิบายสิ่งที่ (" นิติบุคคล "หรือ" วัตถุ ") อาจเป็นใหญ่มาก แต่จำนวนที่จริงจะนำไปใช้กับกิจการที่ได้รับเป็นเจียมเนื้อเจียมตัวค่อนข้าง
EAV-Django ทำงานได้ดีกับ RDBMS แบบดั้งเดิม (ทดสอบใน SQLite และ MySQL)
ความคาดหวัง
แอพลิเคชันเพิ่มขึ้นจากโครงการร้านค้าออนไลน์เพื่อให้มันสวยปฏิบัติและไม่เพียง แต่การออกกำลังกายทางวิชาการ หลักสำคัญคือ
& nbsp; 1 ความยืดหยุ่นของข้อมูล
& nbsp; 2 ประสิทธิภาพของแบบสอบถามและ
& nbsp; 3 การบำรุงรักษาสูงสุดโดยไม่ต้องแก้ไขรหัส
หลักสูตรนี้หมายถึงการแลกเปลี่ยนและเป้าหมายคือการหาน้อยรวมกันอันตรายสำหรับกรณีทั่วไป
คุณสมบัติ
รูปแบบการให้บริการทั้งหมดอยู่ในนามธรรมเช่น EAV-Django ไม่เก็บข้อมูลใด ๆ ในตารางของตัวเอง แต่จะให้พื้นฐานสำหรับรูปแบบของคุณเองซึ่งจะมีการสนับสนุนสำหรับ EAV ออกจากกล่อง
API EAV รวมถึง:
& nbsp; * สร้าง / ปรับปรุง / การเข้าถึง: กรณีรูปแบบการให้บริการมาตรฐาน API สำหรับทั้งสอง "ของจริง" สาขาและคุณลักษณะ EAV นามธรรม, แต่ไม่ได้ยืนอยู่ในทางของคุณและให้หมายถึงการจัดการกับสิ่งที่อยู่ภายใต้
& nbsp; แบบสอบถาม *: BaseEntityManager รวมถึงวิธีการในเครื่องแบบกรอง () และไม่รวม () เพื่อสอบถาม "ของจริง" และคุณลักษณะ EAV
& nbsp; * schemata ปรับแต่งสำหรับแอตทริบิวต์
& nbsp; * ผู้ดูแลระบบ: คุณลักษณะแบบไดนามิกทั้งหมดสามารถแสดงและแก้ไขผู้ดูแลระบบ Django ที่ไม่มีหรือความพยายามเล็ก ๆ น้อย ๆ (ใช้ eav.admin.BaseEntityAdmin) schemata สามารถแก้ไขได้แยกเป็นสามัญวัตถุแบบ Django
& nbsp; * Facets: การค้นหาแง่มุมเป็นคุณลักษณะที่สำคัญของร้านค้าออนไลน์แคตตาล็อกและอื่น ๆ โดยทั่วไปคุณจะต้องมีรูปแบบที่เป็นตัวแทนย่อยบางอย่างของรูปแบบแอตทริบิวต์กับเครื่องมือที่เหมาะสมและทางเลือกเพื่อให้ผู้ใช้สามารถเลือกค่าที่พึงประสงค์ของคุณสมบัติบางอย่างที่ส่ง รูปแบบและได้รับรายชื่อของรายการที่ตรงกัน ในกรณีทั่วไป django กรองจะทำ แต่มันจะไม่ทำงานกับ EAV ดังนั้น EAV-Django ให้ชุดที่สมบูรณ์ของเครื่องมือสำหรับการที่
ตัวอย่าง
ให้กำหนดรูปแบบ EAV ง่ายสร้างแอตทริบิวต์ EAV และดูว่ามันจะทำงาน โดย "EAV แอตทริบิวต์" ผมหมายถึงผู้ที่ถูกเก็บไว้ในฐานข้อมูลเป็นวัตถุที่แยก แต่เข้าถึงและค้นหาในลักษณะที่ว่าพวกเขาเป็นคอลัมน์ในตารางของกิจการ:
จากรุ่นนำเข้า django.db
จากการนำเข้า BaseEntity eav.models, BaseSchema, BaseAttribute
ผลไม้ชั้น (BaseEntity):
& nbsp; title = models.CharField (max_length = 50)
ชั้น Schema (BaseSchema):
& nbsp; ผ่าน
ชั้น Attr (BaseAttribute):
& nbsp; สคี = models.ForeignKey (แบบแผน related_name = 'attrs')
# ในเปลือกหลาม:
# กำหนดแอตทริบิวต์ชื่อ "สี"
>>> color = Schema.objects.create (
... title = 'สี'
... ชื่อ = 'สี', # งดการเติม / slugify จากชื่อ
... ประเภทข้อมูล = Schema.TYPE_TEXT
... )
# สร้างนิติบุคคล
>>> E = Fruit.objects.create (title = 'แอปเปิ้ล', color = 'สีเขียว')
# กำหนด "จริง" และ EAV แอตทริบิวต์แบบเดียวกับที่
>>> e.title
'แอปเปิ้ล'
>>> e.colour
'สีเขียว'
>>> e.save () # ข้อตกลงกับ EAV แอตทริบิวต์โดยอัตโนมัติ
รายการ # คุณลักษณะ EAV เป็นกรณี Attr
>>> e.attrs.all ()
[]
ค้นหา # โดยแอตทริบิวต์ EAV ราวกับว่ามันเป็นข้อมูลธรรมดา
>>> Fruit.objects.filter (color = 'สีเหลือง')
[<ผลไม้: แอปเปิ้ล>]
# ค้นหาทั้งหมดสารประกอบได้รับการสนับสนุน
>>> Fruit.objects.filter (colour__contains = 'ตะโกน')
[<ผลไม้: แอปเปิ้ล>]
โปรดทราบว่าเราสามารถเข้าถึงแก้ไขและแบบสอบถามสีราวกับว่ามันเป็นข้อมูล Entity จริง แต่ในเวลาเดียวกันชื่อของชนิดและยังดำรงอยู่จะมีการกำหนดอย่างสมบูรณ์โดยอินสแตนซ์ Schema วัตถุ Schema สามารถเข้าใจได้เป็นคลาสและวัตถุ Attr ที่เกี่ยวข้องเป็นกรณีของ ในคำอื่น ๆ เป็นวัตถุ Schema เช่น CHARFIELD, IntegerField และเช่นกำหนดเฉพาะในระดับข้อมูลไม่ยากรหัสในหลาม และพวกเขาสามารถ "instantiated" สำหรับการใด ๆ Entity (ยกเว้นกรณีที่คุณใส่ข้อ จำกัด ที่กำหนดเองซึ่งอยู่นอกพื้นที่ EAV-Django ของความรับผิดชอบ)
ชื่อของคุณลักษณะที่กำหนดไว้ใน schemata ที่เกี่ยวข้อง นี้สามารถนำไปสู่​​ความกลัวว่าเมื่อชื่อถูกเปลี่ยนรหัสจะไปทำลาย อันที่จริงกรณีนี้ไม่ได้เป็นชื่อเป็นเพียงการใช้โดยตรงสำหรับการค้นหาคู่มือ ในกรณีอื่น ๆ ค้นหาทั้งหมดถูกสร้างขึ้นโดยไม่ต้องชื่อยากรหัสและวัตถุ EAV จะเชื่อมโยงกันโดยคีย์หลักไม่ได้โดยชื่อ ชื่อที่มีอยู่ถ้ารูปแบบ แต่รูปแบบจะถูกสร้างขึ้นอยู่กับสถานะปัจจุบันของเมตาดาต้าเพื่อให้คุณสามารถเปลี่ยนชื่อ schemata สิ่งที่คุณสามารถทำลายจากอินเตอร์เฟซผู้ดูแลระบบเป็นประเภท ถ้าคุณเปลี่ยนชนิดข้อมูลของสคี, คุณลักษณะทั้งหมดของมันจะยังคงเหมือนเดิม แต่จะใช้คอลัมน์อื่นในการจัดเก็บค่าของพวกเขา เมื่อคุณคืนค่าชนิดข้อมูลค่าที่เก็บไว้ก่อนหน้านี้จะมองเห็นได้อีกครั้ง
ดูการทดสอบสำหรับตัวอย่างเพิ่มเติม
ข้อมูลประเภท
โครงสร้าง metadata ขับเคลื่อนขยายความยืดหยุ่น แต่หมายถึงการแลกเปลี่ยนบางอย่าง หนึ่งในนั้นคือการเพิ่มจำนวนของการเข้าร่วม (และดังนั้นคำสั่งช้าลง) อีกประการหนึ่งคือน้อยกว่าชนิดข้อมูล ในทางทฤษฎีเราสามารถสนับสนุนทุกประเภทข้อมูลที่มีอยู่สำหรับการจัดเก็บ แต่ในทางปฏิบัติมันจะหมายถึงการสร้างคอลัมน์หลายต่อแอตทริบิวต์มีเพียงไม่กี่ถูกใช้ - สิ่งที่เรากำลังพยายามที่จะหลีกเลี่ยงโดยใช้ EAV นี่คือเหตุผลที่ EAV-Django สนับสนุนเฉพาะประเภทพื้นฐานบางอย่าง (แต่คุณสามารถขยายรายการนี​​้ถ้าจำเป็น):
& nbsp; * Schema.TYPE_TEXT, TextField;
& nbsp; * Schema.TYPE_FLOAT, FloatField;
& nbsp; * Schema.TYPE_DATE, DateField;
& nbsp; * Schema.TYPE_BOOL, NullBooleanField;
& nbsp; * Schema.TYPE_MANY สำหรับทางเลือกหลาย ๆ (เช่นรายการค่า)
คุณลักษณะ EAV ทั้งหมดจะถูกเก็บเป็นบันทึกในตารางด้วยการผสมผสานเอกลักษณ์ของการอ้างอิงไปยังหน่วยงานและ schemata (Entity มีการอ้างอิงผ่านกรอบ contenttypes, คีมามีการอ้างอิงผ่านทางต่างประเทศที่สำคัญ.) ในคำอื่น ๆ สามารถมีได้เพียงหนึ่งแอตทริบิวต์กับกิจการที่ได้รับและสคี คีมาคือนิยามของแอตทริบิวต์ สคีกำหนดชื่อ, ชื่อ, ชนิดข้อมูลและจำนวนของคุณสมบัติอื่น ๆ ที่ใช้กับแอตทริบิวต์ของสคีนี้ เมื่อเราเข้าถึงหรือค้นหาคุณลักษณะ EAV เครื่องจักร EAV มักจะใช้ schemata เป็นคุณลักษณะข้อมูลเมตา ทำไม? เพราะชื่อแอตทริบิวต์ที่ถูกเก็บไว้ในสคีที่เกี่ยวข้องและความคุ้มค่าจะถูกเก็บไว้ในคอลัมน์ของตารางแอตทริบิวต์ เราไม่ทราบว่ามันเป็นคอลัมน์จนกว่าเราจะมองไปที่ข้อมูลเมตา
ในตัวอย่างที่ให้ไว้ข้างต้นเราได้เล่นเฉพาะกับแอททริบิข้อความ ประเภทอื่น ๆ ทั้งหมดประพฤติตรงเดียวกันยกเว้น TYPE_MANY หลายต่อหลายคนเป็นกรณีพิเศษตามที่เกี่ยวข้องกับรูปแบบพิเศษสำหรับตัวเลือก EAV-Django มีรูปแบบนามธรรม แต่คุณจะต้องกำหนดรูปแบบที่เป็นรูปธรรม (เช่น Choice) และชี้ไปที่มันจากรูปแบบแอตทริบิวต์ (เช่นใส่ต่างประเทศที่สำคัญชื่อ "ทางเลือก") รูปแบบทางเลือกที่ยังจะต้องชี้ไปที่ Schema ตรวจสอบการทดสอบตัวอย่างเช่น

มีอะไรใหม่ ในข่าวประชาสัมพันธ์ฉบับนี้.

  • สร้าง / ปรับปรุง / การเข้าถึง: กรณีรูปแบบการให้บริการ มาตรฐาน API สำหรับทั้ง & quot; จริง & quot; สาขาและคุณลักษณะ EAV นามธรรม, แต่ไม่ได้ยืนอยู่ในทางของคุณและให้หมายถึงการจัดการกับสิ่งที่อยู่ภายใต้.
  • แบบสอบถาม: BaseEntityManager รวมถึงวิธีการในเครื่องแบบกรอง () และไม่รวม () เพื่อสอบถาม & quot; จริง & quot; และแอตทริบิวต์ EAV.
  • schemata ปรับแต่งสำหรับแอตทริบิวต์.
  • ผู้ดูแลระบบ: คุณลักษณะแบบไดนามิกทั้งหมดสามารถแสดงและแก้ไขผู้ดูแลระบบ Django ที่ไม่มีหรือความพยายามเล็ก ๆ น้อย ๆ (ใช้ eav.admin.BaseEntityAdmin) schemata สามารถแก้ไขได้แยกเป็นสามัญวัตถุแบบ Django.
  • Facets: การค้นหาแง่มุมเป็นคุณลักษณะที่สำคัญของร้านค้าออนไลน์แคตตาล็อกและอื่น ๆ โดยทั่วไปคุณจะต้องมีรูปแบบที่เป็นตัวแทนย่อยบางอย่างของรูปแบบแอตทริบิวต์กับเครื่องมือที่เหมาะสมและทางเลือกเพื่อให้ผู้ใช้สามารถเลือกค่าที่พึงประสงค์ของคุณสมบัติบางอย่างที่ส่ง รูปแบบและได้รับรายชื่อของรายการที่ตรงกัน ในกรณีทั่วไป django กรองจะทำ แต่มันจะไม่ทำงานกับ EAV ดังนั้น EAV-Django ให้ชุดที่สมบูรณ์ของเครื่องมือสำหรับการที่.

ต้องการ

  • หลาม
  • Django

ซอฟแวร์อื่น ๆ ของนักพัฒนา Andrey Mikhaylenko

Timetra
Timetra

14 Apr 15

Monk
Monk

14 May 15

ความคิดเห็นที่ EAV-Django

ความคิดเห็นที่ไม่พบ
เพิ่มความคิดเห็น
เปิดภาพ!