ตารางการตั้งชื่อ Dilemma: ชื่อเอกพจน์และพหูพจน์ [ปิด]


1466

Academia มีชื่อตารางว่าควรเป็นเอกพจน์ของเอนทิตีที่เก็บแอตทริบิวต์ของ

ฉันไม่ชอบ T-SQL ใด ๆ ที่ต้องใช้วงเล็บเหลี่ยมรอบชื่อ แต่ฉันได้เปลี่ยนชื่อUsersตารางเป็นเอกพจน์โดยที่ไม่ได้พิจารณาตลอดเวลาโดยใช้ตารางเพื่อบางครั้งต้องใช้วงเล็บ

ความรู้สึกของลำไส้ของฉันคือมันถูกต้องมากขึ้นที่จะอยู่กับเอกพจน์ แต่ความรู้สึกของฉันก็คือว่าเครื่องหมายวงเล็บบ่งชี้ว่าไม่พึงประสงค์เช่นชื่อคอลัมน์ที่มีช่องว่างในพวกเขา ฯลฯ

ฉันควรจะอยู่หรือฉันควรจะไป?


ทำซ้ำของตารางฐานข้อมูลก่อนหน้านี้การตั้งชื่อพหูพจน์หรือเอกพจน์แต่อันนี้ได้รับความสนใจมากขึ้น
outis

7
ฉันประหลาดใจที่ผู้คนจำนวนมากไม่ได้พูด: มันถูกกำหนดโดยความหมายของแถวเดี่ยว ในฐานข้อมูลเดียวฉันอาจมีตารางที่แถวแทนหนึ่งวิดเจ็ตเดียวและอีกอันที่มีความสัมพันธ์แบบหนึ่งต่อหลายกับตารางนั้นหมายถึงแถวแสดงถึงวิดเจ็ตจำนวนมาก การไม่ทำเช่นนี้ทำให้สูญเสียความหมาย
andygavin

1
ฉันต้องการเพิ่มเข้าไปในการอภิปรายทั้งหมดเหล่านี้โปรดทราบว่าตารางไม่มีรูปร่างหรือแบบฟอร์มเหมือนกับคลาส ตารางคือชุดขององค์ประกอบประเภทเฉพาะที่สามารถเรียงลำดับสอบถาม ฯลฯ ในคุณสมบัติของแต่ละบุคคล ชั้นเรียนเป็นกรอบในการอธิบายคุณสมบัติและพฤติกรรมของประเภทเฉพาะ ในข้อกำหนดการเข้ารหัส OO การปิดการแทนตารางเป็นชุดของวัตถุ (ไม่ว่าคุณจะใช้ ORM ใด) นี่เป็นคำตอบที่อยู่ในอันดับสูงสุดของ Google ในหัวข้อนี้ดังนั้นแม้ว่าคำถามจะปิด แต่หน้านี้ก็ยังคงมีคุณค่า

1
ฉันจะไปใช้วิธีปฏิบัติทั่วไปของระบบนิเวศที่คุณกำลังทำงานอยู่ตัวอย่างเช่นใน Node.js ORMs เช่น Bookshelf.js หรือ Objection.js นั้นส่วนใหญ่ใช้ "Knex.js" และในเอกสาร "Knex.js" คุณจะพบชื่อตารางเป็นพหูพจน์ ดังนั้นฉันจะไปหาพหูพจน์ในโดเมนนั้น ที่มา: knexjs.org/#Schema-createTable
Benny Neugebauer

2
ใช่ฉันเห็นด้วย. มันสมเหตุสมผลที่จะมีตารางผู้ใช้และเรียกมันว่า "AppUser" ในเวลาเดียวกันมันก็สมเหตุสมผลที่จะมีตารางของกฏที่ใช้กับผู้ใช้บางประเภทและเรียกมันว่า "UserRules"
Arindam

คำตอบ:


242

คนอื่น ๆ ได้ให้คำตอบที่ดีพอ ๆ กับ "มาตรฐาน" ไป แต่ฉันแค่อยากจะเพิ่มสิ่งนี้ ... เป็นไปได้ไหมว่า "ผู้ใช้" (หรือ "ผู้ใช้") ไม่ใช่คำอธิบายที่สมบูรณ์ของข้อมูลที่เก็บไว้ในตาราง ? ไม่ใช่ว่าคุณควรคลั่งไคล้ชื่อตารางและความเฉพาะเจาะจง แต่บางทีบางอย่างเช่น "Widget_Users" (โดยที่ "Widget" เป็นชื่อแอปพลิเคชันหรือเว็บไซต์ของคุณ) จะเหมาะสมกว่า


7
ฉันเห็นด้วย. OrgUsers, AppUsers ทุกอย่างที่ควรหลีกเลี่ยงการใช้คำสำคัญ
MikeW

7
-1 ผู้ใช้งานตาราง (และประเทศ, ภาษา) สามารถใช้งานได้พร้อมกัน
OZ_

129
จะไม่เชื่อมโยงชื่อสคีจะลบความสับสนทั้งหมดหรือไม่ AppName1.Users, AppName2.Users?
Zo มี

7
ฉันไม่เห็นด้วยกับคำนำหน้าตาราง - นั่นอาจจะเป็นสคี? - แต่ฉันเห็นด้วยกับ "ชื่อที่มีความหมายมากกว่า" แม้แต่บางสิ่งที่ง่ายเหมือน "AppUser" ก็เพียงพอแล้วโดยไม่ต้องป้อนการอภิปรายของเนมสเปซทั้งหมด

7
คำตอบที่ได้รับการยอมรับนี้เป็นมากกว่าความคิดเห็นด้านข้างและไม่ตอบคำถาม
Viliami

1824

ฉันมีคำถามเดียวกันและหลังจากอ่านคำตอบทั้งหมดที่นี่ฉันอยู่กับ SINGULAR แน่นอนเหตุผล:

เหตุผลที่ 1 (แนวคิด) คุณสามารถนึกถึงกระเป๋าที่มีแอปเปิ้ลเช่น "AppleBag" มันไม่สำคัญว่าจะมีแอปเปิ้ล 0, 1 หรือล้านมันเป็นถุงเดียวกันเสมอ ตารางเป็นเพียงคอนเทนเนอร์ชื่อตารางจะต้องอธิบายสิ่งที่มีอยู่ไม่ใช่ข้อมูลที่มีอยู่ นอกจากนี้แนวความคิดพหูพจน์นั้นเกี่ยวกับภาษาพูดมากกว่าหนึ่งภาษา (ที่จริงแล้วเพื่อพิจารณาว่ามีอย่างน้อยหนึ่งภาษา)

เหตุผลที่ 2 (สะดวก) มันง่ายกว่าที่จะออกมาด้วยชื่อเอกพจน์มากกว่าชื่อพหูพจน์ วัตถุสามารถมีพหูพจน์ผิดปกติหรือไม่เป็นพหูพจน์ แต่จะมีเอกพจน์หนึ่งเสมอ (มีข้อยกเว้นเล็กน้อยเช่นข่าว)

  • ลูกค้า
  • ใบสั่ง
  • ผู้ใช้งาน
  • สถานะ
  • ข่าว

เหตุผลที่ 3 ความงามและระเบียบ. พิเศษในสถานการณ์จำลองรายละเอียดหลักซึ่งจะอ่านได้ดีขึ้นจัดเรียงที่ดีขึ้นตามชื่อและมีลำดับตรรกะมากขึ้น (Master แรกรายละเอียดที่สอง):

  • 1.Order
  • 2.OrderDetail

เปรียบเทียบกับ:

  • 1.OrderDetails
  • 2.Orders

เหตุผลที่ 4 (ความเรียบง่าย) รวบรวมทั้งหมดชื่อตารางคีย์หลักความสัมพันธ์คลาสเอนทิตี ... ดีกว่าที่จะทราบเพียงชื่อเดียว (เอกพจน์) แทนสอง (คลาสเอกพจน์ตารางพหูพจน์ฟิลด์เอกพจน์เอกพจน์พหูพจน์หลัก .. .)

  • Customer
  • Customer.CustomerID
  • CustomerAddress
  • public Class Customer {...}
  • SELECT FROM Customer WHERE CustomerID = 100

เมื่อคุณรู้ว่าคุณกำลังติดต่อกับ "ลูกค้า" คุณสามารถมั่นใจได้ว่าคุณจะใช้คำเดียวกันสำหรับความต้องการฐานข้อมูลทั้งหมดของคุณ

เหตุผล 5 (โลกาภิวัตน์). โลกกำลังเล็กลงคุณอาจมีทีมจากหลายเชื้อชาติไม่ใช่ทุกคนที่มีภาษาอังกฤษเป็นภาษาแม่ การเขียนโปรแกรมภาษาที่ไม่ใช่เจ้าของภาษาจะง่ายกว่าหากคิดว่า "Repository" มากกว่า "Repositories" หรือ "Status" แทนที่จะเป็น "Status" การมีชื่อเอกเทศสามารถนำไปสู่ข้อผิดพลาดน้อยลงที่เกิดจากการพิมพ์ผิดประหยัดเวลาโดยไม่ต้องคิดว่า "มันคือเด็กหรือเด็ก?" ดังนั้นการปรับปรุงประสิทธิภาพการทำงาน

เหตุผลที่ 6 (ทำไมจะไม่ล่ะ?). มันยังช่วยให้คุณประหยัดเวลาในการเขียนประหยัดพื้นที่ดิสก์และทำให้แป้นพิมพ์คอมพิวเตอร์ของคุณใช้งานได้นานขึ้น!

  • SELECT Customer.CustomerName FROM Customer WHERE Customer.CustomerID = 100
  • SELECT Customers.CustomerName FROM Customers WHERE Customers.CustomerID = 100

คุณได้บันทึกจดหมาย 3 ฉบับ, 3 ไบต์, แป้นพิมพ์พิเศษอีก 3 ครั้ง :)

และในที่สุดคุณสามารถตั้งชื่อคนที่ยุ่งกับชื่อที่สงวนไว้เช่น:

  • ผู้ใช้> ล็อกอินผู้ใช้, แอปผู้ใช้, ผู้ใช้ระบบ, CMSUser, ...

หรือใช้วงเล็บเหลี่ยมที่น่าอับอาย [ผู้ใช้]


625
ฉันจะเดิมพันถ้าคุณใส่ป้ายกำกับไว้ในลิ้นชักใส่ถุงเท้าที่คุณเรียกว่า "ถุงเท้า"
Chris Ward

73
Definetelly เป็นการยากที่จะได้มาตรฐานเดียวที่เหมาะกับทุกคนและสำหรับทุกคนสิ่งสำคัญคือสิ่งที่เหมาะกับคุณ มันใช้งานได้สำหรับฉันและที่นี่ฉันได้อธิบายว่าทำไม แต่อีกครั้งนั่นคือสำหรับฉันและฉันคิดว่ามันสะดวกมาก
Nestor

451
คริสคำถามที่ใหญ่กว่าคือทำไมคุณจะทำตามอนุสัญญาการตั้งชื่อฐานข้อมูลเมื่อตั้งชื่อ sock drawer?
Kyle Clegg

83
คำตอบนี้ต้องการการสรรเสริญมากขึ้น มันพูดถึงเหตุผลเชิงปฏิบัติหลายอย่างที่ฉันใช้กับสาเหตุที่ฉันชอบชื่อเอกพจน์ การอภิปรายทางเลือกเกี่ยวกับภาษาที่เหมาะสมในการอ้างอิงถึงชุดเป็นเพียงปรัชญาและปิดบังจุดที่แท้จริง เอกพจน์ทำงานได้ดีขึ้น
Jason

298
ฉันมีลิ้นชัก "ถุงเท้า" ที่บ้านไม่ใช่ลิ้นชัก "ถุงเท้า" ถ้าเป็นฐานข้อมูลฉันจะเรียกมันว่าตาราง "ถุงเท้า"
jlembke

260

ถ้าคุณใช้วัตถุเครื่องมือการทำแผนที่เชิงสัมพันธ์หรือความประสงค์ในอนาคตผมขอแนะนำเอกพจน์

เครื่องมือบางอย่างเช่น LLBLGen สามารถแก้ไขชื่อพหูพจน์โดยอัตโนมัติเช่นผู้ใช้เป็นผู้ใช้โดยไม่ต้องเปลี่ยนชื่อตารางเอง เหตุใดเรื่องนี้ เพราะเมื่อมันถูกแมปคุณต้องการให้มันดูเหมือน User.Name แทน Users.Name หรือที่แย่กว่านั้นจากตารางฐานข้อมูลเก่าบางอันของฉันที่ตั้งชื่อ tblUsers.strName ซึ่งเพิ่งสับสนในโค้ด

กฎใหม่ของฉันคือการตัดสินว่ามันจะดูอย่างไรเมื่อมันถูกแปลงเป็นวัตถุ

หนึ่งตารางที่ฉันพบว่าไม่ตรงกับชื่อใหม่ที่ฉันใช้คือ UsersInRoles แต่จะมีข้อยกเว้นบางประการอยู่เสมอและแม้ในกรณีนี้มันก็ดูดีเป็น UsersInRoles.Username


48
ฉันโหวตแล้วฉันจะบอกคุณว่าทำไมเพราะฉันไม่เห็นด้วย ORM โดยธรรมชาติแล้วมันเกี่ยวกับการทำแผนที่ เครื่องมือ ORM ทุกตัวที่ฉันเคยใช้สนับสนุนระบุชื่อตารางที่จะใช้สำหรับเอนทิตีเมื่อมันแตกต่างจากชื่อเอนทิตี นี่เป็นสิ่งสำคัญเนื่องจากเหตุผลทั้งหมดที่เราแมปไปยังฐานข้อมูลเชิงสัมพันธ์คือเพื่อให้เราสามารถสร้างคิวรีและรายงานที่มีรูปร่างต่างกันได้ง่ายกว่าโมเดลวัตถุของเรา มิฉะนั้นเราทุกคนจะใช้ฐานข้อมูล object / document ในตอนนี้
joshperry

25
ORM ไม่ควรกำหนดชื่อของวัตถุที่พวกเขาจับคู่กับ จุดของ ORM คือสิ่งที่เป็นนามธรรมของวัตถุที่ให้ความยืดหยุ่นนี้
barrypicker

19
ในโลกของฉันฉันพยายามใช้ชื่อที่สอดคล้องกันในโครงการทั้งหมดเพื่อหลีกเลี่ยงการเสียเวลาสงสัยว่ากรณีนี้มี s ที่สิ้นสุดหรือไม่ ความจริงที่ว่าออมสามารถเปลี่ยนชื่อและเป็นอิสระไม่ได้หมายความว่าการทำเช่นนั้นจะช่วยให้นักพัฒนาเพื่อนของคุณ
John Nicholas

2
ORM บางตัว (เช่นเครื่องมือการเขียนโปรแกรมจำนวนมาก) มีพฤติกรรมเริ่มต้นที่สร้างการใช้งานโดยไม่มีการกำหนดค่า ... โดยมีจุดขายของ PRODUCTIVITY ดังนั้นการสร้างคลาส Employee โดยไม่มีการแมปที่ชัดเจนจะสร้างตาราง Employee โดยค่าเริ่มต้น
user919426

1
@barrypicker ชื่อพหูพจน์ไม่เพียง แต่ดูโง่ในรหัส ORM พหูพจน์ดูไม่ดีใน SQL เช่นกันโดยเฉพาะเมื่ออ้างถึงแอตทริบิวต์ที่ไม่ซ้ำกัน ใครไม่เคยเขียนเลือก user.id จากผู้ใช้? หรืออาจ ... จากผู้ใช้ออกจากการเข้าร่วมใน thingy.user_id = user.id ... ?
ซามูเอลแดเนียล

219

ฉันชอบที่จะใช้คำนามที่ไม่ถูกหักล้างซึ่งเป็นภาษาอังกฤษจะเป็นเอกพจน์

การผันจำนวนชื่อตารางทำให้เกิดปัญหาออโธกราฟฟิค (เป็นคำตอบอื่น ๆ ที่แสดง) แต่การเลือกที่จะทำเช่นนั้นเพราะตารางมักจะมีหลายแถวก็เต็มไปด้วยความหมายของรู สิ่งนี้ชัดเจนมากขึ้นถ้าเราพิจารณาภาษาที่ผันคำนามตามกรณี (มากที่สุด):

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

การใช้คำนามที่ไม่ถูกรบกวนนั้นง่ายตรรกะปกติและเป็นอิสระจากภาษา


37
อาจเป็นข้อโต้แย้งที่สมเหตุสมผลที่สุดในเรื่องนี้ที่ฉันเคยเห็นและทำให้ฉันดีใจที่ฉันใช้เวลานั้นเป็นภาษาละติน +1 แน่นอน

52
ฉันต้องการคำศัพท์ที่ชัดเจนอย่างชัดเจน
TJ Biddle

19
+1 ดูสินี่เป็นคำตอบที่อินเทอร์เน็ตต้องการมากขึ้น พิสูจน์ไร้ที่ติโดยใช้คำศัพท์มากมายเพื่อดำเนินการตรรกะที่สมบูรณ์แบบ
OCDev

8
ฉันจะจดบันทึกในครั้งต่อไปที่ฉันเขียนโปรแกรมเป็นภาษาละติน ในขณะเดียวกันผู้ใช้จะเข้าสู่ตารางผู้ใช้และลูกค้าลงในตารางลูกค้า
Caltor

8
เชื่อมั่น - ไม่ถูกละเมิดมันเป็น น่าสนใจที่จะเห็นว่าหลังจากตลอดเวลานี้ตัวเลือกยอดนิยมของ "เอกพจน์" และ "พหูพจน์" นั้นผิดทั้งคู่ !
จวร์ต

126

การประชุมแบบใดที่ตารางนั้นต้องการชื่อเอกพจน์? ฉันมักจะคิดว่ามันเป็นชื่อพหูพจน์

ผู้ใช้ถูกเพิ่มลงในตารางผู้ใช้

เว็บไซต์นี้เห็นด้วย:
http://vyaskn.tripod.com/object_naming.htm#Tables

เว็บไซต์นี้ไม่เห็นด้วย (แต่ฉันไม่เห็นด้วยกับมัน):
http://justinsomnia.org/writings/naming_conventions.html


ดังที่คนอื่น ๆ พูดถึง: นี่เป็นเพียงแนวทาง เลือกการประชุมที่เหมาะกับคุณและ บริษัท / โครงการของคุณและทำตามนั้น การสลับระหว่างคำเอกพจน์และพหูพจน์หรือคำย่อบางครั้งและบางครั้งก็ไม่ทำให้รุนแรงขึ้นอีก


46
เมื่อใช้ทฤษฎีเซตกับตารางอินสแตนซ์ใด ๆ ในชุดนั้นเป็นตัวแทนของชุดดังนั้น Apple จึงเป็นชุดของ Apple มันไม่เชื่อในจำนวนแอปเปิ้ลที่อยู่ในชุด - เป็นแอปเปิ้ลที่มีอินสแตนซ์จำนวนมาก แอปเปิ้ล 'กระเป๋า' ไม่ได้กลายเป็น 'กระเป๋า' เมื่อมีแอปเปิ้ลจำนวนมาก
ProfK

89
ถ้าคุณมีกระเป๋าที่มีแอปเปิ้ล 5 ตัวอยู่ข้างใน? คุณเรียกมันว่าถุงแอปเปิ้ลหรือไม่? หรือถุงแอปเปิ้ล
Christopher Mahan

26
ฉันคิดว่าทฤษฏีน่าจะเป็นชุดที่ชื่อว่าแอปเปิ้ล แอปเปิ้ลเอกพจน์ยังคงเป็น "ชุดของแอปเปิ้ล" - แม้ว่าชุดที่มีอินสแตนซ์เดียว แอปเปิ้ลหลายตัวยังเป็น "ชุดแอปเปิ้ล"
มาร์ค Brackett

26
@ คริสโตเฟอร์ถ้า raison d'êtreของกระเป๋าถือแอปเปิ้ลและแอปเปิ้ลเท่านั้นมันเป็น "ถุงแอปเปิ้ล" โดยไม่คำนึงว่ามันมีแอปเปิ้ล 1 แอปเปิ้ล 100 แอปเปิ้ลหรือไม่
Ian Mackinnon

14
@ Ian: นั่นเป็นเพราะตารางทั่วไปและสามารถนำไปเปรียบเทียบกับตู้คอนเทนเนอร์ขนส่งได้ (สามารถบรรจุได้เกือบทุกอย่างตั้งแต่ลังแอปเปิ้ลไปจนถึงลังของรถจักรยานยนต์ Harley Davidson) คุณพูดว่า: ตู้สินค้าสีส้มไม่ใช่ตู้สินค้าสีส้ม คุณพูดว่า: ตู้สินค้าของชิ้นส่วนรถยนต์ไม่ใช่ตู้สินค้าชิ้นส่วนรถยนต์ หากคุณสร้างโครงสร้างข้อมูลที่กำหนดเองนั้นหมายถึงเก็บเฉพาะประเภทข้อมูลที่เฉพาะเจาะจงเช่นชื่อแอปเปิ้ลและคุณตั้งชื่อมันว่า "kungabogo" คุณก็จะได้แอปเปิ้ลกังฟูโกะ ฉันรู้ว่าสิ่งที่คุณคิด แต่คิดแรกของถุงและเข้าใจความแตกต่างในความหมาย
Christopher Mahan

79

วิธีการเกี่ยวกับเรื่องนี้เป็นตัวอย่างง่ายๆ:

SELECT Customer.Name, Customer.Address FROM Customer WHERE Customer.Name > "def"

เมื่อเทียบกับ

SELECT Customers.Name, Customers.Address FROM Customers WHERE Customers.Name > "def"

SQL ในตอนหลังเป็นคนแปลกหน้าที่ทำให้เกิดเสียงมากกว่าในอดีต

การลงคะแนนเสียงสำหรับฉันเอกพจน์


50
ในตัวอย่างนั้นใช่ แต่ในทางปฏิบัติ sql มันจะไม่ถูกเขียนด้วยวิธีนั้น คุณมีชื่อแทนตารางดังนั้นมันจึงเป็นเช่นนั้นมากขึ้นSELECT C.Name, C.Address FROM Customers WHERE Customers.Name > 'def'
Michael Haren

+1, (อีกหนึ่งปีต่อมา) คุณอ้างถึงตัวอย่างของดินแดนที่ว่าเอกพจน์มีเหตุผลอย่างไร นี่เป็นการถกเถียงทางศาสนา ฉันถูกเปลี่ยนเป็นเอกพจน์เมื่อหลายปีก่อนโดยสถาปนิกข้อมูลเมื่อหลายปีก่อนและฉันรู้สึกว่าถูกต้องสำหรับฉัน
Chris Adragna

24
ฉันคิดว่า sql ฟังดีกว่าพหูพจน์ คุณจะไม่มีชื่อตารางสำหรับแต่ละคอลัมน์ทำไมคุณถึงชอบพิมพ์มาก เลือกชื่อ, ที่อยู่จากลูกค้า WHERE Name> "def" คุณกำลังเลือกจากกลุ่มลูกค้าที่มีชื่อมากกว่านั้น
Jamiegs

6
วิธีการเกี่ยวกับการใช้นามแฝง / AS เพื่อแก้ไขปัญหาหนึ่งนั้น เลือกลูกค้าชื่อลูกค้าที่อยู่จากลูกค้าตามที่ลูกค้าชื่อลูกค้า> "def"
James Hughes

1
คนที่สองฟังดูดีกว่ามากฟังดูเหมือนคนที่ไม่สามารถพูดภาษาอังกฤษได้
HLGEM

61

ฉันเชื่ออย่างแน่วแน่ว่าในแผนภาพความสัมพันธ์เอนทิตีเอนทิตี้ของควรสะท้อนด้วยชื่อเอกพจน์คล้ายกับชื่อคลาสที่เป็นเอกพจน์ เมื่อสร้างอินสแตนซ์ชื่อจะแสดงอินสแตนซ์ของมัน ดังนั้นเมื่อมีฐานข้อมูลแล้วเอนทิตีเมื่อจัดทำเป็นตาราง (ชุดของเอนทิตีหรือเรคคอร์ด) จะเป็นพหูพจน์ เอนทิตี, ผู้ใช้ถูกทำให้เป็นผู้ใช้บนโต๊ะ ฉันจะเห็นด้วยกับคนอื่น ๆ ที่แนะนำว่าชื่อผู้ใช้อาจได้รับการปรับปรุงให้เป็นพนักงานหรือสิ่งที่เกี่ยวข้องกับสถานการณ์ของคุณ

สิ่งนี้เหมาะสมกว่าในคำสั่ง SQL เนื่องจากคุณเลือกจากกลุ่มของเร็กคอร์ดและถ้าชื่อตารางเป็นเอกพจน์จะไม่สามารถอ่านได้ดี


3
ฉันชอบความคิดเห็นคำสั่ง SQL โดยเฉพาะอย่างยิ่ง การใช้เอกพจน์ที่นี่ไม่ได้ทำให้ผู้อ่านรู้สึกได้ง่าย
hochl

2
จุดที่ยอดเยี่ยมเกี่ยวกับ ERD ฉันสงสัยว่านี่คือเหตุผลว่าทำไมสำหรับคนที่เห็นโลกผ่านสายตาของ DBA การตั้งชื่อเอกพจน์นั้นสมเหตุสมผล ฉันสงสัยว่าพวกเขาไม่ได้รับตามที่คุณชี้ให้เห็นความแตกต่างระหว่างเอนทิตีและกลุ่มของพวกเขา
William T. Mallard

1
ตารางไม่ใช่ชุดของระเบียน ตารางคือคำจำกัดความของบันทึกที่มีลักษณะ นั่นคือการปลดการเชื่อมต่อทั้งหมดของกลุ่มพหูพจน์ / เอกพจน์ที่ดูเหมือนจะมี
รวย remer

ฉันไม่เห็นด้วยกับความคิดเห็นคำสั่ง SQL จะเป็นอย่างไรถ้าคุณต้องการเข้าร่วมกับผู้ใช้งานรหัส
hashtable

1
หนึ่ง old_lady มีแมวจำนวนมากหรือ old_ladies มีแมว ฉันคิดว่า ERD อ่านดีกว่าว่าเป็นพหูพจน์ และตารางเอนทิตี้ของตารางมีเอนทิตีจำนวนมากดังนั้นฉันคิดว่าพหูพจน์ฟังดูดี
user3121518

39

ฉันติดกับเอกพจน์สำหรับชื่อตารางและเอนทิตีการเขียนโปรแกรมใด ๆ

เหตุผล? ความจริงที่ว่ามีพหูพจน์ผิดปกติในภาษาอังกฤษเช่นหนู mouse หนูและแกะ . จากนั้นถ้าฉันต้องการคอลเลคชั่นฉันแค่ใช้mousesหรือsheepsแล้วไปต่อ

มันช่วยให้ส่วนใหญ่โดดเด่นและฉันสามารถกำหนดได้อย่างง่ายดายและเป็นทางการว่าชุดของสิ่งต่าง ๆ จะเป็นอย่างไร

ดังนั้นกฎของฉันคือทุกอย่างเป็นเอกพจน์คอลเลกชันของสิ่งที่ทุกคนเป็นเอกพจน์กับsต่อท้าย ช่วยด้วย ORM ด้วย


7
คำที่ลงท้ายด้วย 's' คืออะไร หากคุณมีตารางที่เรียกว่า 'ข่าว' (เช่นเดียวกับตัวอย่าง) คุณจะเรียกชื่อคอลเลกชันของข่าวว่าอะไร Newss? หรือคุณจะเรียกตาราง 'ใหม่'
แอนโทนี่

18
ฉันจะเรียก NewsItem ตารางและคอลเลกชัน NewsItems
เครื่อง Ash

5
ถ้าคุณต้องตรวจการสะกดรหัสทั้งหมดไม่เช่นนั้นจะไม่รวบรวม;)
Hamish Grubijan

2
ORM ไม่ควรกำหนดชื่อของวัตถุที่พวกเขาจับคู่กับ จุดของ ORM คือสิ่งที่เป็นนามธรรมของวัตถุที่ให้ความยืดหยุ่นนี้
barrypicker

16
@ HamishGrubijan จากนั้นหยุดใช้ Word เพื่อเขียนรหัสของคุณ! ;)
Valentino Vranken

36

IMHO ชื่อตารางควรเป็นพหูพจน์เช่นลูกค้า

ชื่อคลาสควรเป็นแบบเอกพจน์เช่นเดียวกับลูกค้าหากเชื่อมโยงกับแถวในตารางลูกค้า


33

เอกพจน์. ฉันไม่ได้ซื้อข้อโต้แย้งใด ๆ ที่เกี่ยวข้องซึ่งมีเหตุผลที่สุด - ทุกคนคิดว่าการตั้งค่าของเขาเองนั้นสมเหตุสมผลที่สุด ไม่ว่าคุณจะทำอะไรเป็นระเบียบเพียงแค่เลือกการประชุมและทำตาม เรากำลังพยายามแมปภาษาที่มีไวยากรณ์และซีแมนทิกส์ที่ผิดปกติอย่างมาก (ภาษาพูดปกติและภาษาเขียน) เป็นไวยากรณ์ (SQL) ปกติที่มีความหมายเฉพาะมาก

เหตุผลหลักของฉันคือฉันไม่คิดว่าตารางเป็นเซต แต่เป็นความสัมพันธ์

ดังนั้นAppUserความสัมพันธ์บอกว่าหน่วยงานAppUsersใด

AppUserGroupความสัมพันธ์บอกฉันซึ่งเป็นหน่วยงานที่AppUserGroups

AppUser_AppUserGroupความสัมพันธ์บอกฉันว่าAppUsersและAppUserGroupsที่เกี่ยวข้อง

AppUserGroup_AppUserGroupความสัมพันธ์บอกฉันว่าAppUserGroupsและAppUserGroupsที่เกี่ยวข้อง (เช่นกลุ่มสมาชิกในกลุ่ม)

กล่าวอีกนัยหนึ่งเมื่อฉันคิดถึงหน่วยงานและความสัมพันธ์ฉันคิดว่าความสัมพันธ์เป็นเอกพจน์ แต่แน่นอนเมื่อฉันคิดถึงหน่วยงานในคอลเล็กชั่นหรือชุดคอลเลกชันหรือชุดเป็นพหูพจน์

ในรหัสของฉันจากนั้นและในสคีมาฐานข้อมูลฉันใช้เอกพจน์ ในคำอธิบายเกี่ยวกับใจฉันฉันใช้พหูพจน์เพื่อเพิ่มความสามารถในการอ่านจากนั้นใช้ฟอนต์ ฯลฯ เพื่อแยกความแตกต่างของชื่อตาราง / ความสัมพันธ์

ฉันชอบที่จะคิดว่ามันยุ่ง แต่เป็นระบบ - และด้วยวิธีนี้มักจะมีชื่อที่สร้างขึ้นอย่างเป็นระบบสำหรับความสัมพันธ์ที่ฉันต้องการแสดงออกซึ่งสำหรับฉันนั้นสำคัญมาก


1
อย่างแน่นอน สิ่งสำคัญที่หลายคนไม่ทราบที่นี่คือสิ่งที่พวกเขาตั้งชื่อ ... คุณกำลังให้ชื่อกับความสัมพันธ์ (ระเบียนเดียวในตาราง) ไม่ใช่ชุดของระเบียนในตาราง
Alexandre Martini

3
ไม่สามารถเห็นด้วยมากขึ้น 'เลือก * จากผู้ใช้ที่ชื่อเช่น' J% '' เพราะฉันกำลังเลือกผู้ใช้ทั้งหมดที่ชื่อขึ้นต้นด้วย 'J' หากอาร์กิวเมนต์ของคุณคือคุณต้องการเขียน '... โดยที่ชื่อผู้ใช้เช่น ... ' ให้ใช้นามแฝง เหตุผลเดียวกันที่ฉันพูดว่า 'ให้ถุงเท้าจากถุงเท้าที่มีอยู่ทั้งหมดให้ฉัน'
Mark A. Donohoe

ถ้าฉันเป็นเช่นนั้นโดยเฉพาะชื่อตารางของฉันจะเป็น sock_pair
Manuel Hernandez

@AlexandreMartini ตรงทั้งหมด เหมือนบางคนที่เรียกเร็กคอร์ดเดียวในตาราง "ความสัมพันธ์"
Nuno André

31

ฉันจะไปด้วยพหูพจน์และด้วยความลำบากใจผู้ใช้ดังกล่าวเราจะใช้วิธีการถ่ายคร่อมตาราง

เราทำเช่นนี้เพื่อให้ความสม่ำเสมอระหว่างสถาปัตยกรรมฐานข้อมูลและสถาปัตยกรรมแอปพลิเคชันด้วยความเข้าใจพื้นฐานว่าตารางผู้ใช้เป็นชุดของค่าผู้ใช้มากเท่ากับคอลเลกชันผู้ใช้ในสิ่งประดิษฐ์รหัสคือชุดของวัตถุผู้ใช้

การมีทีมข้อมูลของเราและนักพัฒนาของเราพูดภาษาแนวคิดเดียวกัน (แม้ว่าจะไม่ใช่ชื่อวัตถุเดียวกันเสมอ) ทำให้การสื่อความคิดระหว่างกันง่ายขึ้น


8
ฉันยอมรับ .. ทำไมความไม่สอดคล้องระหว่างรหัสและที่เก็บข้อมูล? ฉันจะไม่ตั้งชื่อชุดของวัตถุผู้ใช้ "ผู้ใช้" ในรหัส ... ดังนั้นทำไมฉันจะเรียกตารางที่? มันไม่มีเหตุผล เมื่อฉันอ่านข้อโต้แย้งข้างต้นเกี่ยวกับเรื่องนี้พวกเขามุ่งความสนใจไปที่เอนทิตี้ไม่ใช่ตาราง ... มีความแตกต่างระหว่างอะไรในตารางมากกว่าตารางในใจของฉัน
Jason

คุณจัดการกับชื่อตารางอย่างไรcompaniesที่ตารางอื่นมีเขตข้อมูลอ้างอิงที่เรียกว่าcompany_idอย่างไร ในขณะที่สะกดถูกต้องดูเหมือนว่าไม่สอดคล้องกันสำหรับผู้ที่จู้จี้จุกจิกเกี่ยวกับแบบแผนการตั้งชื่อตาราง
Jake Wilson

1
โดยการจดจำว่าเอกพจน์ของcompaniesis companyและ id นี้เป็นการอ้างอิงถึงไอเท็มเอกพจน์ มันไม่ควรรบกวนเราในรหัสใด ๆ มากกว่ามันรบกวนเราในภาษาอังกฤษ
David

22

ฉันชอบที่จะใช้ชื่อพหูพจน์เพื่อเป็นตัวแทนของชุดมันแค่ "ฟัง" เพื่อจิตใจที่ดีของฉัน

ในขณะนี้ฉันกำลังใช้ชื่อเอกพจน์เพื่อกำหนดรูปแบบข้อมูลสำหรับ บริษัท ของฉันเพราะคนส่วนใหญ่ในที่ทำงานรู้สึกสะดวกสบายขึ้น บางครั้งคุณก็ต้องทำให้ทุกคนในชีวิตง่ายขึ้นแทนที่จะตั้งค่าความชอบส่วนตัวของคุณ (นั่นเป็นวิธีที่ฉันลงเอยในหัวข้อนี้เพื่อรับการยืนยันในสิ่งที่ควรเป็น "วิธีปฏิบัติที่ดีที่สุด" สำหรับตารางการตั้งชื่อ)

หลังจากอ่านการโต้เถียงทั้งหมดในหัวข้อนี้ฉันถึงข้อสรุปหนึ่ง:

ฉันชอบแพนเค้กกับน้ำผึ้งไม่ว่าจะเป็นรสชาติที่ทุกคนชื่นชอบก็ตาม แต่ถ้าฉันทำอาหารเพื่อคนอื่นฉันจะพยายามให้บริการสิ่งที่พวกเขาชอบ


ไม่ควรใช้การประชุมในโลกจำลองเชิงสัมพันธ์โดยเฉพาะอย่างยิ่งเมื่อคุณอธิบายความสัมพันธ์ระหว่างวัตถุเช่น "แต่ละทีมอาจมีโค้ชหลักเพียงคนเดียวและโค้ชรองหลายคน" ซึ่งอธิบายไว้: ทีม -> MainCoach ทีม - >> SecondaryCoach
noonex

16

เอกพจน์. ฉันจะเรียกอาร์เรย์ที่มีกลุ่มผู้ใช้แถวแทนวัตถุ 'users' แต่ตารางคือ 'ตารางผู้ใช้' การคิดว่าตารางเป็นอะไร แต่ชุดของแถวที่มีอยู่นั้นผิด IMO; ตารางเป็นข้อมูลเมตาและชุดของแถวนั้นมีการแนบแบบลำดับชั้นกับตารางไม่ใช่ตารางตัวเอง

แน่นอนว่าฉันใช้ ORM ตลอดเวลาและช่วยให้รหัส ORM ที่เขียนด้วยชื่อตารางพหูพจน์ดูเหมือนโง่


ฉันเดาว่าสำหรับตัวเขาแต่ละคน ตารางฐานข้อมูลเชิงสัมพันธ์คือการกำหนดหัวเรื่อง (เช่นข้อมูลเมตาที่ตั้งชื่อแอตทริบิวต์) และชุดของ tuples ที่ตรงกับส่วนหัว คุณสามารถมุ่งเน้นไปที่ข้อมูลเมตาในขณะที่คนอื่น ๆ มุ่งเน้นไปที่ tuples :-)
Bill Karwin

สวัสดี User_Table เป็นชื่อที่ฉันชอบ! :)
Camilo Martin

3
ORM ไม่ควรกำหนดชื่อของวัตถุที่พวกเขาจับคู่กับ จุดของ ORM คือสิ่งที่เป็นนามธรรมของวัตถุที่ให้ความยืดหยุ่นนี้
barrypicker

1
ฉันดูมันด้วยวิธีนี้ .. ถ้าคุณสร้างอาร์เรย์ / รายการ / พจนานุกรมของอะไรก็ได้ในรหัสเดิมพันของฉันคือคุณตั้งชื่อมันด้วยชื่อพหูพจน์ของสิ่งที่มันถือ หากคุณใช้ ORM เพื่อทำให้ฐานข้อมูลของคุณเป็นนามธรรมตารางจะถูกแสดงด้วยคอลเลกชันบางประเภทดังนั้นทำไมคุณจึงปฏิบัติกับพวกเขาแตกต่างกันอย่างไร ในการใช้ชื่อเอกพจน์อาจฟังดูดี แต่คุณมักจะต่อสู้กับสัญชาตญาณของคุณเสมอว่าตารางนั้นมีสิ่งเดียวกันหลายอย่างเช่นเดียวกับคอลเลกชันในรหัส ทำไมความไม่ลงรอยกัน?
Jason

@ สัน: โปรดเปรียบเทียบและเปรียบทางสิ่งเหล่านี้อ่าน: 1) $db->user->row(27), $db->product->rows->where(something) 2) ,$db->users->row(27) $db->products->rows->where(something)
ความสับสนวุ่นวาย

16

ฉันคิดเสมอว่ามันเป็นวิธีการที่นิยมใช้ชื่อตารางจำนวนมาก จนถึงจุดนี้ฉันใช้พหูพจน์เสมอ

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

ตารางของรถยนต์จะมีชื่อรถยนต์และแต่ละแถวเป็นรถยนต์ ฉันจะยอมรับว่าการระบุตารางพร้อมกับฟิลด์ในtable.fieldลักษณะที่เป็นแนวปฏิบัติที่ดีที่สุดและการมีชื่อตารางเอกพจน์นั้นสามารถอ่านได้มากขึ้น อย่างไรก็ตามในสองตัวอย่างต่อไปนี้อดีตทำให้มีเหตุผลมากขึ้น:

SELECT * FROM cars WHERE color='blue'
SELECT * FROM car WHERE color='blue'

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


9
นี่ไม่ใช่การประชุมใน RoR ด้วยใช่ไหม ชื่อพหูพจน์สำหรับตารางและเอกพจน์สำหรับชั้นเรียน ORM? ทำให้รู้สึกมากกับฉัน ตารางเรียกว่า "รถยนต์" เพราะมันมี "รถยนต์" หลายอย่างและคลาสเรียกว่า "รถยนต์" เพราะมันจะมีรถยนต์หนึ่งคัน !!
30297 Sap

@Sap การแก้ไขเล็กน้อยในส่วนหลังของประโยคของคุณ - คลาส "รถยนต์" เป็นบทคัดย่อ DataType ที่แสดงถึงรถยนต์ในชีวิตจริง ไม่ว่ามันจะเก็บหนึ่งอินสแตนซ์หรือทวีคูณขึ้นอยู่กับวิธีการใช้งาน
asgs

ให้เผชิญหน้ากับมันตารางcarเป็นคำจำกัดความของโครงสร้างของรถคันเดียว ถ้าคุณดูที่โครงสร้างของตารางมันจะคายออกมาโดยทั่วไป "id int, color string ฯลฯ " นอกจากนี้: คุณมีโต๊ะcar_vendor(หรือสำหรับเวอร์ชั่นพหูพจน์ของคุณcars_vendor) ด้วยคีย์ต่างประเทศcars_id! อึโง่นั่นคืออะไร? มันเป็นcar_id ความจำเป็นที่จะทำให้ผมคิดว่าไม่มี ฉันชอบเป็นเอกพจน์อย่างยิ่ง
Toskan

4
ฉันชอบคำตอบนี้จริงๆ! ให้ฉันอธิบาย หากคอลเลกชันนี้เป็นcarและคุณต้องการทุกอย่างจากcarที่เป็นผลที่ควรจะเป็นสิ่งที่ชอบblue tire, mirror, engineและจากนั้นก็จะได้รับความสับสนเพราะผลทั้งหมดที่มีจากparts carดังนั้นชื่อตารางที่ควรจะเป็นcarparts(หรือcar_parts, CarPartsสิ่งที่คุณต้องการ)
arnoudhgz

ผู้ออกแบบฐานข้อมูลใด ๆ ที่บังคับใช้ชื่อตารางเอกพจน์นั้นโดยทั่วไปจะประกาศสงครามกับนักพัฒนาแอพ Ruby on Rails ที่อาจเข้ามาติดต่อกับฐานข้อมูลนั้นในอนาคต การยืนยันอย่างเข้มงวดของ Rail เกี่ยวกับคำเอกพจน์สำหรับชั้นเรียนและชื่อที่เป็นพหูพจน์สำหรับตารางทำให้มีพฤติกรรมที่ทรงพลังจำนวนมากภายในอัญมณีจำนวนมากในระบบนิเวศของ Ruby ดังนั้นแม้ว่าคุณจะคิดว่าเสียงเอกพจน์ที่ดีกว่าเพื่อประโยชน์ของความเข้ากันได้คุณควรติดกับพหูพจน์ ฉันคิดว่านี่เป็นจริงสำหรับผู้ทำแผนที่วัตถุเชิงสัมพันธ์อื่น ๆ อีกมากมายเช่นกัน
Kelsey Hannan

15

ฉันไม่ชอบชื่อตารางพหูพจน์เพราะคำนามภาษาอังกฤษบางคำไม่สามารถนับได้ (น้ำซุปเงินสด) หรือการเปลี่ยนแปลงความหมายเมื่อคุณทำให้นับได้ (ไก่กับไก่; เนื้อกับนก) ฉันไม่ชอบการใช้ตัวย่อสำหรับชื่อตารางหรือชื่อคอลัมน์เนื่องจากการทำเช่นนี้จะเพิ่มความชันพิเศษให้กับเส้นโค้งการเรียนรู้ที่สูงชันแล้ว

กระแทกแดกดันฉันอาจทำให้Userเกิดข้อยกเว้นและเรียกว่าUsersเพราะUSER (Transac-SQL)เพราะฉันก็ไม่ชอบใช้วงเล็บรอบตารางถ้าฉันไม่ต้อง

ฉันยังต้องการตั้งชื่อคอลัมน์ ID ทั้งหมดว่าIdไม่ใช่ ChickenIdหรือChickensId(พวกพหูพจน์ทำอะไรเกี่ยวกับสิ่งนี้?)

ทั้งหมดนี้เป็นเพราะฉันไม่เคารพระบบฐานข้อมูลที่เหมาะสมฉันเพิ่งใช้ความรู้แบบเคล็ดลับจากการตั้งชื่อ OO เช่นJavaของนิสัยและความเกียจคร้าน ฉันหวังว่าจะมีการสนับสนุน IDE ที่ดีกว่าสำหรับ SQL ที่ซับซ้อน


8
พวกเราหลายคนต่างตั้งชื่อ 'id' คอลัมน์ 'id' อย่างที่คุณทำหรือ 'singular_id' ฉันเชื่อว่าตารางควรเป็นพหูพจน์ (ลองนึกถึงพวกเขาเช่นอาร์เรย์) แต่ชื่อคอลัมน์ควรเป็นเอกพจน์ (คุณลักษณะขององค์ประกอบเดียว)
mpen

plu_ral / PluRal สำหรับชื่อตาราง, singular_id / singularId สำหรับคีย์หลัก
hochl

14

เราใช้มาตรฐานที่คล้ายคลึงกันเมื่อเราต้องการสคริปต์ [] รอบชื่อและตำแหน่งที่เหมาะสมของสกีมา - โดยหลักแล้วมันจะป้องกันการเดิมพันของคุณจากการคว้าชื่อในอนาคตด้วยไวยากรณ์ SQL

SELECT [Name] FROM [dbo].[Customer] WHERE [Location] = 'WA'

สิ่งนี้ได้ช่วยจิตวิญญาณของเราในอดีต - ระบบฐานข้อมูลบางส่วนของเราใช้งานได้มากกว่า 10 ปีจาก SQL 6.0 ถึง SQL 2005 - ผ่านช่วงอายุที่ตั้งใจไว้


ดูเหมือนว่าจะเป็นพิธีกรรมของตนเอง มีการจับชื่ออย่างนั้นเกิดขึ้นหรือยัง?
Kjetil S.

13

ตาราง: พหูพจน์

ผู้ใช้หลายคนมีการระบุไว้ในตารางผู้ใช้

รุ่น: เอกพจน์

ผู้ใช้เอกพจน์สามารถเลือกได้จากตารางผู้ใช้

ตัวควบคุม: พหูพจน์

http://myapp.com/usersจะแสดงรายการผู้ใช้หลายคน

นั่นคือสิ่งที่ฉันจะทำต่อไป


1
ใกล้เคียงกับสิ่งที่ฉันทำ แต่ของฉันก็คือการจัดเก็บข้อมูลของผู้ใช้หลายคนในตารางเป็นเรื่องที่เกิดขึ้นจริงและผู้ใช้เอกพจน์ใด ๆ จะถูกแทนด้วยตารางหรือค่อนข้างเป็นความสัมพันธ์ที่เป็นชุดของ tuples
ProfK

ฉันคิดว่าฉันเห็นด้วยกับสิ่งนี้ สิ่งเดียวที่ทำให้ฉันสับสนคือทำไมแบบจำลองควรเป็นแบบเอกพจน์? เฉพาะในกรณีที่รูปแบบเกี่ยวข้องกับผู้ใช้คนเดียวเท่านั้น ถ้าฉันกำลังสืบค้น db เพื่อให้ได้ผู้ใช้ทั้งหมดฉันจะต้องเข้าถึงโมเดลหรือไม่ มันไม่สมเหตุสมผลสำหรับอินสแตนซ์ที่เป็นเอกเทศในการดึงข้อมูลทั้งหมดตัวอย่างเช่น: $ user-> get_all () // ไม่สมเหตุสมผล
PM7Temp

12

ฉันเป็นแฟนของชื่อตารางเอกพจน์เนื่องจากพวกเขาทำให้ไดอะแกรม ER ของฉันโดยใช้ไวยากรณ์ CASE ให้อ่านง่ายขึ้น แต่จากการอ่านคำตอบเหล่านี้ฉันรู้สึกว่ามันไม่เคยรู้สึกดีเลยใช่ไหม ฉันรักมันเป็นการส่วนตัว มีภาพรวมที่ดีพร้อมตัวอย่างว่าแบบจำลองของคุณสามารถอ่านได้อย่างไรเมื่อคุณใช้ชื่อตารางเอกพจน์เพิ่มคำกริยาแอ็คชั่นให้กับความสัมพันธ์ของคุณและสร้างประโยคที่ดีสำหรับทุกความสัมพันธ์ ทุกอย่างมันเกินความจริงสำหรับฐานข้อมูล 20 ตาราง แต่ถ้าคุณมีฐานข้อมูลที่มีหลายร้อยตารางและการออกแบบที่ซับซ้อนนักพัฒนาของคุณจะเข้าใจได้อย่างไรโดยไม่มีไดอะแกรมที่อ่านง่าย

http://www.aisintl.com/case/method.html

สำหรับตารางคำนำหน้าและมุมมองฉันเกลียดการฝึกอย่างนั้น อย่าให้ข้อมูลกับใครเลยก่อนที่จะให้ข้อมูลที่ไม่ดี ใครก็ตามที่เรียกดูฐานข้อมูลสำหรับวัตถุสามารถบอกโต๊ะจากมุมมองได้ง่าย ๆ แต่ถ้าฉันมีตารางชื่อ tblUsers ซึ่งด้วยเหตุผลบางอย่างฉันตัดสินใจที่จะปรับโครงสร้างในอนาคตเป็นสองตารางด้วยมุมมองที่รวมเข้าด้วยกันเพื่อป้องกันรหัสเก่า ตอนนี้ฉันมีมุมมองชื่อ tblUsers ณ จุดนี้ฉันเหลือสองตัวเลือกที่ไม่น่าสนใจทิ้งมุมมองที่มีชื่อด้วยคำนำหน้า tbl ซึ่งอาจสร้างความสับสนให้กับนักพัฒนาบางคนหรือบังคับให้เลเยอร์อื่นไม่ว่าจะเป็นเทียร์กลางหรือแอปพลิเคชัน นั่นขัดแย้งกับคุณค่าส่วนใหญ่ของการดู IMHO


1
ตัวอย่างที่ดีของข้อผิดพลาดของชื่อวัตถุนำหน้าด้วยตัวระบุ 'ชนิด'!
Kenny Evitt

12

ระบบtables/viewsของเซิร์ฟเวอร์เอง ( SYSCAT.TABLES, dbo.sysindexes, ALL_TABLES, information_schema.columnsฯลฯ ) ก็มักจะเป็นพหูพจน์ ฉันเดาว่าเพื่อความมั่นคงฉันจะทำตามการนำของพวกเขา


Microsoft คือสิ่งที่พวกเขามีเพื่อเหตุผลทางธุรกิจก่อน (และมักจะมีเหตุผลที่ผิดจรรยาบรรณ) เหตุผลเชิงตรรกะสุดท้าย เหตุผลเดียวที่ฉันติดตามพวกเขาก็คือพวกเขาเป็นลิงกอริลลาตัวใหญ่และคนอื่น ๆ ก็เป็นแบบนั้น เมื่อฉันมีทางเลือกฉันก็เลือกวิธีอื่น
Bruce Patin

1
ควรสังเกตว่าinformation_schemaเป็นส่วนหนึ่งของ ISO / IEC 9075-11 มาตรฐาน SQL และใช่มันใช้ชื่อตาราง / จำนวนพหูพจน์
Paulo Freitas

10

ถ้าเราดูที่ตารางระบบชื่อของพวกเขาได้รับมอบหมายจากไมโครซอฟท์อยู่ในMS SQL Server'splural

ของ Oracle singularตารางระบบที่มีชื่อใน แม้ว่าบางส่วนของพวกเขาเป็นพหูพจน์ Oracle แนะนำพหูพจน์สำหรับชื่อตารางที่ผู้ใช้กำหนด นั่นไม่สมเหตุสมผลเลยที่พวกเขาจะแนะนำสิ่งหนึ่งและติดตามอีกสิ่งหนึ่ง สถาปนิกในยักษ์ใหญ่ซอฟต์แวร์ทั้งสองได้ตั้งชื่อตารางของตนโดยใช้การประชุมที่แตกต่างกัน แต่ก็ไม่สมเหตุสมผลนัก ... หลังจากนั้นพวกเหล่านี้คืออะไร ... ปริญญาเอก?

ฉันจำได้ในสถาบันการศึกษาข้อเสนอแนะเป็นเอกพจน์

ตัวอย่างเช่นเมื่อเราพูดว่า:

select OrderHeader.ID FROM OrderHeader WHERE OrderHeader.Reference = 'ABC123'

อาจจะเลือก b / c IDจากแถวเดียวโดยเฉพาะ ...


1
Microsoft คือสิ่งที่พวกเขามีเพื่อเหตุผลทางธุรกิจก่อน (และมักจะมีเหตุผลที่ผิดจรรยาบรรณ) เหตุผลเชิงตรรกะสุดท้าย เหตุผลเดียวที่ฉันติดตามพวกเขาก็คือพวกเขาเป็นลิงกอริลลาตัวใหญ่และคนอื่น ๆ ก็เป็นแบบนั้น เมื่อฉันมีทางเลือกฉันก็เลือกวิธีอื่น
Bruce Patin

สองสิ่ง. หนึ่งโดยปกติแล้วคุณจะไม่ใช้ชื่อตารางและจะเขียน 'เลือก ID จาก OrderHeaders WHERE Reference =' ABC123 'เพราะคุณคือ' เลือก ID ทั้งหมดจาก OrderHeaders ที่บางสิ่งเป็นจริง 'แต่ถ้าคุณต้องใช้ชื่อตารางเนื่องจาก เข้าร่วมหรืออะไรก็ตามคุณจะใช้นามแฝงอย่างนั้น ... 'เลือก OrderHeader.ID จาก OrderHeaders เป็น OrderHeader ที่ใดก็ตามที่ OrderHeader.Reference =' ABC123 '
Mark A. Donohoe

9

นี่อาจซ้ำซ้อนบ้าง แต่ฉันขอแนะนำให้ระมัดระวัง ไม่จำเป็นว่าการเปลี่ยนชื่อตารางเป็นสิ่งที่ไม่ดี แต่การสร้างมาตรฐานก็เป็นเช่นนั้น มาตรฐาน - ฐานข้อมูลนี้อาจเป็น "มาตรฐาน" อยู่แล้ว แต่แย่มาก :) - ฉันขอแนะนำให้ความมั่นคงเป็นเป้าหมายที่ดีกว่าเนื่องจากฐานข้อมูลนี้มีอยู่แล้วและสันนิษฐานว่ามันประกอบด้วยมากกว่า 2 ตาราง

ถ้าคุณไม่สามารถสร้างมาตรฐานให้กับฐานข้อมูลทั้งหมดได้หรืออย่างน้อยก็วางแผนที่จะทำงานให้ถึงจุดสิ้นสุดฉันสงสัยว่าชื่อตารางเป็นเพียงส่วนเล็ก ๆ และมุ่งไปที่งานที่ทำอยู่ ความสนใจที่ดีที่สุดของคุณ -

บางครั้งความสอดคล้องในทางปฏิบัติเป็นมาตรฐานที่ดีที่สุด ...

my2cents ---


9

ทางเลือกที่เป็นไปได้:

  • เปลี่ยนชื่อตาราง SystemUser
  • ใช้วงเล็บ
  • เก็บชื่อตารางพหูพจน์

IMO ที่ใช้วงเล็บเป็นวิธีที่ปลอดภัยที่สุดในทางเทคนิคถึงแม้ว่ามันจะค่อนข้างยุ่งยาก IMO มันเป็นหนึ่งในหกของอีกครึ่งหนึ่งและอีกโซลูชันของคุณเพียงแค่เลือกใช้ส่วนตัว / ทีม


2
ฉันชอบแนวคิด 'คำนำหน้า' ของคุณ แต่จะเรียกว่า SystemUser
ProfK

9

เวลาของฉันอยู่ในความหมายขึ้นอยู่กับวิธีที่คุณกำหนดคอนเทนเนอร์ของคุณ ตัวอย่างเช่น "ถุงแอปเปิ้ล" หรือ "แอปเปิ้ล" หรือ "ถุงแอปเปิ้ล" หรือ "แอปเปิ้ล"

ตัวอย่าง: ตาราง "วิทยาลัย" สามารถมี 0 หรือมากกว่าวิทยาลัยตารางของ "วิทยาลัย" สามารถมี 0 หรือมากกว่าวิทยาลัย

a "student" table can contain 0 or more students 
a table of "students" can contain 0 or more students.

ข้อสรุปของฉันคือว่าไม่เป็นไร แต่คุณต้องกำหนดว่าคุณ (หรือคนที่มีปฏิสัมพันธ์กับมัน) กำลังจะเข้าใกล้เมื่อพูดถึงตาราง "axe table" หรือ "table of xs"


8

ตามที่คนอื่น ๆ กล่าวถึงในที่นี้อนุสัญญาควรเป็นเครื่องมือสำหรับเพิ่มความสะดวกในการใช้งานและความสามารถในการอ่าน ไม่เป็นกุญแจมือหรือสโมสรเพื่อทรมานนักพัฒนา

ที่กล่าวว่าการตั้งค่าส่วนตัวของฉันคือการใช้ชื่อเอกพจน์สำหรับทั้งตารางและคอลัมน์ อาจมาจากพื้นหลังการเขียนโปรแกรมของฉัน โดยทั่วไปชื่อคลาสจะเป็นเอกพจน์ยกเว้นว่าเป็นคอลเลกชันบางประเภท ในความคิดของฉันฉันกำลังจัดเก็บหรืออ่านแต่ละระเบียนในตารางที่เป็นปัญหาดังนั้นฉันจึงเหมาะสมกับฉัน

การปฏิบัตินี้ยังช่วยให้ฉันสามารถจองชื่อตารางพหูพจน์สำหรับผู้ที่เก็บความสัมพันธ์แบบหลายต่อกลุ่มระหว่างวัตถุของฉัน

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

ฉันชอบใช้คำนำหน้าในลักษณะ จำกัด (tbl สำหรับชื่อตาราง, sp_ สำหรับชื่อ proc ฯลฯ ) แต่หลายคนเชื่อว่าสิ่งนี้เพิ่มความยุ่งเหยิง ฉันยังต้องการให้ชื่อ CamelBack เป็นเครื่องหมายขีดล่างเพราะฉันมักจะกดเครื่องหมาย + แทน _ เมื่อพิมพ์ชื่อ คนอื่น ๆ ไม่เห็นด้วย

นี่เป็นอีกลิงค์ที่ดีสำหรับแนวทางการตั้งชื่อ: http://www.xaprb.com/blog/2008/10/26/the-power-of-a-good-sql-naming-convention/

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


18
ไม่สนใจความน่ากลัวของสัญกรณ์ฮังการี ไม่เคยไม่เคยไม่เคยใช้ sp_ ต่อหน้าโพรซีเดอร์ที่เก็บไว้เนื่องจาก MS-SQL ใช้สำหรับโพรซีเดอร์ที่เก็บไว้ในระบบและปฏิบัติต่อพวกมันเป็นพิเศษ เนื่องจาก sp_ ถูกเก็บไว้ในตารางหลัก MS-SQL จะดูเป็นอันดับแรกเสมอแม้ว่าคุณจะมีคุณสมบัติที่ตั้งก็ตาม
Will Dieterich

8

ฉันคิดว่าการใช้เอกพจน์เป็นสิ่งที่เราสอนในมหาวิทยาลัย แต่ในเวลาเดียวกันคุณสามารถยืนยันว่าไม่เหมือนกับการเขียนโปรแกรมเชิงวัตถุตารางไม่ใช่ตัวอย่างของเรคคอร์ด

ฉันคิดว่าฉันให้ความสำคัญกับเอกพจน์ในขณะนี้เนื่องจากความผิดปกติของพหูพจน์ในภาษาอังกฤษ ในภาษาเยอรมันมันยิ่งแย่ลงเนื่องจากไม่มีรูปแบบพหูพจน์ที่สอดคล้องกัน - บางครั้งคุณไม่สามารถบอกได้ว่าคำนั้นเป็นคำพหูพจน์หรือไม่หากไม่มีบทความที่ระบุไว้ข้างหน้า (der / die / das) และในภาษาจีนไม่มีรูปแบบพหูพจน์อยู่แล้ว


ในมหาวิทยาลัยฉันสอนพหูพจน์สำหรับตารางฉันยังมีหนังสือที่นี่การจัดการฐานข้อมูลรุ่นที่สามจากยุค 90 ตารางเป็นเอกพจน์ ในขณะที่ฉันมีสำเนาที่อัพเดต, 11e, เอกพจน์และชื่อย่อบางตัวในขณะที่ส่วน XML ใช้พหูพจน์ \ n แต่ถ้าคุณตรวจสอบเนื้อหาจริงสำหรับส่วน RDBMS มันก็ยังคงเป็นข้อความเดียวกันกับรูปภาพบางรูปที่ได้รับการยกหน้า \ n รายการตรวจสอบ "การสร้างแบบจำลองข้อมูล" ระบุว่าไม่มีอะไรในพหูพจน์เทียบกับเอกพจน์เพียงแค่เอนทิตีที่ควรแมปกับวัตถุเดียวนั่นอาจเป็นสิ่งที่พวกเขาพยายามบังคับใช้ในหนังสือ
มาร์โก

8

ฉันเคยใช้ "Dude" สำหรับตารางผู้ใช้ - จำนวนตัวอักษรสั้น ๆ เหมือนกันไม่ขัดแย้งกับคำหลักยังคงอ้างอิงถึงมนุษย์ทั่วไป หากฉันไม่ได้กังวลเกี่ยวกับอาการคัดหัวที่อาจเห็นรหัสฉันจะเก็บมันไว้อย่างนั้น


8

ฉันใช้เอกพจน์เสมอเพราะนั่นคือสิ่งที่ฉันได้รับการสอน อย่างไรก็ตามในขณะที่สร้างสคีมาใหม่เมื่อเร็ว ๆ นี้เป็นครั้งแรกในระยะเวลานานฉันตัดสินใจที่จะรักษาอนุสัญญานี้เพียงเพราะมันสั้นกว่า การเพิ่ม 's' ต่อท้ายชื่อตารางทุกชื่อนั้นไม่มีประโยชน์สำหรับฉันเหมือนกับการเพิ่ม 'tbl_' ต่อหน้าทุกคน


7

ฉันมักจะคิดว่ามันเป็นแบบแผนโง่ ฉันใช้ชื่อตารางพหูพจน์

(ฉันเชื่อว่าเหตุผลเบื้องหลังนโยบายนั้นคือการทำให้เครื่องกำเนิดรหัส ORM ง่ายขึ้นในการสร้างคลาสวัตถุและคอลเลกชันเนื่องจากง่ายต่อการสร้างชื่อพหูพจน์จากชื่อเอกพจน์มากกว่าในทางกลับกัน)


11
อนุสัญญานี้เป็นส่วนหนึ่งของทฤษฎีเชิงสัมพันธ์ที่ยาวนานนานก่อนที่ ORM เคยดำรงอยู่
ProfK

1
ORM ไม่ควรกำหนดชื่อของวัตถุที่พวกเขาจับคู่กับ จุดของ ORM คือสิ่งที่เป็นนามธรรมของวัตถุที่ให้ความยืดหยุ่นนี้
barrypicker

7

ฉันใช้เฉพาะคำนามสำหรับชื่อตารางของฉันที่สะกดเหมือนกันไม่ว่าจะเป็นเอกพจน์หรือพหูพจน์:

กวางมูซปลากวางเครื่องบินคุณกางเกงกางเกงขาสั้นแว่นตากรรไกรสายพันธุ์ลูกหลาน


6

ฉันไม่เห็นความชัดเจนในคำตอบก่อนหน้านี้ โปรแกรมเมอร์หลายคนไม่มีความหมายอย่างเป็นทางการในใจเมื่อทำงานกับตาราง เรามักจะสื่อสารอย่างสังหรณ์ใจในแง่ของ "บันทึก" หรือ "แถว" อย่างไรก็ตามมีข้อยกเว้นบางอย่างสำหรับความสัมพันธ์แบบ denormalized ตารางมักจะได้รับการออกแบบเพื่อให้ความสัมพันธ์ระหว่างคุณลักษณะที่ไม่ใช่กุญแจและกุญแจถือเป็นฟังก์ชั่นทางทฤษฎีชุด

ฟังก์ชั่นสามารถกำหนดเป็นเซตย่อยของผลิตภัณฑ์ไขว้ระหว่างสองชุดซึ่งแต่ละองค์ประกอบของชุดคีย์จะเกิดขึ้นอย่างมากที่สุดครั้งหนึ่งในการทำแผนที่ ดังนั้นคำศัพท์ที่เกิดขึ้นจากมุมมองนั้นมีแนวโน้มที่จะเป็นเอกพจน์ เราเห็นการประชุมเอกพจน์ (หรืออย่างน้อยไม่ใช่พหูพจน์) เดียวกันในทฤษฎีทางคณิตศาสตร์และการคำนวณอื่น ๆ ที่เกี่ยวข้องกับฟังก์ชัน (พีชคณิตและแคลคูลัสแลมบ์ดาเป็นต้น)

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