สมมติว่าฉันมีสองโต๊ะ:
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
ฉันควรเรียกตารางที่แมปสีกับรูปร่างอย่างไร
Table: ???
Columns: ColorId, ShapeId
สมมติว่าฉันมีสองโต๊ะ:
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
ฉันควรเรียกตารางที่แมปสีกับรูปร่างอย่างไร
Table: ???
Columns: ColorId, ShapeId
Shape2Color
จากหัวข้อที่: ShapeXColor
, ShapeColorLink
,
คำตอบ:
มีเพียงสองสิ่งที่ยากในวิทยาการคอมพิวเตอร์: การทำให้แคชไม่ถูกต้องและการตั้งชื่อสิ่งต่างๆ
- Phil Karlton
การตั้งชื่อที่ดีสำหรับตารางที่แสดงถึงmany-to-many
ความสัมพันธ์จะช่วยให้อ่านและเข้าใจความสัมพันธ์ได้ง่ายขึ้น บางครั้งการค้นหาชื่อที่ดีก็ไม่ใช่เรื่องเล็กน้อย แต่โดยปกติแล้วการใช้เวลาคิดทบทวนก็คุ้มค่า
ตัวอย่าง: Reader
และNewspaper
.
A Newspaper
มีจำนวนมากReaders
และReader
มีจำนวนมากNewspapers
คุณสามารถเรียกความสัมพันธ์ได้NewspaperReader
แต่ชื่อที่ชอบSubscription
อาจสื่อถึงความหมายของตารางได้ดีกว่า
ชื่อSubscription
นี้ยังเป็นสำนวนมากกว่าในกรณีที่คุณต้องการแมปตารางกับวัตถุในภายหลัง
หลักการตั้งชื่อmany-to-many
ตารางคือการต่อชื่อของตารางทั้งสองที่เกี่ยวข้องกับความสัมพันธ์ ColourShape
จะเป็นค่าเริ่มต้นที่สมเหตุสมผลในกรณีของคุณ ที่กล่าวว่าผมคิดว่านิค D ขึ้นมาด้วยสองคำแนะนำที่ดี: และStyle
Texture
วิธีการเกี่ยวกับColorShapeMapหรือสไตล์หรือเนื้อ
ที่น่าสนใจประมาณครึ่งหนึ่งของคำตอบจะให้คำทั่วไปสำหรับตารางใด ๆ ที่ใช้ความสัมพันธ์แบบกลุ่มต่อกลุ่มและอีกครึ่งหนึ่งของคำตอบแนะนำชื่อสำหรับตารางเฉพาะนี้
ฉันเรียกตารางเหล่านี้ว่าตารางทางแยกโดยทั่วไป
ในแง่ของรูปแบบการตั้งชื่อคนส่วนใหญ่ตั้งชื่อที่เป็นการรวมกันของสองตารางในความสัมพันธ์แบบกลุ่มต่อกลุ่ม ดังนั้นในกรณีนี้ " ColorShape
" หรือ "ShapeColor
" แต่ฉันพบว่าสิ่งนี้ดูเทียมและน่าอึดอัด
Joe Celko แนะนำในหนังสือ "SQL Programming Style" เพื่อตั้งชื่อตารางเหล่านี้ในลักษณะภาษาที่เป็นธรรมชาติ ColoredBy
ตัวอย่างเช่นถ้ารูปร่างเป็นสีโดยสีแล้วชื่อตาราง จากนั้นคุณอาจมีแผนภาพที่อ่านได้อย่างเป็นธรรมชาติเช่นนี้:
Shape <-- ColoredBy --> Color
ในทางกลับกันคุณสามารถพูดได้ว่าสีเป็นสีรูปร่าง:
Color <-- Colors --> Shape
แต่ดูเหมือนว่าตารางกลางจะเหมือนกับหลักการColor
ตั้งชื่อพหูพจน์ สับสนเกินไป
อาจชัดเจนที่สุดในการใช้หลักการColoredBy
ตั้งชื่อ น่าสนใจว่าการใช้ passive voice ทำให้รูปแบบการตั้งชื่อชัดเจนยิ่งขึ้น
HasColor
อาจเป็นอีกชื่อหนึ่งที่เป็นไปได้สำหรับตารางจุดตัดที่ใช้ภาษาธรรมชาติ
hasColour
/ ColouredBy
เพื่ออะไร? มันเอาชนะวัตถุประสงค์ของการตั้งชื่อเพื่อใช้DESCRIBE
ในการค้นหาความสัมพันธ์
ShapeHasColor
และTextHasColor
?
ตั้งชื่อตารางตามที่คุณต้องการตราบใดที่เป็นข้อมูล:
COLOR_SHAPE_XREF
จากมุมมองของแบบจำลองตารางนี้เรียกว่าตารางการอ้างอิงการเข้าร่วม / เส้นตรง / ข้าม ฉันยังคงใช้นิสัย_XREF
ในตอนท้ายเพื่อทำให้ความสัมพันธ์ชัดเจน
นี่คือAssociative Entityและมักจะมีความสำคัญในสิทธิของตนเอง
ตัวอย่างเช่นความสัมพันธ์ระหว่าง TRAINS และ TIMES ทำให้เกิด TIMETABLE
หากไม่มีเอนทิตีใหม่ที่ชัดเจน (เช่นตารางเวลา) การประชุมคือการเรียกใช้คำสองคำพร้อมกันโดยให้ COLOUR_SHAPE หรือคล้ายกัน
ตารางการทำแผนที่คือสิ่งที่มักเรียกว่า
ColorToShape
ColorToShapeMap
To
ในชื่อ จะเป็นอย่างไรถ้าคุณมี Shape พร้อม HighlightColor ถ้าคุณเรียกมันว่าShapeHighlightColor
มันค่อนข้างคลุมเครือไม่ว่าจะเป็น ShapeHighlight ที่แมปกับสีหรือรูปร่างที่แมปกับสีไฮไลต์ ดังนั้นShapeToHighlightColor
อาจจะชัดเจนมากขึ้น
ผมเคยทำงานกับ DBAs ที่เรียกว่าร่วมโต๊ะ
Colour_Shape เป็นเรื่องปกติธรรมดา - เว้นแต่ความสัมพันธ์นั้นจะมีชื่อเฉพาะโดเมนที่ชัดเจน
Colour_Shape_Colour
Colour_Shape_Shape
ขอแนะนำให้ใช้ชื่อเอนทิตีผสมกันแล้วใส่ในพหูพจน์ ดังนั้นชื่อของตารางจะแสดงการเชื่อมต่อ "หลายต่อหลายคน"
ในกรณีของคุณ:
สี + รูปร่าง = ColorsShapes
ฉันมักจะได้ยินที่เรียกว่า Junction Table ฉันตั้งชื่อตารางตามสิ่งที่รวมดังนั้นในกรณีของคุณไม่ว่าจะเป็น ColorShape หรือ ShapeColor ShapeColor
ฉันคิดว่ามันทำให้รู้สึกมากขึ้นสำหรับรูปร่างจะมีสีมากกว่าสีที่จะมีรูปร่างดังนั้นฉันจะไปกับ
หรือ Bridge Table
หรือ Join Table
หรือ Map Table
หรือ Link Table
หรือ Cross-Reference Table
สิ่งนี้ถูกนำมาใช้เมื่อเราใช้ความสัมพันธ์แบบกลุ่มต่อกลุ่มโดยที่คีย์จากทั้งสองตารางจะสร้างคีย์หลักแบบผสมของตารางทางแยก
ตารางกลางหรือตารางเข้าร่วม
ฉันจะตั้งชื่อว่า "ColorShapes" หรือ "ColorShape" แล้วแต่ความต้องการของคุณ
ฉันยังเคยได้ยินคำว่าAssociative table ที่ใช้
ชื่อสำหรับตารางของคุณอาจมีColorShapeAssociations
ความหมายว่าแต่ละแถวแสดงถึงความสัมพันธ์ระหว่างสีนั้นกับรูปร่างนั้น การมีอยู่ของแถวแสดงให้เห็นว่าสีมีรูปร่างนั้นและรูปร่างนั้นมีสีนั้น แถวทั้งหมดที่มีสีเฉพาะจะเป็นชุดของรูปร่างทั้งหมดที่มีสีเกี่ยวข้องและแถวสำหรับรูปร่างเฉพาะจะเป็นชุดของสีทั้งหมดที่มีรูปร่างเข้ามา ...
โดยทั่วไปฐานข้อมูลส่วนใหญ่จะมีหลักการตั้งชื่อสำหรับดัชนีคีย์หลักและอื่น ๆ ใน PostgreSQL แนะนำการตั้งชื่อต่อไปนี้:
ตารางของคุณเป็นตารางที่เชื่อมโยงกับฉัน เพื่อให้สอดคล้องกับการตั้งชื่อข้างต้นฉันจะเลือกสิ่งต่อไปนี้:
ในรายการวัตถุตารางตารางที่เชื่อมโยงจะอยู่หลัง tablename1 สิ่งนี้อาจดึงดูดสายตามากขึ้น แต่คุณยังสามารถเลือกชื่อที่อธิบายวัตถุประสงค์ของลิงก์ได้เช่นเดียวกับที่ผู้อื่นแนะนำ ซึ่งอาจช่วยให้ชื่อคอลัมน์ id สั้น (หากลิงก์ของคุณต้องมี id ที่มีชื่อของตัวเองและอ้างอิงในตารางอื่น ๆ )
ฉันเป็นส่วนหนึ่งของคำว่า "Hamburger Table" มาโดยตลอด ไม่รู้ว่าทำไม - ฟังดูดี
โอ้ฉันจะเรียกตารางว่า ShapeColor หรือ ColorShape ขึ้นอยู่กับตารางที่ใช้กันทั่วไป
ตาราง "Many-Many" ฉันจะเรียกมันว่า "ColourShape" หรือในทางกลับกัน
เป็นการยากที่จะตอบอะไรบางอย่างตามอำเภอใจเช่นนี้ แต่ฉันมักชอบแนวคิดของ tosh ในการตั้งชื่อตามบางสิ่งในโดเมนจริงแทนที่จะเป็นคำอธิบายทั่วไปของความสัมพันธ์พื้นฐาน
บ่อยครั้งที่ตารางประเภทนี้จะพัฒนาไปสู่สิ่งที่สมบูรณ์ยิ่งขึ้นสำหรับโมเดลโดเมนและจะใช้คุณลักษณะเพิ่มเติมที่อยู่เหนือและนอกเหนือจากคีย์ต่างประเทศที่เชื่อมโยง
ตัวอย่างเช่นถ้าคุณต้องการเก็บพื้นผิวนอกเหนือจากสีจะเป็นอย่างไร? การขยายตาราง SHAPE_COLOR อาจดูเป็นเรื่องที่น่าขัน
ในทางกลับกันยังมีบางสิ่งที่จะต้องกล่าวถึงสำหรับการตัดสินใจอย่างรอบรู้โดยพิจารณาจากข้อกำหนดที่คุณมีในปัจจุบันและเตรียมพร้อมที่จะปรับโครงสร้างใหม่เมื่อมีการแนะนำข้อกำหนดเพิ่มเติมในภายหลัง
ทั้งหมดที่กล่าวมาฉันจะเรียกมันว่า SURFACE หากฉันมีความเข้าใจว่าจะมีคุณสมบัติคล้ายพื้นผิวเพิ่มเติมในภายหลัง ถ้าไม่ฉันก็ไม่มีปัญหาในการเรียกมันว่า SHAPE_COLOR หรืออะไรสักอย่างและไปสู่ปัญหาการออกแบบที่เร่งด่วนมากขึ้น
อาจจะเฉยๆColoredShape
?
ฉันไม่แน่ใจว่าฉันได้รับคำถาม เกี่ยวกับกรณีนี้หรือคุณกำลังมองหาหลักเกณฑ์ทั่วไป
ฉันจะตั้งชื่อด้วยชื่อที่แน่นอนของตารางที่เข้าร่วม = ColorShape
ในการยึดติดกับสิ่งที่ Developer Art เกี่ยวข้อง
ColorShape
จะเป็นหลักการตั้งชื่อตามปกติ ในแผนภาพ ER มันจะเป็นความสัมพันธ์
เรียกว่าตารางอ้างอิงโยง
XREF_COLOR_SHAPE
(
XCS_ID INTEGER
C_ID INTEGER
S_ID INTEGER
)
ฉันจะใช้r_shape_colors
หรือr_shape_color
ขึ้นอยู่กับความหมายของมัน
r_
จะทดแทนxref_
ในกรณีนี้
คะแนนโหวตของฉันคือชื่อที่อธิบายตารางได้ดีที่สุด ในกรณีนี้อาจเป็นได้ShapeColor
แต่ในหลาย ๆ กรณีชื่อที่แตกต่างจากการเรียงต่อกันจะดีกว่า ฉันชอบความสามารถในการอ่านและสำหรับฉันนั่นหมายถึงไม่มีส่วนต่อท้ายไม่มีขีดล่างและไม่มีคำนำหน้า
โดยส่วนตัวแล้วฉันจะใช้ Colour_Shape โดยมีเครื่องหมายขีดล่าง: เพียงเพราะว่าฉันได้เห็นการประชุมนี้ปรากฏขึ้นไม่น้อย [แต่เห็นด้วยกับโพสต์อื่น ๆ ที่นี่ว่าอาจมีวิธีการทำแบบ 'กวี' มากกว่านี้]
โปรดทราบว่าควรสร้างคีย์ต่างประเทศบนตารางการรวมนี้ซึ่งจะอ้างอิงทั้งตารางสีและรูปร่างซึ่งจะช่วยในการระบุความสัมพันธ์ด้วย
การประชุมใหญ่ที่ฉันเห็นบ่อยมากสำหรับการเข้าร่วมตารางที่ฉันชอบเป็นการส่วนตัวคือ 'Colour_v_Shape' ซึ่งฉันเคยได้ยินชาวบ้านเรียกขานว่า 'เทียบกับตาราง'
ทำให้เห็นได้ชัดเจนในภาพรวมว่าตารางแสดงถึงความสัมพันธ์แบบกลุ่มต่อกลุ่มและช่วยหลีกเลี่ยงสถานการณ์ที่สับสน (แม้ว่าจะหายาก) เมื่อคุณพยายามเชื่อมคำสองคำที่อาจรวมกันเป็นคำประสมตัวอย่างเช่น 'Butter' และ 'นม' อาจกลายเป็น 'ButterMilk' แต่ถ้าคุณต้องการเป็นตัวแทนของหน่วยงานที่เรียกว่า 'Buttermilk' ด้วยล่ะ?
ทำแบบนี้คุณจะได้ 'Butter_v_Milk' และ 'Buttermilk' - ไม่ต้องสับสน
นอกจากนี้ฉันชอบคิดว่ามีการอ้างอิง Foo Fighters ในคำถามเดิม