З математичного погляду, маючи на увазі, що таблиця має щонайменше один первинний ключ, схоже, це короткозоре дизайнерське рішення для позначення первинних ключів деяким довільним іменем замість простого властивості таблиці.
Як наслідок, щоб змінити первинний ключ з некластеризованого на кластеризований або навпаки, вам потрібно спочатку шукати його ім'я, ніж скидати його і, нарешті, читати його.
Чи є якась перевага у використанні довільних імен, яких я не бачу, чи є СУБД, які не використовують довільні імена для первинних ключів?
Змінити 2011-02-22 (22.02.2011 для тих, хто не хоче сортувати дату):
Дозвольте мені показати функцію, за допомогою якої ви можете отримати імена первинного ключа з назви його таблиць (використовуючи ранні 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 повинні бути унікальними. Було б цілком нормально використовувати точно таку ж назву для таблиці та її первинного ключа.
Роблячи це так, нам не потрібно було встановлювати конвенції про іменування, які могли бути випадково порушені.
Тепер відповіді Маріан:
- Я використовував лише завдання зміни кластеру в некластеризований первинний ключ як приклад, коли мені потрібно знати власне ім'я ПК, щоб мати можливість його скинути.
- Речі не повинні мати власних імен, достатньо, якщо їх можна легко однозначно позначити. Це основа абстракції. Об'єктно-орієнтоване програмування йде таким шляхом. Не потрібно використовувати різні імена для подібних властивостей різних класів.
- Це довільно, тому що це властивість таблиці. Назва таблиці - це все, що вам потрібно знати, якщо ви хочете її використовувати.