จากมุมมองทางคณิตศาสตร์เมื่อพิจารณาว่าตารางมีคีย์หลักมากที่สุดหนึ่งตัวดูเหมือนว่าเป็นการตัดสินใจแบบสั้น ๆ ที่อ้างถึงคีย์หลักโดยใช้ชื่อโดยพลการแทนชื่อของคุณสมบัติตารางธรรมดา
ผลที่ตามมาคือการเปลี่ยนคีย์หลักจาก nonclustered เป็นคลัสเตอร์หรือในทางกลับกันคุณต้องค้นหาชื่อก่อนแล้วปล่อยมันและอ่านมันในที่สุด
มีประโยชน์ในการใช้ชื่อโดยพลการที่ฉันไม่เห็นหรือมี DBMS ไม่ใช้ชื่อโดยพลการสำหรับคีย์หลัก?
แก้ไข 2011-02-22 (02/22/2011 สำหรับผู้ที่ไม่ต้องการเรียงวันที่):
ให้ฉันแสดงฟังก์ชั่นที่คุณสามารถหาชื่อของคีย์หลักจากชื่อตาราง (ใช้ตารางระบบ sybase sql-Sever aka หรือต้น):
create function dbo.get_pk (@tablename sysname)
returns sysname
as
begin
return (select k.name
from sysobjects o
join sysobjects k on k.parent_obj = o.id
where o.name = @tablename
and o.type = 'U'
and k.type = 'k')
end
go
เนื่องจาก gbn ระบุว่าไม่มีใครชอบชื่อที่สร้างขึ้นจริง ๆ เมื่อคุณไม่ระบุชื่อที่ชัดเจน:
create table example_table (
id int primary key
)
select dbo.get_pk('example_table')
ฉันเพิ่งได้รับ
PK__example___3213E83F527E2E1D
แต่ทำไมชื่อใน sysobjects ต้องไม่ซ้ำกัน มันจะดีพอที่จะใช้ชื่อเดียวกันสำหรับตารางและคีย์หลัก
ด้วยวิธีดังกล่าวเราไม่จำเป็นต้องตั้งค่าแบบแผนการประชุมซึ่งอาจถูกละเมิดโดยไม่ตั้งใจ
ตอนนี้คำตอบของแมเรียน:
- ฉันใช้งานการเปลี่ยนคลัสเตอร์เป็นคีย์หลักที่ไม่คลัสเตอร์เท่านั้นเป็นตัวอย่างที่ฉันจำเป็นต้องทราบชื่อจริงของ pk เพื่อให้สามารถวางได้
- สิ่งต่าง ๆ ไม่จำเป็นต้องมีชื่อที่เหมาะสมมันก็เพียงพอแล้วหากพวกเขาสามารถบอกชื่อได้อย่างง่ายดาย นั่นคือพื้นฐานของสิ่งที่เป็นนามธรรม การเขียนโปรแกรมเชิงวัตถุไปในลักษณะนี้ คุณไม่จำเป็นต้องใช้ชื่อที่แตกต่างกันสำหรับคุณสมบัติที่คล้ายกันของคลาสที่ต่างกัน
- มันเป็นกฎเกณฑ์เนื่องจากเป็นคุณสมบัติของตาราง ชื่อของตารางคือทั้งหมดที่คุณต้องรู้หากคุณต้องการใช้