ชื่อตารางพหูพจน์กับเอกพจน์


41

ฉันจะตั้งชื่อตารางอย่างไรเมื่อสร้างฐานข้อมูลใหม่

Singular: Clientหรือพหูพจน์: Clients?


ฉันเคยมีเพื่อนร่วมงานคนหนึ่งที่ยืนยันว่าชื่อตารางเป็นชื่อเอกพจน์และชื่อมุมมองเป็นพหูพจน์
René Nyffenegger

1
มีโรงเรียนแห่งความคิดอื่น ๆ 1) ใช้คำกริยาที่อนุญาตให้แสดงคำสั่งในภาษาธรรมชาติเช่นperson NAMED 'fred' EARNS 20,000(โดยที่ชื่อตัวพิมพ์ใหญ่คือตาราง) 2) ใช้ชื่อขององค์กรสำหรับเช่นชุดPERSONNEL, PAYROLL, ORG_CHARTฯลฯ
onedaywhen

3
ไซต์ข้ามที่เป็นไปได้ที่ซ้ำกัน: stackoverflow.com/questions/338156/ …
Ciro Santilli 新疆改造中心中心法轮功六四

คำตอบ:


44

แล้วแต่คุณ. เพียง แต่ต้องสอดคล้องกัน

ส่วนตัวฉันชอบเอกพจน์ตามร้านค้าแต่ละแถว *: การสั่งซื้อสินค้าผู้ใช้รายการ ฯลฯ

สิ่งนี้ตรงกับการสร้างแบบจำลองของฉัน (ผ่านการจำลองบทบาทของวัตถุ) ที่ฉันใช้เอนทิตี / ประเภทเอกพจน์

แก้ไข:

เหตุผลหนึ่งคือพหูพจน์ล้มเหลวเมื่อคุณมีตารางการเชื่อมโยง:
Orders, Productsจะให้หรือOrderProducts OrdersProductsเสียงไม่ถูกต้อง

หรือตารางประวัติ (แน่นอนว่าคุณสามารถใช้สกีมาสำหรับสิ่งนี้):
Orders-> OrdersHistoryหรือ (ไม่!) OrdersHistories? จะไม่Order-> OrderHistoryดีกว่าไหม


2
มันควรจะเดือดลงไปที่ตัวเลือกส่วนบุคคลหรือไม่? จะเกิดอะไรขึ้นถ้ามี 2 คนที่ทำงานในการออกแบบฐานข้อมูลหนึ่งจากนั้นหนึ่งอาจตั้งชื่อตารางเป็นพหูพจน์และอื่น ๆ ที่เป็นเอกพจน์ ไม่มีเหตุผลที่ถูกต้องว่าทำไมถึงใช้งานSingularหรือPlural?
John Isaiah Carmona

2
@JohnIsaiahCarmona: เพิ่มเหตุผล
gbn

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

4
เหตุผลในความโปรดปรานของเอกพจน์ก็คือถ้าคุณมีกฎที่ PK นั้นตั้งตามชื่อ tablename เช่นTablenameIDหรือหรือTablenameCode tablename_idด้วยชื่อตารางพหูพจน์คุณท้ายด้วยOrders.OrdersID(ซึ่งดูไม่ถูกต้อง) หรือOrders.OrderIDตำแหน่งที่คุณใช้พหูพจน์สำหรับชื่อตาราง แต่เปลี่ยนเป็นเอกพจน์สำหรับคำนำหน้าคอลัมน์
ypercubeᵀᴹ

อีกจุดหนึ่งตามแนวเส้นเดียวกัน
แจ็คดักลาส

8

เกี่ยวกับชื่อตารางเอกพจน์และพหูพจน์เรื่องดูเหมือนจะแย้ง แต่ไม่ควร

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

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

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

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

ภาษาอังกฤษไม่ใช่ภาษาการเขียนโปรแกรมที่ดีและเหมาะสมและการพยายามทำให้คำสั่งฐานข้อมูลและโปรแกรมสอดคล้องกับภาษาอังกฤษเพราะฟังดูดีกว่าที่จะอ่านหนึ่งในข้อความเหล่านั้นเป็นความผิดพลาด


5

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

ความชอบของฉันคือพหูพจน์ฟังดูดีกว่าในSELECTข้อความ:

SELECT Id, Name, Status 
FROM   Persons
WHERE  Status <> 5  --5 meaning deleted

ฉันหมายถึงในกรณีนี้อย่างน้อยมีหลายคนในตารางและหลายคนถูกส่งกลับไปยังลูกค้า


2
+1 แม้ว่าในทางเทคนิคพหูพจน์ของบุคคลคือคนและนี่คือเหตุผลหนึ่งที่ฉันใช้เอกพจน์ ORM บางแห่งจะสร้างตารางให้คุณโดยอัตโนมัติและคุณจะได้รับสถานการณ์แปลก ๆ เช่นนี้โดยที่การตั้งชื่อทางภาษาไม่สมเหตุสมผล
Mr.Brownstone

5

"คำสั่งซื้อ" เป็นคำสงวน "คำสั่งซื้อ" ไม่ใช่

"ผู้ใช้" เป็นคำที่สงวนไว้ "ผู้ใช้" ไม่ใช่

"เซสชั่น" เป็นคำที่สงวนไว้ "เซสชัน" ไม่ใช่

"result" เป็นคำที่สงวนไว้ "ผลลัพธ์" ไม่ใช่

"ญาติ" เป็นคำที่สงวนไว้ "ญาติ" ไม่ใช่

...

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


1
นี่ใกล้เกินไปเพื่อความชัดเจน อยู่ห่างจากคำที่สงวนไว้เอกพจน์หรือพหูพจน์ ซึ่งจะช่วยจริงๆเมื่อทำการดีบักข้อความแสดงข้อผิดพลาดที่ใช้คำพหูพจน์ของคำสงวนแทนกัน เลือกคำจากโดเมนของแอปพลิเคชันเพื่อให้มีความเกี่ยวข้องกับการใช้งาน / ผู้ใช้
ผู้ใช้ Emacs

"ใกล้เกินไปเพื่อความชัดเจน" หมายความว่าอย่างไร
Neil McGuigan

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

OrderOder IMO, PortalUser, UserSession ดีกว่าแค่สั่งซื้อ, ผู้ใช้, เซสชันดังนั้นเอกพจน์อาจทำได้ดีในสถานการณ์นี้
John Jai

1

ฉันเชื่อว่าตาราง SQL ควรมีชื่อพหูพจน์ มันอ่านดีขึ้นมาก

ตารางของบันทึกหนังสือควรเรียกว่าหนังสือ ORM ควรใช้หลักการเดียวกัน วัตถุ Books เป็นคอลเล็กชันและควบคุมทุกระเบียนในตาราง Books วัตถุหนังสือเป็นประธานในระเบียนเดียว

ทำให้การเข้ารหัสเป็นธรรมชาติยิ่งขึ้น

select name, publication_date from books where publication_date > '2000-01-01';

books = Books()
for book in books.get("publication_date >= '2000-01-01'"):
    print book.name

ทำให้รู้สึกจนกว่าคุณจะต้องเขียนเพื่อแกะใน seep.get ...โค้งกฎมีความยืดหยุ่น
ผู้ใช้ Emacs

ทรูคอนเทนเนอร์บางคำเป็นคำที่ไม่มีพหูพจน์เหมือนคำนาม - ชอบ 'เข้าถึง' แต่สามารถแก้ไขได้โดยใช้: 'สำหรับ access_record ในการเข้าถึง'
dlink

ทำให้ฉันรู้สึกบ้าคลั่งเมื่อเห็นวัตถุลิงก์ ตารางลิงก์ระหว่างหนังสือกับผู้แต่งเป็นอย่างไร "BooksAuthors" ดูและฟังดูน่ากลัว แต่ "BookAuthor" ดูและฟังดูดีกว่า จากนั้นคุณจะได้คำศัพท์ที่มีคำลงท้ายลงท้ายด้วยพหูพจน์ (สถานะ) หรือคำนามที่ผิดปกติ (child vs children) IMO โลกแห่งอาการปวดตา!
หยดน้ำ

สวัสดี @ blobbles พหูพจน์จะเป็น BookAuthors ไม่ใช่ BooksAuthors ดังนั้นมันยังคงอ่านตามธรรมชาติ BookPublishers, BookFormats, ฯลฯ
dlink

ความสามารถในการอ่านนั้นดีอยู่เสมอ แต่มันไม่เกี่ยวกับประโยคที่เกี่ยวกับสถานที่ที่เราได้รับข้อมูล เช่นtable.fieldนั้นauthor.authorNameก็ปรับได้อย่างสมบูรณ์แบบ รับ authorName จากตารางผู้เขียน เมื่อมีผู้เขียนเพียงคนเดียวพหูพจน์ก็ดูแย่เช่นกัน authors.authorNameเมื่อมีผู้เขียนเพียงคนเดียว? นั่นคือ IMO ที่สับสนมากขึ้น ของหลักสูตรนี้จะทำให้ดีขึ้นมากตอนนี้เราได้ทำไปแล้วกับประโยคสไตล์ mysql_ และมีวิธีที่ดีกว่าในการเข้าถึงข้อมูล :)
James

1

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


คำตอบนี้ไม่ได้เพิ่มอะไรเลยในกระทู้ทั้งหมด! คุณล้มเหลวในการตอบปัญหาด้วยการเรียกตาราง "สั่งซื้อ" เช่น! ส่วนตัวผมใช้คำภาษาฝรั่งเศสเมื่อภาษาอังกฤษจะไม่ทำเคล็ดลับ - Ordre, Groupe ... เสมอใช้ตารางของช่องแสดงความคิดเห็นในการอธิบายทางเลือกของคุณ! แต่สิ่งสำคัญจริงๆคือต้องมีการประชุมและติดมัน !
Vérace

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

0

มันเป็นเรื่องส่วนตัวมาก ฉันใช้แบบเอกพจน์มา 30 ปีแล้ว แต่ฉันเห็นได้ว่าทำไมผู้คนถึงชอบพหูพจน์ หนังสือ - ผู้แต่งน่าสนใจเพราะฉันคิดว่าผู้เขียนหนังสือไม่ผิด หนังสือสามารถมีผู้เขียนหนึ่งคนขึ้นไป และผู้แต่งอาจเขียนหนังสือหนึ่งเล่มขึ้นไป (เช่นเขียนร่วม) นอกจากนี้ยังขึ้นอยู่กับว่าคุณจัดการกับหนังสือที่เขียนโดยผู้แต่งมากกว่าหนึ่งคน ฉันเห็นด้วยกับคำตอบอื่น ๆ ; เลือกหนึ่งอันและสอดคล้องกัน เกี่ยวกับปัญหาคำสงวน ฉันคิดว่ามันไม่ยากที่จะคิดหาชื่อวิธีแก้ปัญหา ผู้ใช้ -> app_user เซสชัน -> app_session คำสั่งซื้อ -> customer_order


0

เรามองสิ่งต่าง ๆ จากมุมมองที่แตกต่างกันและฉันคิดว่าค่ายทั้งสองนั้นมีการระบุโดย:

เอกพจน์ ("ผู้ใช้")
บุคคลที่สร้างความสัมพันธ์ระหว่างชื่อตารางและความจริงมันหมายถึงภาชนะซึ่งสามารถมีหลายแถว

ดังนั้น "คอนเทนเนอร์ของผู้ใช้" สามารถมีได้หลายแถว

Plural ("users")
บุคคลที่ไม่ได้สร้างความสัมพันธ์ระหว่างชื่อตารางและข้อเท็จจริงนั้นแสดงถึงคอนเทนเนอร์ แน่นอนพวกเขารู้ว่ามันเป็นภาชนะ แต่มันไม่มีอยู่ในชื่อ

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

ฉันคิดว่านี่เป็นเพราะหลายปีของพหูพจน์เป็นเรื่องธรรมดาและในสื่อการสอนออนไลน์ส่วนใหญ่


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

เช่นเคยแม้ว่ามักจะไม่ถูกและผิดและมันเกี่ยวกับสิ่งที่เหมาะสมกับสถานการณ์และที่สำคัญคือการสอดคล้องกับสิ่งที่คุณเลือก

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

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