การเพิ่มส่วนนำหน้า 'tbl' ลงในชื่อตารางเป็นปัญหาหรือไม่


92

ฉันดูวิดีโอบางส่วน Brent Ozar ( เช่นนี้ตัวอย่างเช่น ) และเขาก็แสดงให้เห็นไม่ prefixing ตารางที่มีหรือ‘tbl’‘TBL’

บนอินเทอร์เน็ตฉันพบว่ามีบางบล็อกที่บอกว่าไม่ได้เพิ่มอะไรลงไปในเอกสารประกอบและนอกจากนี้“ มันใช้เวลาในการอ่านนานกว่า”

คำถามและข้อควรพิจารณา

  • มันเป็นปัญหาหรือไม่? เพราะฉันเติมตารางด้วย 'tbl' ตั้งแต่งาน dba แรกของฉัน (DBA อาวุโสบอกให้ฉันทำแบบนั้นกับองค์กร)
  • นี่เป็นสิ่งที่ฉันต้องกำจัดหรือไม่ ฉันทำการทดสอบคัดลอกตารางที่มีขนาดใหญ่มากและให้คำนำหน้า 'tbl' ในขณะที่รักษาอีกอันไว้โดยไม่มีมันและฉันไม่ได้สังเกตเห็นปัญหาเรื่องประสิทธิภาพใด ๆ

66
ตัวนับคำถาม: คุณใส่คำนำหน้าชั้นเรียนทั้งหมดของคุณในภาษาการเขียนโปรแกรม (Java, C ++, Scala, .... ) ด้วยClassหรือไม่
a_horse_with_no_name

78
เมื่อพวกเขา"ใช้เวลาอ่านนานกว่า"พวกเขาไม่ได้แปลว่าปัญหาเรื่องประสิทธิภาพ มนุษย์ใช้เวลาในการอ่านรหัสนานขึ้น อ่านง่ายกว่าอะไร ประโยคนี้: Wrdthis wrdis wrda wrdsimple wrdsentence. หรือนี้: This is a simple sentence.?
ypercubeᵀᴹ

3
สิ่งนี้อาจเกี่ยวข้องกับ: stackoverflow.com/questions/111933/…
Walfrat

42
นี่คือกรณีที่ปฏิบัติกับมัน บ่อยครั้งการพิมพ์ตัวอักษรตัวแรกของชื่อตารางเพื่อสะดวกในการกระโดดลงในรายการ เมื่อตารางทั้งหมดเริ่มต้นด้วย 't' ที่ไม่ทำงานอีกต่อไป ในทำนองเดียวกันจะไม่ช่วย IntelliSense ให้คุณเช่นกัน
shawnt00

30
ฉันไม่ใช่ DBA ฉันเป็นโปรแกรมเมอร์ แต่โปรดอย่าทำเช่นนี้ คุณทำให้ฉันช้าลงและทำให้รหัสของฉันยากต่อการอ่านและบำรุงรักษา และเพื่ออะไร ฉันไม่เห็นประโยชน์ใด ๆ เลย
Dawood ibn Kareem

คำตอบ:


217

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

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

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

เราต้องทำอะไรบางอย่างเพื่อให้การประมวลผลเร็วขึ้นโดยไม่ทำลายรายการ "ผู้รู้อะไร" ซึ่งทั้งหมดขึ้นอยู่กับตารางการจัดสรรรายเดือน ฉันตัดสินใจเล่นนักมายากลและชักผ้าปูโต๊ะออกจากข้างใต้พวกเขา ผมไปโรงเรียนเก่าและใช้พาร์ติชันดู ข้อมูลมีการตั้งค่าสถานะ IsComplete แล้วดังนั้นฉันจึงสร้างสองตาราง - แต่ละรายการมีข้อ จำกัด การตรวจสอบที่ตรงกันข้าม: MonthlyAllocationComplete, MonthlyAllocationInComplete

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

พี่ชายของเรื่องเจ๋ง ๆ แต่คุณจะไปไหน?

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

เจ้านายของคุณอาจถามว่า: อะไรเป็นรางวัลสำหรับ บริษัท สำหรับทุกอย่างที่ทำงานอีกครั้ง?

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

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

การตั้งชื่อแบบแผนนั้นดีอย่าเพิ่งทาสีตัวเองลงในมุมห้อง


132

เบรนต์ที่นี่ (ผู้ชายที่คุณอ้างถึงในคำถาม)

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


10
หากคุณกำลังเขียนคำสั่งแทรกฉันหวังว่าคุณจะรู้อยู่แล้วว่าสิ่งที่คุณใส่เข้าไปนั้นเป็นโต๊ะหรือมุมมอง ...
Joe

@ โจ: "ฉันหวังว่าคุณจะรู้ว่าสิ่งที่คุณใส่เข้าไปคือตารางหรือมุมมอง" - มีสถานการณ์ที่คุณอาจแทรกเข้าไปในมุมมองและรหัสของคุณไม่ควรสนใจ (เครื่องมือบางอย่างทำให้การจัดการข้อมูลสนับสนุน ในมุมมองที่ง่ายและinstead ofทริกเกอร์สามารถทำให้เป็นตัวอย่างที่ซับซ้อนได้มากขึ้น) แม้ว่าจะยังคงชี้ไปที่ไม่ต้องการ / ต้องการคำนำหน้าชื่อ
David Spillett

119

นี่เป็นเหตุผลส่วนตัว แต่นี่คือสิ่งที่ฉันใช้: คำนำหน้า tbl ไม่มีประโยชน์

คุณดูโค้ดในสถานการณ์ต่างๆกี่สถานการณ์และคุณไม่สามารถบอกได้ว่ามีบางอย่างในตารางหรืออย่างอื่นหรือไม่

tbl เพิ่มค่าอะไรยกเว้นเมื่อคุณดูรายการตารางใน Object Explorer คุณต้องทำงานเพิ่มเติมเพื่อค้นหาสิ่งที่คุณกำลังมองหา

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


11
ตัวอย่างเช่นใน PostgreSQL มุมมองนั้นเป็นจริงของตารางเช่นกัน: postgresql.org/docs/9.6/static/rules-views.htmlดังนั้นความแตกต่างก็มีความสำคัญน้อยกว่า
dezso

42

มันเป็นวิธีปฏิบัติที่แย่มาก

tbl
tbl_
Table_
t_

... เห็นพวกเขาทั้งหมดในการผลิต

หนึ่งในผลิตภัณฑ์ที่ฉันกำลังใช้งานอยู่นั้นมีชื่อครึ่งหนึ่งของตารางtbl_whateverและอีกครึ่งหนึ่งชื่อ "ปกติ" - พวกเขามีนักพัฒนาที่ทำงานกับมาตรฐานที่แตกต่างกันอย่างชัดเจน อีกหนึ่งของนิสัยที่ไม่ดีของพวกเขาจะ prefixing ชื่อคอลัมน์ที่มีปุ่มต่างประเทศด้วยfkตามด้วยชื่อตารางแล้วชื่อคอลัมน์ให้ชื่อคอลัมน์ดังกล่าวเป็นที่น่ากลัวfk fktbl_AlarmsfkAlarmsIDระเบียบการตั้งชื่อนั้นเป็นเพียงส่วนขยายที่เป็นตรรกะของtbl_%มนต์ทั้งหมดและคุณสามารถดูว่ามันไร้สาระได้อย่างไร!

ฉันเกือบลืมเกี่ยวกับฐานข้อมูลอื่นที่ทำให้ฉันร้องไห้เป็นประจำทุกวัน ประเภทข้อมูลนำหน้าชื่อคอลัมน์ ... dtPaymentDateเนื่องจากชื่อต้องการdtคำนำหน้าจริงหรือไม่ `


22
อย่างน้อยคุณก็ไม่ได้ทำงานกับฐานข้อมูลที่มีตัวพิมพ์เล็กและใหญ่ดังนั้น tbl_Foo และ Tbl_Foo จึงไม่ใช่เอนทิตี้ที่แตกต่างกัน ...
billinkc

23

comD't verListen prepTo adjThose adjOther nouPeople proYou คำแนะนำให้ใช้ nouPrefixes prep ด้วย projour nouNames ของคุณ proI ได้รับคำแนะนำจากผู้ใช้ที่เริ่มต้นใหม่การใช้โปรแกรมเหล่านี้เป็นการเตรียมการล่วงหน้า

comSee adv adjEffective proIt verIs เป็นอย่างไร nouPeople auxCan verUnderstand proYour nouWriting adjBetter!


ขอให้เรายังคงอภิปรายนี้ในการแชท
sampathsris

21

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

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

นอกจากวาดภาพตัวเองลงในมุมแล้วนี่เป็นเพียงแค่การเติมเต็ม ไวยากรณ์ SQL นั้นแม่นยำพอที่นักพัฒนาควรรู้เสมอหากพวกเขากำลังพูดถึงฟิลด์ชุดระเบียนหรือชุดข้อมูล (ซึ่งอาจเป็นตารางมุมมอง ฯลฯ ) แม้ว่ามันอาจจะเป็นเครื่องช่วยการเรียนการสอนที่ดี แต่ไวยากรณ์นี้มักไม่ควรมีอยู่ในฐานข้อมูลการผลิต มันอาจเป็นอันตรายต่อความชัดเจนและทำให้การค้นหาตารางที่คุณมองหายากขึ้นโดยเฉพาะถ้ามีธีมการตั้งชื่ออื่น ๆ ปรากฏขึ้นเช่นtbl vs. table vs. tabและอื่น ๆ

ฐานข้อมูลไม่สนใจสิ่งที่คุณเรียกว่าตารางเขตข้อมูลและอื่น ๆ พวกเขาเป็นเพียงไบต์ของข้อมูลที่จัดเรียงตามลำดับเฉพาะโดยผู้ดำเนินการหรือสคริปต์ของมนุษย์ อย่างไรก็ตามคนที่ต้องรักษาข้อมูลนี้จะต้องขอบคุณชื่อที่มีความหมายเช่น "ผู้ใช้", "คำสั่งซื้อ" และ "บัญชี" นอกจากนี้ยังมีประโยชน์มากกว่าถ้าคุณใช้คิวรี SQL เช่น "ตารางแสดงเช่น 'a%'" การใช้ส่วนนำหน้าและส่วนต่อท้ายอาจทำให้การบำรุงรักษาไม่สำคัญอย่างอื่นโดยไม่จำเป็น


14
เช่นเดียวกับคนจำนวนมากที่ใช้สัญลักษณ์ฮังการีในทางที่ผิดคำตอบของคุณโต้แย้งโดยสิ้นเชิงกับความแตกต่างระหว่าง Apps Hungarian และ Systems Hungarian
Ben Voigt

8
@ BenVoigt จริงมาก แต่คุณลืมการเชื่อมโยงบังคับ
Wildcard

12

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

หนึ่งในคำนำหน้าใช้กันอย่างแพร่หลายเป็นTblหรือtblแต่แล้วฉันมีTBLและtbl_และแม้กระทั่ง*TableName*_Tbl

ป้อนคำอธิบายรูปภาพที่นี่

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

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

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


11

ใช่เพิ่มคำนำหน้าว่าหมายถึงประเภทของวัตถุที่เป็นปัญหาและไม่จำเป็น เพราะ,

  1. บางครั้งวัตถุเริ่มต้นชีวิตเป็นสิ่งที่ แต่จะจบลงกลายเป็นอย่างอื่น (เช่นตารางtblXxxถูกแบ่งออกเป็นtblXxxYและtblXxxZด้วยเหตุผลบางอย่างและแทนที่ด้วยมุมมองที่รวมสองตารางใหม่ตอนนี้คุณมีมุมมองที่เรียกว่าtblXxx)
  2. เมื่อคุณพิมพ์tblในตัวแก้ไขคุณสมบัติการทำให้สมบูรณ์อัตโนมัติของแฮงค์เป็นเวลา 45 วินาทีจากนั้นจะแสดงรายการ 4000 รายการให้คุณเห็น

แต่...

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

เรามีระบบ ERP ที่ใช้เอนทิตีซึ่งมีการเขียนตรรกะทางธุรกิจไว้ใน Oracle PL / SQL มันเกือบสองทศวรรษแล้ว แต่เป็นระบบที่เสถียรมาก (นี่ไม่ใช่ระบบเดิมเรากำลังพัฒนาอยู่เรื่อย ๆ )

ระบบใช้เอนทิตีและแต่ละเอนทิตีเชื่อมโยงตารางหลายมุมมองหลายแพ็คเกจ PL / SQL และโฮสต์ของวัตถุฐานข้อมูลอื่น ๆ

ตอนนี้เราต้องการให้อ็อบเจกต์ที่เป็นของเอนทิตีเดียวกันมีชื่อเดียวกัน แต่ยังไม่สามารถแยกแยะวัตถุประสงค์และประเภทของมันได้ ดังนั้นถ้าเรามีเอนทิตีสองชื่อCustomerOrderและCustomerInvoiceเราจะมีวัตถุต่อไปนี้:

  1. ตารางในการจัดเก็บข้อมูล [ TABคำต่อท้าย]:
    • CUSTOMER_ORDER_TAB
    • CUSTOMER_INVOICE_TAB.
  2. มุมมองที่ลูกค้าใช้ [ไม่มีคำต่อท้าย]:
    • CUSTOMER_ORDER
    • CUSTOMER_INVOICE.
  3. อินเตอร์เฟสสำหรับการดำเนินงานพื้นฐาน (แพ็คเกจ PL / SQL) [ APIคำต่อท้าย]:
    • CUSTOMER_ORDER_API
    • CUSTOMER_INVOICE_API.
  4. เครื่องกำเนิดรายงาน (แพ็คเกจ PL / SQL) [ RPIคำต่อท้าย]:
    • CUSTOMER_ORDER_RPI
    • CUSTOMER_INVOICE_RPI.
  5. ดัชนีสำหรับคีย์หลัก [ PKคำต่อท้าย]:
    • CUSTOMER_ORDER_PK
    • CUSTOMER_INVOICE_PK.
  6. ดัชนีรอง [ IXคำต่อท้าย]:
    • CUSTOMER_ORDER_XXX_IX
    • CUSTOMER_INVOICE_XXX_IX(ที่XXXอธิบายการใช้งานของดัชนี)
  7. ... และต่อไป

นี่เป็นรูปแบบหนึ่งของApps Hungarian (โปรดทราบว่าวัตถุประเภทเดียวกันสามารถมีส่วนต่อท้ายที่แตกต่างกันขึ้นอยู่กับวัตถุประสงค์) แต่ด้วยคำต่อท้ายแทนที่จะเป็นคำนำหน้า ฉันไม่สามารถบอกคุณได้ว่าระบบนี้อ่านง่ายแค่ไหน IntelliSense ใช้งานได้จริงเพราะแทนการพิมพ์TBLและได้รับผล 4000 ผมสามารถพิมพ์และได้รับวัตถุทั้งหมดที่อยู่ในหน่วยงานชื่อCustomerCustomer*

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

ต้องบอกว่าถ้าคุณไม่ได้มีชนิดของระบบนี้มีการใช้อย่างใดอย่างหนึ่งหรือ prefixing suffixing ไม่มีประเภทของวัตถุ

โปรดทราบว่าเราไม่ได้ใช้คำต่อท้ายเช่น_table, _packageหรือ_view(เช่นประเภทของวัตถุ) ตัวอย่างเช่นทั้ง (3) และ (4) เป็นแพ็คเกจ PL / SQL แต่ใช้ส่วนต่อท้ายที่แตกต่างกัน มันเหมือนกันสำหรับ (5) และ (6) ซึ่งทั้งคู่เป็นดัชนี ดังนั้นคำต่อท้ายจะขึ้นอยู่กับจุดประสงค์มากกว่าประเภท


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

10

tl; dr มัน (เป็นไปได้มาก) จะเพิ่มข้อมูลซ้ำซ้อนนำไปสู่ค่าใช้จ่ายในการรับรู้และควรถูกลบออก

บริบทเป็นสิ่งที่ยอดเยี่ยมโดยเฉพาะในระบบคอมพิวเตอร์ คุณอาจไม่สามารถบอกได้ว่าสิ่งที่เรียกว่าusersเป็นตารางมุมมองขั้นตอนการจัดเก็บหรือสิ่งอื่นทั้งหมด ระบบและภาษาดั้งเดิม (หรือเขียนไม่ดี) มักทำให้ยากต่อการเข้าใจบริบทขณะที่อ่านรหัส ยกตัวอย่างเช่นในทุบตีคุณไม่สามารถบอกสิ่งที่function usersไม่ได้โดยไม่ต้องอย่างน้อยอ่านเนื้อหาของฟังก์ชั่น ใน Java Map<Uid,UserDetails> users()นั้นค่อนข้างโปร่งใสและคุณสามารถขุดลงไปในรายละเอียดได้อย่างง่ายดาย

นำอาร์กิวเมนต์นี้ไปใช้กับตาราง SQL เมื่อใดจะมีประโยชน์สำหรับผู้บริโภคที่usersจะทราบว่าเป็นตารางหรือมุมมอง กล่าวอีกนัยหนึ่งtblคำนำหน้าจะบอกผู้บริโภคว่ามีอะไรบ้างที่พวกเขาไม่รู้และจำเป็นต้องรู้หรือไม่?หวังว่าผู้บริโภคส่วนใหญ่จะเขียน DML และ DQL เพื่อค้นหา สำหรับพวกเขามันควรจะเป็นแหล่งข้อมูลอื่นและไม่ว่าจะเป็นมุมมองหรือตารางควรเกี่ยวข้องกับการแบ่งพาร์ติชันเก็บไว้ใน HDD หรือ SSD หรือรายละเอียดทางเทคนิคอื่น ๆ แน่นอนว่า DBA จำเป็นต้องรู้รายละเอียดเหล่านี้เพื่อเรียกใช้การสืบค้น DDL / DCL ที่หายาก แต่ดูเหมือนว่าเป็นการต่อต้านการผลิตเพื่อทำให้เนมสเปซเป็นมลทินเพื่อเห็นแก่ชนกลุ่มน้อยที่รู้วิธีนำทางสคีมาและรับรายละเอียดทางเทคนิคทั้งหมด


9

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

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

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


8

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


SELECT
  bar
  , fizz
  , buzz
FROM dbo.foo

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

SELECT
  bar
  , fizz
  , buzz
FROM dbo.Foo --table

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

SELECT
  qc.occurances
  , i.employeeId
  , q.questionText
FROM dbo.questionCount /*Indexed view*/ qc WITH (NOEXPAND)
  INNER JOIN dbo.interviewer /*partitioned view*/ i ON i.employeeId = qc.interviewerId
  INNER JOIN dbo.question /*table*/ q ON q.id = qc.questionId
WHERE
  EXISTS (
           SELECT 
             1 
           FROM dbo.currentEmployees /*view*/ ce 
             INNER JOIN dbo.questionsAsked /*table*/ qa ON qa.candidateId = ce.candidateId
           WHERE
             ce.employeeId = i.employeeId
             AND
             qa.questionId = q.id
         )
  AND
  qc.occurances > 5;

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

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


7

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

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

บริษัท ผู้เขียนบล็อกและโปรแกรมเมอร์ส่งผ่านข้อมูลด้วยรูปแบบการเขียนโค้ดของตนเองและบางสไตล์อาจเป็น "Frankenstein" มากกว่าคนอื่นเล็กน้อย บริษัท อาจมี "รูปแบบบ้าน" และโปรแกรมเมอร์ถูกบังคับให้เรียนรู้การปฏิบัตินี้

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

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


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

@ jpmc26 ฉันเห็นด้วย แต่ก็มีเหตุผลและเขาก็มีอิสระที่จะใช้มัน
John Bell

6
@JohnBell แต่คุณมีอิสระที่จะไม่แนะนำ ...
dan1111

@ dan1111 ฉันเป็นจริงและฉันคิดว่าจากน้ำเสียงทั่วไปของคำตอบของฉันใครก็ตามที่มีเหตุผลเชิงตรรกะ - ซึ่งฉันหวังว่าพวกเขาควรใช้ภาษาการเขียนโปรแกรมใด ๆ จะสามารถสรุปได้ว่าไม่แนะนำให้ใช้ "tbl_" หรือ " _tbl"
John Bell

5

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


1
ฉันไม่แน่ใจว่า 'คุณต้องหยุดทำสิ่งนี้ทันที แต่คุณสามารถดำเนินการต่อได้ในที่อื่น' ไม่จำเป็น
underscore_d

3

“ อย่านำหน้าตารางของคุณด้วย tbl” มีปัญหาหรือไม่

เกี่ยวกับระบบ? ไม่เกี่ยวกับคนอื่น? อาจจะ. คุณสามารถสร้างความเกลียดชังมากมาย

โดยส่วนตัวฉันจะไม่นำหน้าตาราง แต่ทำกับวัตถุอื่นเช่นมุมมองขั้นตอนการจัดเก็บฟังก์ชั่น ฯลฯ


1

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

เมื่อสืบค้นฐานข้อมูลสำหรับรายการเฉพาะและฉันไม่ใช่คนเดียวที่จะเปิดโปรแกรมสำรวจวัตถุและแค่คิดว่าฉันจะเลื่อนดูคุณรู้ว่ามันเป็นตัวอักษร นั่นคือจนกว่าคำนำหน้าเริ่ม muddying น้ำและฉันมี tblname, tbl_name, tbname, t_name และรูปแบบอื่น ๆ นับพันมันยากที่จะหาตารางที่คุณรู้ว่ามีตารางอยู่แล้ว

เช่นเดียวกันกับคำนำหน้าทุกอย่าง vw_ หรือ sp_ บางคนจะเข้ามาและคุณจะได้รับ SPname, spname, s_p_name ลบคำนำหน้าทั้งหมดซอฟต์แวร์รู้ว่ารายการคืออะไรถ้าคุณต้องการที่จะรู้จริง ๆ แล้วใช้คำต่อท้ายแทน NameOfMyView_v, NameOfMyProc_sp ง่ายต่อการค้นหาด้วยภาพ

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

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


-3

ถ้าฉันต้องคิดถึงข้อดีของการมีคำนำหน้า 'tbl' นั่นก็คือใน SSMS ปัจจุบันที่มี intellisense ฉันสามารถพิมพ์ได้

select * from tbl

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

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

ฉันจำได้ใน sql server 2005 วันมีข้อกำหนดเพื่อค้นหาว่ามีการใช้ตารางใดในขั้นตอนการจัดเก็บ / มุมมองที่มีชื่อตารางนำหน้ามันเป็นงานที่ง่ายด้วย Regular Expression / C # (ใช่ฉันรู้ว่ามีวิธีอื่นไม่มีข้อโต้แย้งที่นี่)

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


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

ฉันต้องบอกว่าการใช้คำนำหน้า "tbl" จะมีความได้เปรียบเฉพาะในสายตาของฉันใช่คุณสามารถพิมพ์ schema เพื่อกระตุ้นการทำงานของ intellisense แต่ถ้าในสภาพแวดล้อมการทดสอบของฉันฉันมี [dbo] เป็น schema ของฉันเท่านั้นหรือ ที่จริงแล้วในโครงการของฉันฉันมักจะใช้ขีดล่าง "_" (แต่มันก็เหมือนกับ "tbl" ในทางทฤษฎี) ทุกอย่างมีเหรียญสองด้านเหมือนบางคนชอบชื่อโต๊ะยาวในขณะที่คนอื่น ๆ ชอบตัวย่อ คำถามนำหน้านี้ทำให้เกิดการอภิปรายที่น่าสนใจมากมาย ความคิดเห็นของฉันคือตราบใดที่ข้อโต้แย้งของคุณสมเหตุสมผลก็เป็นข้อโต้แย้งที่ดี
jyao

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

-3

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

นั่นคือสิ่งที่ฉันไม่ได้เห็นในคำตอบอื่น ๆ แต่ฉันเป็นนักพัฒนา -DBA-DBA ดังนั้นคนอื่นอาจไม่ต้องทำงานกับรหัสดั้งเดิมซึ่งสามารถฝังแบบสอบถามได้ในแอปพลิเคชันและไม่ใช่ทั้งหมด ข้อความค้นหามีคุณสมบัติครบถ้วนที่อ้างอิงกับสคีมาและสิ่งต่างๆเช่นนั้น (แม้ว่าทุกอย่างเป็นอย่างเต็มที่ผ่านการรับรองคุณจะต้องพบdbo.Userและ[dbo].[User]และdbo.[User]และอื่น ๆ ) หรือเวอร์ชันฐานข้อมูลที่ "ข้อมูลการพึ่งพา" ได้รับการอัปเดตและไม่ถูกต้อง (เช่น MS-SQL เวอร์ชันเก่ากว่า)

ดังนั้นในบางโปรเจ็กต์ที่ฉันได้ทำซึ่งผสมกันอย่างนั้นฉันได้รับคำสั่งtหรือvคำนำหน้า (tbl_ กลายเป็นเซ่อ) เพียงเพื่อให้มันเป็นคำค้นหาที่เลือกสรรมากขึ้น

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


ขอให้เรายังคงอภิปรายนี้ในการแชท
Mark Sowul

-4

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

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

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

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


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

-12

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

select * from sysobjects

หากคุณต้องการได้รับตารางเท่านั้นคุณสามารถทำได้:

select * from sysobjects where type = 'U'

ใครจะจำได้บ้าง หากชื่อตารางของคุณเริ่มต้นด้วย "tbl" คุณสามารถใช้แบบสอบถามนี้ซึ่งไม่ต้องการให้คุณจดจำค่าของคอลัมน์ประเภท:

select * from sysobjects where name like 'tbl%'

เนื่องจากคุณติดแท็ก SQL Server 2014 สิ่งนี้จะไม่นำมาใช้กับคุณเพราะในขณะที่ SQL Server 2005 คุณสามารถทำได้ดังนี้:

select * from sys.tables

ฉันไม่สามารถนึกถึงเหตุผลอื่นที่จะนำหน้าชื่อตาราง


12
1) Re: " ใครสามารถจำได้บ้าง? " การจำwhere type = 'U'ไม่ได้แตกต่างกันมากwhere name like 'tbl%'โดยเฉพาะหลังจากที่คุณทำสองสามครั้ง 2) เพื่อประโยชน์ในการมีข้อมูลที่ถูกต้องsys.tablesมีให้เริ่มต้นใน SQL Server 2005: technet.microsoft.com/sr-latn-rs/library/ms187406(v=sql.90) technet.microsoft.com/sr-latn- rs / library / ms187406 (v = sql.90)
โซโลมอน Rutzky

8
คุณอาจจำไม่ได้'U'แต่คุณสามารถสร้างมุมมองได้เสมอ: create view all_the_tables as select * from sysobjects where type = 'U';จากนั้นให้เรียกใช้select * from all_the_tables;
ypercubeᵀᴹ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.