ทำไมชื่อตาราง / คอลัมน์ / ดัชนีของออราเคิล จำกัด เพียง 30 ตัวอักษร?


149

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

มีใครรู้บ้างไหมว่าทำไมขนาดไม่ใหญ่กว่านี้หรือใหญ่กว่า 11 กรัม?


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

เมื่อใดก็ตามที่ฉันเห็นการคัดค้านในบ้านฉันคิดว่าถึงเวลากัดกระสุนและคัดออก หากผู้คนกำลังเรียกใช้สคริปต์ที่พวกเขาไม่ได้ตรวจสอบหรือบำรุงรักษาเมื่อพวกเขาอัพเกรด Oracle เวอร์ชันแล้วปล่อยให้พวกเขาประสบผลที่ตามมาของตัวเลือกที่ ระบุแฟลกที่ใช้งานร่วมกันได้ขนาดสูงสุดถึง 4,000 จากนั้นช่วยฉันประหยัดเวลาเมื่อฉันสร้างวัตถุที่ต้องนับเป็น 30 ต่อเนื่องเพื่อตรวจสอบชื่อว่า 'ตกลง'


3
เนื่องจากต้องมีการ จำกัด หรือไม่ สร้างตัวละคร 64 ตัวและคุณอาจพบว่ามีคนถามว่าทำไมมันไม่ใช่ 128 เป็นต้น .. นานแค่ไหนที่เป็นสตริง?
ประธาน

45
จริง แต่ 30 เป็นสตริงสั้น ๆ เหตุใดจึงไม่เป็นขนาด 4,000 Varchar2 ออราเคิลสนใจจริง ๆ นานแค่ไหนเมื่อมีการแยกวิเคราะห์แบบสอบถาม?
Chris Gill

22
@TheChairman PostgreSQL จำกัด ฉันไว้ที่ 63 ตัวอักษรและฉันไม่เคยมีปัญหากับการจำกัดความยาวนั้น มันมีขนาดใหญ่พอที่ชื่อของฉันจะพอดีและถ้าฉันกำลังพิจารณาชื่ออีกต่อไปก็ถึงเวลาที่จะเริ่มคิดเกี่ยวกับผลกระทบเชิงลบต่อการอ่าน ในทางกลับกันฉันมักพบข้อจำกัดความยาวชื่อใน Oracle และฉันถูกบังคับให้ลดความสามารถในการอ่านชื่อของฉันเนื่องจากมีความยาวอักขระไม่เกิน 30 ตัว บางคนอาจบ่นว่ามีขีด จำกัด 64 แต่ผู้คนจำนวนมากมีปัญหาอยู่แล้วเนื่องจากความยาวของอักขระสูงสุด 30 ตัว เกี่ยวกับการใช้งาน 99% ของการใช้งานและ Oracle ล้มเหลวที่นี่
jpmc26

1
มาเลยออราเคิลคุณกลายเป็นไดโนเสาร์! Microsoft กำลังทำงานดีเพื่อให้เซิร์ฟเวอร์ SQL เป็นมิตรยิ่งขึ้น ตอนนี้ผ่อนคลายข้อ จำกัด ความยาวชื่อ
user3454439

1
กรอไปข้างหน้าสู่ Oracle 12cR2 ปัจจุบันมีขนาด 128 ไบต์แทนที่จะเป็น 30 :-) docs.oracle.com/en/database/oracle/oracle-database/12.2/newft/ …
Stefan L

คำตอบ:


71

ฉันเชื่อว่าเป็นมาตรฐาน ANSI

แก้ไข:

ที่จริงฉันคิดว่าเป็นมาตรฐาน SQL-92

มาตรฐานรุ่นใหม่กว่าจะปรากฏขึ้นเพื่ออนุญาตให้ใช้ชื่อที่เป็นอักขระ 128 ตัว แต่ Oracle ยังไม่รองรับสิ่งนี้ (หรือได้รับการสนับสนุนบางส่วนตราบเท่าที่สามารถใช้ได้ 30 ตัวอักษร Hmmm.)

ค้นหา "F391, Long identifiers" ในหน้านี้ ... http://stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/ap_standard_sql001.htm

(กำลังมองหาการอ้างอิง)


1
อืมนั่นไม่ใช่วิธีที่ฉันอ่านเอกสารนั้น มันบอกกับฉันว่า F391 เป็นรายการในสเปค SQL / Foundation (อะไรก็ตามที่เป็น) และออราเคิลมีการสนับสนุนบางส่วนด้วยความยาวไม่เกิน 30 อักขระ
skaffman

21
บางส่วนปฏิบัติตาม เป็นเรื่องตลก "สกรูของเราบางส่วนปฏิบัติตามมาตรฐานเมตริกยกเว้นว่าไม่ใช่สกรู"
Jens Schauder

5
ฉันไม่ได้อ่านรายละเอียดสเปค F391 แต่ฉันสมมติว่า (อาจไม่ถูกต้อง) ว่า "ตัวระบุแบบยาว" หมายถึงการเพิ่มความยาวตัวระบุจาก 30 เป็น 128 ดังนั้นบอกว่าคุณ "สนับสนุนบางส่วน" โดยการอนุญาต 30 ตัวอักษรคือ หน้าด้านเล็กน้อย คุณไม่สนับสนุนมาตรฐานใหม่คุณยังคงสนับสนุนมาตรฐานเดิม (ถึง 25% ของมาตรฐานใหม่) นั่นสมเหตุสมผลไหม? !!?
cagcowboy

7
มาตรฐาน SQL-92 อยู่ที่นี่contrib.andrew.cmu.edu/~shadow/sql/sql1992.txtแต่ถ้าคุณอ่านหัวข้อ "17.1 คำอธิบายของพื้นที่ตัวอธิบายรายการ SQL" ต้องระบุตัวระบุชื่อและสกีมาอย่างน้อย 128 ตัวละคร
Rick

46
ข้อเท็จจริงที่ว่า Oracle fanboys ไม่เห็นประโยชน์ของตัวระบุถ่านมากกว่า 30 รายการรบกวน "ทำให้ชื่อของคุณมีความหมาย / เป็นคำอธิบายใช้ขีดล่างแทนตัวอูฐและมีความยาวไม่เกิน 30 อักขระ" นั่นจะไม่มีวันเกิน 30 ตัวอักษร amirite? ตัวย่อของคุณเหมือนตัวย่อและเมื่อไม่มีชื่อที่สมเหตุสมผลให้ใช้การอ่าน / อัปเดตเอกสารตลอดทั้งวัน
Adam Jones

45

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

  l_table_name VARCHAR2(30);
BEGIN
  SELECT table_name
    INTO l_table_name
    FROM dba_tables
   WHERE ...

จะแตกทันทีเพราะ DBA 15 ปีที่ผ่านมาใช้ VARCHAR2 (30) มากกว่าDBA_TABLES.TABLE_NAME%TYPEในสคริปต์จะทำให้เกิดการประท้วงครั้งใหญ่ ฉันจะเดิมพันว่า Oracle เพียงแห่งเดียวมีหลายพันที่ซึ่งสิ่งเหล่านี้ทำกันมาหลายปีในแพ็คเกจและส่วนประกอบต่างๆ การเดินทุกรหัสที่มีอยู่เพื่อสนับสนุนตัวระบุอีกต่อไปจะเป็นโครงการที่ยิ่งใหญ่ที่เกือบจะแน่นอนจะสร้างวิธีที่ค่าใช้จ่ายมากขึ้นในเวลาที่นักพัฒนาเวลา QA, และข้อบกพร่องที่เพิ่งแนะนำกว่ามันจะสร้างผลประโยชน์


13
+1 นี่เป็นหนึ่งในหลาย ๆ การออกแบบที่สืบทอดมรดกของออราเคิล
skaffman

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

6
ไม่เพียงแค่เขียนโค้ด DBA หลายล้านบรรทัด แต่ยังมีข้อสงสัยมากมายเกี่ยวกับรหัสภายในของ Oracle หัวข้อนี้เกิดขึ้นในเซสชันที่มีสตีเว่นเฟวเออร์สเตนและเขาบอกว่าเขาไม่คิดว่าพวกเขาจะเปลี่ยนมัน
Matthew Watson

10
พวกเขาไม่สามารถแยกแยะได้ว่ามันเป็นคุณสมบัติใหม่อย่างใดอย่างหนึ่ง ... พวกเขาต้องการใช้เวลามากในการขยายขีด จำกัด แล้วประกาศว่า "ตอนนี้คุณสามารถใช้ชื่อที่มีความยาวเกิน 30 อักขระ!" พวกเขาจะเป็นหุ้นหัวเราะ
skaffman

9
หากคุณยังคงใช้สคริปต์อายุ 15 ปีมีบางอย่างผิดปกติมาก นอกจากนี้การแก้ไขจะเป็นค่าใช้จ่ายครั้งเดียว (อาจจะมีบางอย่างสำหรับการบำรุงรักษาอย่างต่อเนื่อง) ในขณะที่นักพัฒนาจะยังคงเสียเวลาโดยไม่จำเป็นต้องประดิษฐ์ชื่อย่ออย่างน่ากลัวอย่างไม่มีกำหนด @skaffman พวกมันเป็นหุ้นที่หัวเราะแล้วและไม่ได้แก้ไข (และโฮสต์ของการตัดสินใจการออกแบบอื่น ๆ ที่น่าสมเพชในยุคสมัยใหม่เช่นไม่มีบูลีนหรือประเภทเพิ่มอัตโนมัติ) เท่าที่ฉันกังวล
jpmc26

11

ฉันค้นหามันและพบคำถามนี้ผ่านทาง Google แต่ก็พบว่าใน Oracle 12c Release 2 (12.2) นี่ไม่ใช่กรณีที่เข้มงวดอีกต่อไป ( https://oracle-base.com/articles/12c/long-identifiers-12cr2 )

ณ จุดหนึ่งทุก DBA หรือนักพัฒนาจะมีจุดที่ขีด จำกัด 30 อักขระสำหรับชื่อวัตถุทำให้เกิดปัญหา ขีด จำกัด นี้อาจเจ็บปวดอย่างยิ่งเมื่อทำโครงการย้ายข้อมูลจาก SQL Server หรือ MySQL ไปยัง Oracle ใน Oracle Database 12cR2 ความยาวสูงสุดของตัวระบุส่วนใหญ่คือ 128 อักขระ

นี่คือคุณสมบัติใหม่ใน 12.2 ตาม ( http://blog.dbi-services.com/oracle-12cr2-long-identifiers/ ) ตามที่โพสต์นั้น 12.1 ยังคง จำกัด อยู่ที่ 30 ตัวอักษร


แก้ไข: นี่คือลิงค์ไปยังเอกสารทางการของ Oracle ที่อธิบายการเปลี่ยนแปลง ( https://docs.oracle.com/cloud/latest/exadataexpress-cloud/CSDBF/longer-identifier-names.htm#CSDBF-GUID-F4CA155F-5A37-4705-8443-0A8C9E3F875C )

เริ่มต้นด้วย Oracle Database 12c Release 2 (12.2) ความยาวสูงสุดของชื่อตัวระบุสำหรับวัตถุฐานข้อมูลส่วนใหญ่ได้เพิ่มเป็น 128 ไบต์


128 ไบต์ / 4 ไบต์ (Unicode) = 32 ตัวอักษร อย่างน้อยความเข้าใจของฉันก็คือว่า 4 ไบต์สำหรับอักขระที่ไม่ใช่ Unicode ไม่ใช่เรื่องแปลกอะไร ฉันต้องสงสัยว่าเพียงแค่หมายความว่าพวกเขากำลังสนับสนุน Unicode หรือไม่ เหมือนVARCHAR2(2)ไม่ได้หมายถึง 2 ตัวอักษร แต่ 2 ไบต์
เซท

1
ฉันเห็นจุดของคุณแล้ว แต่ตัวอักษรกับไบต์นั้นขึ้นอยู่กับชุดอักขระฐานข้อมูลของคุณ การตั้งค่านั้นกำหนดการเข้ารหัสสำหรับ char datatypes (เช่น varchar2) รวมถึงการเข้ารหัสสำหรับตัวระบุ db สิ่งนี้ตรงกันข้ามกับชุดอักขระประจำชาติซึ่งใช้สำหรับประเภทข้อมูล nchar ใช่ถ้าคุณมีการเข้ารหัสที่ตัวระบุของคุณกำลังใช้ 4 ไบต์ต่อตัวอักษร (สมมติว่าสามารถใช้เป็นชุดอักขระ DB) ตอนนี้คุณจะมี 32 แทน 7 แต่ฉันคิดว่าตัวระบุกรณีการใช้งานส่วนใหญ่จะเป็น อักขระไบต์เดียว
Kanmuri

6

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

ตัวอย่างเช่นข้อตกลงในการตั้งชื่อคีย์ต่างประเทศ

FK_<table1>_<table2> 

จำกัด ชื่อตารางไม่เกิน 13 อักขระ ฐานข้อมูลส่วนใหญ่จะต้องการคำนำหน้าและคำต่อท้ายเพิ่มเติมจำกัดความยาวของชื่อตาราง


5

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


งั้นทำตารางให้กว้างขึ้นแล้วงั้นเหรอ?
skaffman

2
มันไม่ใช่ตาราง แต่ซอฟต์แวร์ไคลเอ็นต์ได้รับข้อผิดพลาดจากฐานข้อมูลอย่างไร
Gary Myers

ความยาว @skaffman SQLERRM เป็นข้อกำหนด API / ABI การเปลี่ยนแปลงสิ่งนี้จะหมายถึงต้องทำการปะไดรเวอร์ OCI ทุกตัวบนดาวเคราะห์ พวกเขาสามารถเปลี่ยนการเปลี่ยนแปลงไปยังไคลเอนต์เพื่อเพิ่ม buflen ใน OCI 13 ก่อนและเซิร์ฟเวอร์ในบางสิ่งเช่น Oracle 15 โดยที่ไคลเอนต์ OCI 10 จะไม่ได้รับการสนับสนุนอีกต่อไป (บางทีพวกเขากำลังพิจารณาอยู่ในตอนนี้ แต่รุ่นสำคัญของ oracle จะเปิดตัวทุก ๆ สองสามปีและจากนั้นเราอาจยังประสบปัญหาการอัพเกรดสคริปต์ / แอปพลิเคชันเมื่อแอพย้ายไปยังเซิร์ฟเวอร์ / ไคลเอนต์อื่น)
cowbert

4

ฉันเชื่อว่าความยาวตัวระบุ 30 ตัวนั้นมาจากภาษาโคบอลซึ่งเป็นมาตรฐานในปลายปี 1950 เนื่องจากโปรแกรม COBOL เป็นผู้ใช้หลักของ SQL (และ SEQUEL ก่อนหน้านั้น (และ QUEL ก่อนหน้านั้น)) สิ่งนี้จะต้องดูเหมือนว่ามีจำนวนที่เหมาะสมสำหรับความยาวของตัวระบุ


5
ฉันเชื่อว่า Oracle เวอร์ชันแรกเขียนขึ้นใน Fortran ซึ่งฉันคิดว่ามีความยาวตัวระบุที่ 31 ซึ่งอาจเกี่ยวข้องกัน
David Aldridge

4

'ข้อ จำกัด ' ทั้งหมดเหล่านี้เหลือการตอบสนองต่อข้อ จำกัด ที่กำหนดโดยสถาปัตยกรรมโปรเซสเซอร์ซึ่งได้รับการยกย่องจากยุค 70 ตั้งแต่เวลานั้นโปรเซสเซอร์ได้พัฒนาจนถึงจุดที่ข้อ จำกัด เหล่านี้ไม่จำเป็นอีกต่อไป; พวกเขาเหลือเพียงแค่ อย่างไรก็ตามการเปลี่ยนพวกเขาเป็นเรื่องใหญ่สำหรับนักเขียนของ RDBMS เนื่องจากขีดจำกัดความยาวเหล่านี้ส่งผลกระทบต่อทุกสิ่งที่อยู่ท้ายน้ำการเปลี่ยนแปลงจึงเป็นเรื่องที่ไม่เหมาะสมที่จะกล่าวว่าชื่อกระบวนงานที่ยาวขึ้นสามารถและอาจทำให้สิ่งอื่น ๆ อีกมากมายเช่นรายงาน exeception พจนานุกรมข้อมูล ฯลฯ เป็นต้น ฉันต้องการเขียน Oracle RDBMS ใหม่


2

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

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

ไม่ต้องสนใจ SQL92 มันเป็นความสอดคล้อง ODBC ที่สำคัญกับฐานข้อมูลสากลในปัจจุบันและผู้ค้ารายอื่น ๆ ได้ให้สิ่งที่ดีกว่า Oracle ตัวอย่างเช่น Teradata ที่ไม่ได้รับการมองว่าเป็นผู้เล่นที่แพร่หลายผู้เล่นสองคนที่มีและไม่มีเครื่องหมายคำพูดอดีตที่มีขีด จำกัด 30 ตัวอักษรซึ่งเป็นการนำ ODBC แบบเต็มรูปแบบมาใช้ .

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

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

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


ไม่ใช่กับ Oracle ODBC เป็นเด็กของ Microsoft ไม่ใช่ Java หนึ่งคน มันยังคงเป็นตัวช่วยแยกต่างหากที่เชื่อมโยงกับ OCI (ดูวิธีการปรับใช้ instantclient - เพื่อให้ ODBC ทำงานกับ instantclient ได้คุณต้องการทั้งไดรเวอร์ OCI และรหัสไปรษณีย์ ODBC ทันที) แพลตฟอร์มไคลเอนต์หลักของ Oracle (นอกเหนือจาก Pro * C / C / C ++ เดิม) คือ JDBC ซึ่งเชื่อมโยงโดยตรงกับ OCI ไม่ใช่ ODBC
cowbert

1

ความคิดเห็นทั้งหมดข้างต้นนั้นถูกต้อง แต่คุณต้องคำนึงถึงต้นทุนด้านประสิทธิภาพของชื่อที่ยาวขึ้น ในต้นปี 1990 เมื่อ Informix ตั้งป้ายโฆษณาขนาดใหญ่ "Informix เร็วกว่า Oracle!" บนเส้นทาง 101 ถัดจากสำนักงานใหญ่ของออราเคิล Informix อนุญาตให้ใช้ชื่อตารางที่สั้นกว่า 18 ตัวอักษรเท่านั้น เหตุผลนั้นชัดเจน - ชื่อตารางในรูปแบบตัวอักษร (เช่นชื่อจริงแทนที่จะเป็น 't138577321' หรืออะไรทำนองนั้น) ถูกเก็บไว้ใน Data Dictionary ชื่อที่ยาวกว่าเท่ากับ Data Dictionary ที่ใหญ่กว่าและเนื่องจาก Data Dictionary ถูกอ่านทุกครั้งที่แบบสอบถามต้องการการแยกวิเคราะห์อย่างหนักพจนานุกรมข้อมูลที่มีขนาดใหญ่กว่าจึงมีประสิทธิภาพต่ำ ...


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

-7

ตกลงมีข้อ จำกัด อยู่ ....

แต่คุณต้องการอักขระเกิน 30 ตัวเพื่อตั้งชื่อตาราง / ดัชนี / คอลัมน์หรือไม่?

เมื่อเขียนคำสั่งด้วยข้อ จำกัด นั้นฉันยังจะพบชื่อคอลัมน์ / ตารางบางตัวที่น่ารำคาญ หากขีด จำกัด สูงกว่าฉันอาจพบในตารางที่ต้องใช้แบบสอบถามเช่น:

select unique_identifier_column, 
time_when_the_user_remembered_to_change_the_row_in_the_receipt_table, 
foreign_key_to_the_ap_invoice_distributions_history_table_related_to_the_all_rows_table 
from ap_invoices_really_really_all_all_rows_present_in_this_ebs_table.

ฉันขอโทษสำหรับคำที่ยิ่งใหญ่: P


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

10
มีสาเหตุหลายประการที่เราต้องการมากกว่า 30 ตัวอักษรถึงแม้ว่าโดยปกติจะมี 30 ตัวอักษรก็เพียงพอแล้ว บางครั้งชื่อตารางจะต้องละเอียดเพียงพอที่จะมีความหมาย ตัวอย่างเช่นฉันมีตารางนี้เรียก sch_PatternRunTimeException มันมีความยาว 30 ตัวอักษร ตอนนี้ฉันต้องเพิ่มการเรียกตารางมิเรอร์ sch_DevPatternRunTimeException มาตรฐานการตั้งชื่อตัวละครพิเศษ 3 ตัวนี้ใช้ไม่ได้กับ Oracle, MSSQL ไม่มีปัญหา นี่เป็นการบังคับให้ฉันต้องหาชื่อใหม่ ตารางการเปลี่ยนชื่อทำได้ แต่จะส่งผลต่อการดำเนินงานของลูกค้าซึ่งเราพยายามหลีกเลี่ยง
dsum

6
หากใน 99.9% เปอร์เซ็นต์ของกรณีที่เป็นไปได้ +30 ตัวอักษรน่ารำคาญไม่ได้หมายความว่าพวกเขาจะได้ประโยชน์อีก 0.1%
René Nyffenegger

14
Ahhh ข้อโต้แย้งที่ลื่น ขีด จำกัด ของตัวอักษรและตัวเลขเพียง 4 ตัวเท่านั้นที่จะทำให้เราได้รับมากกว่า 1 ล้านชุดตารางดังนั้นจึงไม่มีใคร "ต้องการ" มากกว่า 4 ตัว แต่ที่นี่เราอยู่ และมันก็ไม่ได้จริงๆ 30 ตัวอักษรมันน้อยกว่า 30 ตัวอักษรเนื่องจากรูปแบบการตั้งชื่อเคสปาสคาลของฉันต้องถูกทิ้งด้วยการขาดความไวของตัวพิมพ์เล็กและแทนที่ด้วยชื่อที่คั่นด้วยขีดล่าง รวมกับคำนำหน้า / คำต่อท้ายที่หลากหลายและคุณโชคดีที่มี 20 ตัวอักษร ใครจะไม่ค่อนข้างชื่อดัชนีที่แข็งแกร่งสะท้อนกับข้อผิดพลาดการละเมิดที่ผสมของตัวย่อและขีดล่าง?
b_levitt

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