ฉันควรตั้งชื่อตารางที่แมปสองตารางเข้าด้วยกันอย่างไร [ปิด]


143

สมมติว่าฉันมีสองโต๊ะ:

Table: Color
Columns: Id, ColorName, ColorCode

Table: Shape
Columns: Id, ShapeName, VertexList

ฉันควรเรียกตารางที่แมปสีกับรูปร่างอย่างไร

Table: ???
Columns: ColorId, ShapeId

นามแฝง ColorShape และ ShapeColor สำหรับสมมาตร
LukLed

2
ฉันเพิ่งเจอคำถามคล้าย ๆ กันที่ฉันไม่เคยเห็นมาก่อน: stackoverflow.com/questions/1764483/… . บางความคิดอื่น ๆ Shape2Colorจากหัวข้อที่: ShapeXColor, ShapeColorLink,
devuxer

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

คำตอบ:


192

มีเพียงสองสิ่งที่ยากในวิทยาการคอมพิวเตอร์: การทำให้แคชไม่ถูกต้องและการตั้งชื่อสิ่งต่างๆ
- Phil Karlton

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

ตัวอย่าง: ReaderและNewspaper.

A NewspaperมีจำนวนมากReadersและReaderมีจำนวนมากNewspapers

คุณสามารถเรียกความสัมพันธ์ได้NewspaperReaderแต่ชื่อที่ชอบSubscriptionอาจสื่อถึงความหมายของตารางได้ดีกว่า

ชื่อSubscriptionนี้ยังเป็นสำนวนมากกว่าในกรณีที่คุณต้องการแมปตารางกับวัตถุในภายหลัง

หลักการตั้งชื่อmany-to-manyตารางคือการต่อชื่อของตารางทั้งสองที่เกี่ยวข้องกับความสัมพันธ์ ColourShapeจะเป็นค่าเริ่มต้นที่สมเหตุสมผลในกรณีของคุณ ที่กล่าวว่าผมคิดว่านิค D ขึ้นมาด้วยสองคำแนะนำที่ดี: และStyleTexture


10
+1: กล่าวได้ดี - ชื่อที่เลือกอย่างระมัดระวังในตอนนี้จะทำให้การบำรุงรักษาง่ายขึ้นมากในอนาคต
เปรตคณะสงฆ์

118
"มีเพียงสองสิ่งที่ยากในวิทยาการคอมพิวเตอร์: การทำให้แคชไม่ถูกต้องการตั้งชื่อสิ่งต่างๆและข้อผิดพลาดทีละข้อ"
นีลแมคกีแกน

1
สมมติว่ามีหมวดหมู่สำหรับผลิตภัณฑ์และหมวดหมู่อื่นสำหรับสูตรอาหาร สำหรับทั้งสองตารางเราจะมี formula_categories และ product_categories และเนื่องจากเราไม่สามารถแค่ชื่อตาราง "category" สำหรับทั้งสองตารางเพื่อป้องกันความขัดแย้งตารางทางแยกสำหรับผลิตภัณฑ์และสูตรอาหารจะเป็น "formula_recipe_categories" และ "product_product_categories"
c9s

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

36

วิธีการเกี่ยวกับColorShapeMapหรือสไตล์หรือเนื้อ


5
+1 สำหรับการสร้างสิ่งที่หรูหรากว่าการรวมชื่อโต๊ะ
tosh

23

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

ฉันเรียกตารางเหล่านี้ว่าตารางทางแยกโดยทั่วไป

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

Joe Celko แนะนำในหนังสือ "SQL Programming Style" เพื่อตั้งชื่อตารางเหล่านี้ในลักษณะภาษาที่เป็นธรรมชาติ ColoredByตัวอย่างเช่นถ้ารูปร่างเป็นสีโดยสีแล้วชื่อตาราง จากนั้นคุณอาจมีแผนภาพที่อ่านได้อย่างเป็นธรรมชาติเช่นนี้:

Shape <-- ColoredBy --> Color

ในทางกลับกันคุณสามารถพูดได้ว่าสีเป็นสีรูปร่าง:

Color <-- Colors --> Shape

แต่ดูเหมือนว่าตารางกลางจะเหมือนกับหลักการColorตั้งชื่อพหูพจน์ สับสนเกินไป

อาจชัดเจนที่สุดในการใช้หลักการColoredByตั้งชื่อ น่าสนใจว่าการใช้ passive voice ทำให้รูปแบบการตั้งชื่อชัดเจนยิ่งขึ้น


บิลขอบคุณ คำตอบที่น่าสนใจมาก
devuxer

@ บิล: ทุกอย่างเกี่ยวกับคำพ้องความหมายและการตั้งค่าคำพ้องความหมายมีผลต่อหลักการตั้งชื่อ
OMG Ponies

2
ฉันคิดว่าHasColorอาจเป็นอีกชื่อหนึ่งที่เป็นไปได้สำหรับตารางจุดตัดที่ใช้ภาษาธรรมชาติ
Bill Karwin

1
@ บิล: ปัญหาที่ฉันมีเกี่ยวกับหลักการตั้งชื่อนั้นคือhasColour/ ColouredByเพื่ออะไร? มันเอาชนะวัตถุประสงค์ของการตั้งชื่อเพื่อใช้DESCRIBEในการค้นหาความสัมพันธ์
OMG Ponies

5
คล้ายกับความคิดเห็นของ OMG Ponies จะเกิดอะไรขึ้นถ้าสิ่งอื่นสามารถมีสีได้? ถ้าฉันมีตารางอื่นที่แมป Text to Color ฉันจะต้องมีชื่อเฉพาะ อาจจะShapeHasColorและTextHasColor?
devuxer

21

ตั้งชื่อตารางตามที่คุณต้องการตราบใดที่เป็นข้อมูล:

COLOR_SHAPE_XREF

จากมุมมองของแบบจำลองตารางนี้เรียกว่าตารางการอ้างอิงการเข้าร่วม / เส้นตรง / ข้าม ฉันยังคงใช้นิสัย_XREFในตอนท้ายเพื่อทำให้ความสัมพันธ์ชัดเจน


1
ฉันก็ใช้ _XREF เช่นกัน ... มันสมเหตุสมผลสำหรับฉันเสมอ
James Cronen

ฉันขุดไอเดีย แต่ในฐานะผู้ใช้ AutoCAD ฉันต้องหาคำต่อท้ายที่แตกต่างจาก _XREF ...
Mike

7

นี่คือAssociative Entityและมักจะมีความสำคัญในสิทธิของตนเอง

ตัวอย่างเช่นความสัมพันธ์ระหว่าง TRAINS และ TIMES ทำให้เกิด TIMETABLE

หากไม่มีเอนทิตีใหม่ที่ชัดเจน (เช่นตารางเวลา) การประชุมคือการเรียกใช้คำสองคำพร้อมกันโดยให้ COLOUR_SHAPE หรือคล้ายกัน


6

ตารางการทำแผนที่คือสิ่งที่มักเรียกว่า

ColorToShape
ColorToShapeMap

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

ในกรณีนี้รูปร่างใด ๆ ก็สามารถจับคู่กับสีใดก็ได้ดังนั้นจึงเป็นแบบหลายต่อหลายสี
devuxer

2
BTW ไม่ว่าจะเป็นตารางการทำแผนที่หรือไม่ฉันก็ชอบแนวคิดในการใช้Toในชื่อ จะเป็นอย่างไรถ้าคุณมี Shape พร้อม HighlightColor ถ้าคุณเรียกมันว่าShapeHighlightColorมันค่อนข้างคลุมเครือไม่ว่าจะเป็น ShapeHighlight ที่แมปกับสีหรือรูปร่างที่แมปกับสีไฮไลต์ ดังนั้นShapeToHighlightColorอาจจะชัดเจนมากขึ้น
devuxer

FYI: Oracle (9i / 10g ยังไงก็ตาม) มีขีด จำกัด 32 อักขระสำหรับชื่อตารางดังนั้นคุณจึงไม่ต้องพูดมากเกินไป
OMG Ponies

ฉันใช้คำตอบข้างต้น แต่มีวิธีที่แตกต่างออกไปเล็กน้อย คือ Color_Shape_Map Convention: Table1_Table2_Map
Goldfish

6

ผมเคยทำงานกับ DBAs ที่เรียกว่าร่วมโต๊ะ

Colour_Shape เป็นเรื่องปกติธรรมดา - เว้นแต่ความสัมพันธ์นั้นจะมีชื่อเฉพาะโดเมนที่ชัดเจน


1
ฉันไม่ชอบขีดเพราะพวกเขามีความขัดแย้งกับต่างประเทศการตั้งชื่อที่สำคัญเช่นที่คุณจบลงด้วยชื่อที่น่ารังเกียจเช่นและColour_Shape_Colour Colour_Shape_Shape
Dan Bechard

5

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

ในกรณีของคุณ:

สี + รูปร่าง = ColorsShapes


หากคุณใช้เส้นทาง "ชื่อของตาราง" จะดีกว่าเนื่องจากเวอร์ชันเอกพจน์จะ "โดยปกติ" เป็นตารางเนมสเปซ
Andrew Haust

4

ฉันมักจะได้ยินที่เรียกว่า Junction Table ฉันตั้งชื่อตารางตามสิ่งที่รวมดังนั้นในกรณีของคุณไม่ว่าจะเป็น ColorShape หรือ ShapeColor ShapeColorฉันคิดว่ามันทำให้รู้สึกมากขึ้นสำหรับรูปร่างจะมีสีมากกว่าสีที่จะมีรูปร่างดังนั้นฉันจะไปกับ


4

Junction table

หรือ Bridge Table

หรือ Join Table

หรือ Map Table

หรือ Link Table

หรือ Cross-Reference Table

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


3

ตารางกลางหรือตารางเข้าร่วม

ฉันจะตั้งชื่อว่า "ColorShapes" หรือ "ColorShape" แล้วแต่ความต้องการของคุณ


3

ฉันยังเคยได้ยินคำว่าAssociative table ที่ใช้

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


แต่คุณจะตั้งชื่อโต๊ะว่าอะไร?
devuxer

ขึ้นอยู่กับสิ่งที่ตารางกำลังอธิบาย ถ้ามีข้อความว่า "อะไรก็ได้ที่เป็นสีส้มต้องเป็นรูปสี่เหลี่ยมขนมเปียกปูน" "อะไรก็ได้ที่เป็นสีม่วงต้องเป็นวงกลม" ฯลฯ คุณอาจเรียกมันว่าสิ่งหนึ่ง (อาจจะเป็น Colour_of_Shape) หากเป็นคำจำกัดความที่หลวมกว่า - รู้จักสีของรูปร่างทำให้รูปร่างเดียวปรากฏหลายครั้งอาจเป็น "Shape_Colour_Map"
Jonathan Leffler

2

โดยทั่วไปฐานข้อมูลส่วนใหญ่จะมีหลักการตั้งชื่อสำหรับดัชนีคีย์หลักและอื่น ๆ ใน PostgreSQL แนะนำการตั้งชื่อต่อไปนี้:

  • คีย์หลัก: tablename_columnname_ pkey
  • ข้อ จำกัด เฉพาะ: คีย์ tablename_columnname_
  • ข้อ จำกัด พิเศษ: tablename_columnname_ excl
  • ดัชนีเพื่อวัตถุประสงค์อื่น: tablename_columnname_ idx
  • คีย์ต่างประเทศ: tablename_columnname_ fkey
  • ลำดับ: tablename_columnname_ seq
  • ทริกเกอร์: tablename_actionname_after | before_ trig

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

  • ตารางที่เชื่อมโยง: tablename1_tablename2_ lnk

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

  • หรือตารางที่ชอบ: purposename_ lnk

1
สวัสดีชาวฮังการีเราพบกันใหม่
Dan Bechard

1

ฉันเป็นส่วนหนึ่งของคำว่า "Hamburger Table" มาโดยตลอด ไม่รู้ว่าทำไม - ฟังดูดี

โอ้ฉันจะเรียกตารางว่า ShapeColor หรือ ColorShape ขึ้นอยู่กับตารางที่ใช้กันทั่วไป


1

ตาราง "Many-Many" ฉันจะเรียกมันว่า "ColourShape" หรือในทางกลับกัน


1

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

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

ตัวอย่างเช่นถ้าคุณต้องการเก็บพื้นผิวนอกเหนือจากสีจะเป็นอย่างไร? การขยายตาราง SHAPE_COLOR อาจดูเป็นเรื่องที่น่าขัน

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

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


1

อาจจะเฉยๆColoredShape?

ฉันไม่แน่ใจว่าฉันได้รับคำถาม เกี่ยวกับกรณีนี้หรือคุณกำลังมองหาหลักเกณฑ์ทั่วไป


0

ฉันจะตั้งชื่อด้วยชื่อที่แน่นอนของตารางที่เข้าร่วม = ColorShape


0

ในการยึดติดกับสิ่งที่ Developer Art เกี่ยวข้อง

ColorShape

จะเป็นหลักการตั้งชื่อตามปกติ ในแผนภาพ ER มันจะเป็นความสัมพันธ์



0

ฉันจะใช้r_shape_colorsหรือr_shape_colorขึ้นอยู่กับความหมายของมัน
r_จะทดแทนxref_ในกรณีนี้


0

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


0

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

โปรดทราบว่าควรสร้างคีย์ต่างประเทศบนตารางการรวมนี้ซึ่งจะอ้างอิงทั้งตารางสีและรูปร่างซึ่งจะช่วยในการระบุความสัมพันธ์ด้วย


0

การประชุมใหญ่ที่ฉันเห็นบ่อยมากสำหรับการเข้าร่วมตารางที่ฉันชอบเป็นการส่วนตัวคือ 'Colour_v_Shape' ซึ่งฉันเคยได้ยินชาวบ้านเรียกขานว่า 'เทียบกับตาราง'

ทำให้เห็นได้ชัดเจนในภาพรวมว่าตารางแสดงถึงความสัมพันธ์แบบกลุ่มต่อกลุ่มและช่วยหลีกเลี่ยงสถานการณ์ที่สับสน (แม้ว่าจะหายาก) เมื่อคุณพยายามเชื่อมคำสองคำที่อาจรวมกันเป็นคำประสมตัวอย่างเช่น 'Butter' และ 'นม' อาจกลายเป็น 'ButterMilk' แต่ถ้าคุณต้องการเป็นตัวแทนของหน่วยงานที่เรียกว่า 'Buttermilk' ด้วยล่ะ?

ทำแบบนี้คุณจะได้ 'Butter_v_Milk' และ 'Buttermilk' - ไม่ต้องสับสน

นอกจากนี้ฉันชอบคิดว่ามีการอ้างอิง Foo Fighters ในคำถามเดิม

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