อนุสัญญาการตั้งชื่อสำหรับ MongoDB คืออะไร


188

มีชุดของอนุสัญญาการตั้งชื่อที่ต้องการสำหรับสิทธิ์ MongoDB เช่นฐานข้อมูล, คอลเลกชัน, ชื่อฟิลด์หรือไม่?

ฉันกำลังคิดตามบรรทัดเหล่านี้:

  • ฐานข้อมูล: ประกอบด้วยวัตถุประสงค์ (คำเป็นเอกพจน์) และลงท้ายด้วย“ db” - ตัวพิมพ์เล็กทั้งหมด: imagedb, resumedb, memberdb ฯลฯ
  • คอลเลกชัน: พหูพจน์ในกรณีที่ต่ำกว่า: รูปภาพ, ประวัติย่อ,
  • ฟิลด์เอกสาร: lowerCamelCase เช่น memberFirstName, fileName ฯลฯ

คำตอบ:


128
  1. Keep'em ระยะสั้น: การเพิ่มประสิทธิภาพการจัดเก็บข้อมูลขนาดวัตถุ , SERVER-863 โง่ แต่จริง

  2. ฉันเดาว่ากฎเดียวกับที่ใช้กับฐานข้อมูลความสัมพันธ์ควรใช้ที่นี่ และหลังจากหลายทศวรรษที่ผ่านมาก็ยังไม่มีข้อตกลงว่าควรจะตั้งชื่อตาราง RDBMS เป็นเอกพจน์หรือพหูพจน์ ...

  3. MongoDB พูดถึง JavaScript ดังนั้นใช้ประโยชน์จากการตั้งชื่อ JS ของ camelCase

  4. MongoDB กล่าวถึงเอกสารอย่างเป็นทางการว่าคุณสามารถใช้เครื่องหมายขีดล่างและมีตัวระบุในตัว_id(แต่นี่อาจเป็นเพื่อระบุว่า_idมีวัตถุประสงค์เพื่อเป็นส่วนตัวภายในไม่เคยแสดงหรือแก้ไข


95
3 และ 4 เป็นประเภทที่ขัดแย้งกัน - JS ชอบอูฐมาก ๆ Mongo ดูเหมือนจะชอบขีดเส้นใต้ ... แต่ถ้ามีข้อสงสัยให้ไปที่ขีดล่าง คนที่คุ้นเคยกับตัวอักษรที่ไม่ใช่ละตินจะขอบคุณ
Matt Zukowski

1
ดูคำถามนี้สำหรับการอภิปรายพหูพจน์ vs พหูพจน์: stackoverflow.com/questions/338156/…
Jason

4
ฉันไม่แน่ใจว่าฉันจะพูดว่า "JS ชอบ camelcase" JS เองก็ไม่ชอบ แต่ก็เป็นความจริงที่จะบอกว่าโปรแกรมเมอร์ JS ส่วนใหญ่มักจะใช้เคสอูฐ
treeface

1
@ ทรีเฟสฉันคิดว่าแมตต์อ้างถึงความจริงของวิธีการในตัวของ JS ทุกคนใช้ camelCase ทั้งในโหนดและเบราว์เซอร์
ลุคเทย์เลอร์

1
ตัวระบุในตัว_idจะขึ้นต้นด้วยเครื่องหมายขีดล่างเพื่อทำตามหลักการจาวาสคริปต์ทั่วไปซึ่งบ่งชี้ว่ากุญแจนั้นมีความหมายว่าเป็นกุญแจภายใน / ส่วนตัว กล่าวอีกนัยหนึ่ง_idคือไม่ได้มีเจตนาที่จะแก้ไขหรือนำเสนอแก่ทุกคนที่ดูข้อมูลของคอลเลกชัน
Beau Smith

58

ฐานข้อมูล

  • CamelCase
  • ผนวก DB ที่ส่วนท้ายของชื่อ
  • ทำเอกพจน์ (คอลเลกชันเป็นพหูพจน์)

MongoDB ระบุตัวอย่างที่ดี:

ในการเลือกฐานข้อมูลที่จะใช้ในเชลล์ mongo ให้ใช้คำสั่ง <dmin ตามตัวอย่างต่อไปนี้:

ใช้ myDB
ใช้ myNewDB

เนื้อหาจาก: https://docs.mongodb.com/manual/core/databases-and-collections/#databases

คอลเลกชัน

  • ชื่อตัวพิมพ์เล็ก:หลีกเลี่ยงปัญหาเรื่องความไวของชื่อชื่อคอลเลกชัน MongoDB จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

  • พหูพจน์:ชัดเจนมากขึ้นที่จะติดป้ายชุดของสิ่งที่เป็นพหูพจน์เช่น "ไฟล์" มากกว่า "ไฟล์"

  • > ไม่มีตัวคั่นคำ:หลีกเลี่ยงปัญหาที่คนอื่น (ไม่ถูกต้อง) แยกคำ (ชื่อผู้ใช้ <-> ชื่อผู้ใช้, ชื่อแรก,
    ชื่อ _- > ชื่อ) หนึ่งนี้ขึ้นสำหรับการอภิปรายตามไม่กี่คน
    รอบ ๆ ที่นี่ แต่ถ้าอาร์กิวเมนต์จะถูกแยกออกจากชื่อคอลเลกชันผมไม่คิดว่ามันควรจะเป็น;) หากคุณพบว่าตัวเองปรับปรุง
    การอ่านของชื่อคอลเลกชันของคุณโดยการเพิ่มขีดหรือ
    camelCasing คอลเลกชันของคุณ ชื่ออาจยาวเกินไปหรือควรใช้จุด
    ตามความเหมาะสมซึ่งเป็นมาตรฐานสำหรับการจัด
    หมวดหมู่การรวบรวม

  • เครื่องหมายจุดสำหรับคอลเลกชันรายละเอียดที่สูงขึ้น:ให้ข้อบ่งชี้ว่ามีความเกี่ยวข้องกับคอลเลกชัน ตัวอย่างเช่นคุณสามารถแน่ใจได้ว่าคุณสามารถลบ "users.pagevisits" ถ้าคุณลบ "users" โดยที่บุคคลที่ออกแบบ schema นั้นทำงานได้ดี

เนื้อหาจาก: http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

สำหรับคอลเลกชันฉันกำลังติดตามรูปแบบที่แนะนำเหล่านี้จนกว่าฉันจะพบเอกสารทางการของ MongoDB


25

แม้ว่าจะไม่มีการระบุข้อตกลงเกี่ยวกับเรื่องนี้การอ้างอิงด้วยตนเองจะได้รับการตั้งชื่ออย่างสม่ำเสมอหลังจากการรวบรวมที่อ้างอิงในเอกสารประกอบ Mongo สำหรับความสัมพันธ์แบบหนึ่งต่อหนึ่ง ชื่อจะตามโครงสร้าง<document>_idเสมอ

ตัวอย่างเช่นในการdogsรวบรวมเอกสารจะมีการอ้างอิงด้วยตนเองไปยังเอกสารภายนอกที่มีชื่อดังนี้:

{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

สิ่งนี้เป็นไปตามอนุสัญญา Mongo ของการตั้งชื่อ_idตัวระบุสำหรับเอกสารทุกฉบับ


1
ฉันไม่ได้พูดถึง camelCase ในคำตอบของฉันดังนั้นฉันจะใช้owner_id
danza

8

แบบแผนการตั้งชื่อสำหรับการรวบรวม

ในการตั้งชื่อการรวบรวมข้อควรระวังเล็กน้อยที่จะต้องดำเนินการ:

  1. คอลเล็กชันที่มีสตริงว่าง (“”) ไม่ใช่ชื่อคอลเล็กชันที่ถูกต้อง
  2. ชื่อคอลเลกชันไม่ควรมีตัวอักษรเป็นโมฆะเพราะจะเป็นตัวกำหนดจุดสิ้นสุดของชื่อคอลเลกชัน
  3. ชื่อคอลเลกชันไม่ควรเริ่มต้นด้วยคำนำหน้า“ ระบบ” เนื่องจากถูกสงวนไว้สำหรับการรวบรวมภายใน
  4. มันจะเป็นการดีหากไม่มีตัวอักษร“ $” ในชื่อคอลเลกชันเนื่องจากไดรเวอร์ต่าง ๆ ที่มีอยู่สำหรับฐานข้อมูลไม่รองรับ“ $” ในชื่อคอลเลกชัน

    สิ่งที่ควรคำนึงถึงในขณะที่สร้างชื่อฐานข้อมูลคือ:

  5. ฐานข้อมูลที่มีสตริงว่าง (“”) ไม่ใช่ชื่อฐานข้อมูลที่ถูกต้อง
  6. ชื่อฐานข้อมูลต้องไม่เกิน 64 ไบต์
  7. ชื่อฐานข้อมูลคำนึงถึงขนาดตัวพิมพ์แม้ว่าจะเป็นระบบไฟล์ ดังนั้นจึงเป็นการดีที่จะรักษาชื่อไว้ในตัวพิมพ์เล็ก
  8. ชื่อฐานข้อมูลไม่สามารถมีอักขระเหล่านี้“ /, \,.,“, *, <,>,:, |,?, $,” มันไม่สามารถมีช่องว่างเดียวหรือตัวละคร null

สำหรับข้อมูลเพิ่มเติม. โปรดตรวจสอบลิงค์ด้านล่าง: http://www.tutespace.com 2016/03/schema-design-and-naming-conventions-in.html


3

ฉันคิดว่ามันเป็นความชอบส่วนตัวทั้งหมด การตั้งค่าของฉันมาจากการใช้ NHibernate ใน. NET กับ SQL Server ดังนั้นพวกเขาอาจแตกต่างจากที่คนอื่นใช้

  • ฐานข้อมูล: แอปพลิเคชั่นที่ใช้อยู่ .. ex: Stackoverflow
  • คอลเลกชัน: เอกพจน์ในชื่อสิ่งที่มันจะเป็นคอลเลกชันของอดีต: คำถาม
  • เขตข้อมูลเอกสารเช่น: MemberFirstName

สุจริตมันไม่สำคัญมากนักตราบใดที่สอดคล้องกับโครงการ ไปทำงานและอย่าทำรายละเอียด: P


1
ฉันคิดว่าสิ่งที่อาจมีผลตามมาคือฟิลด์เอกสารเนื่องจากจะถูกเก็บไว้ในเอกสารแต่ละฉบับ Tomasz ชี้ให้เห็นว่าการทำให้สั้นควรประหยัดพื้นที่ / แบนด์วิดท์ ฉันคิดว่ามันสำคัญกว่าที่คุณจะใช้สิ่งที่ทำให้เข้าใจง่าย
Rex Morgan

2

จนกว่าเราจะได้รับSERVER-863ให้ตั้งชื่อฟิลด์ให้สั้นที่สุดเท่าที่จะทำได้โดยเฉพาะอย่างยิ่งในกรณีที่คุณมีบันทึกจำนวนมาก

ชื่อฟิลด์อาจมีผลกระทบอย่างมากต่อการจัดเก็บทั้งนี้ขึ้นอยู่กับกรณีการใช้งานของคุณ ไม่สามารถเข้าใจได้ว่าทำไมสิ่งนี้ถึงไม่ได้รับความสำคัญสูงกว่าสำหรับ MongoDb เนื่องจากจะส่งผลดีต่อผู้ใช้ทั้งหมด หากไม่มีสิ่งอื่นใดเราสามารถเริ่มอธิบายชื่อฟิลด์ของเราให้ละเอียดยิ่งขึ้น

กรุณาอย่าลงคะแนน


เพียงเพื่ออัปเดตผู้อ่านที่มีศักยภาพในอนาคตของคำตอบนี้ MongoDB จะบีบอัดข้อมูลในวันนี้ดังนั้นชื่อฟิลด์ที่ยาวนานจึงไม่ใช่ปัญหาอีกต่อไป
Hubro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.