Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше именовать поля PrimaryKey ? / 25 сообщений из 58, страница 1 из 3
13.05.2005, 10:01
    #33061385
crok77@mail.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Как лучше именовать поля PrimaryKey ?
Например есть 2 таблицы
Car,Detail
в них PK соответственно CarID,DetailID
или ID_Car,ID_Detail
или ID,ID

Хотелосьбы услышать аргументированный ответ.

С уважением, crOK
ICQ 41063556
...
Рейтинг: 0 / 0
13.05.2005, 10:04
    #33061395
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Единообразно.
Все остальное формально не принципиально. Есть конечно плюсы, типа, возможность написания запросов без алиасов, также если имя начинается на id - значит это ссылка или PK (если по одному полю), как известно, первые 2 символа строки проверяются быстрее, чем 2 последние, но это уже все ерунда.
...
Рейтинг: 0 / 0
13.05.2005, 10:13
    #33061420
Va1entin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Так, чтобы не только автор системы названий, но и другие
участники проекта могли разобраться.
Также считаю, что лучше префиксы вроде ID
писать сначала - тогда понятнее, что к чему относится.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
13.05.2005, 10:24
    #33061455
crok77@mail.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
а что народ скажет о плюсах минусах
1. ID_Car,ID_Detail
2. ID,ID
...
Рейтинг: 0 / 0
13.05.2005, 10:25
    #33061459
Paul Sacks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
"Идентификатор" должен быть говорящим.
...
Рейтинг: 0 / 0
13.05.2005, 10:26
    #33061463
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Лично я использую <имя поля>_id, например delivery_adress_id.Первым всегда идет описание сущности, а лишь потом префикс (я бы даже сказал постфикс), так как сущность все-таки главнее.
...
Рейтинг: 0 / 0
13.05.2005, 10:30
    #33061473
KSLcom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
ShtockЛично я использую <имя поля>_id, например delivery_adress_id.Первым всегда идет описание сущности, а лишь потом префикс (я бы даже сказал постфикс), так как сущность все-таки главнее.

А мне кажется, что маска типа delivery_adress_id больше подходит для FK. delivery_adress - имя справочника, id - первичный ключ. Сам для PK всегда использую просто ID.
...
Рейтинг: 0 / 0
13.05.2005, 10:48
    #33061532
crok77@mail.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
т.е получается лучше использовать

для PK - ID
для FK - ID_TableName

например
Car(ID,Name)
Detail(ID,Name,ID_Car)

т.о. мы получаем быстрочитаемый SQL код ?
...
Рейтинг: 0 / 0
13.05.2005, 10:53
    #33061543
KSLcom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
crok77@mail.ruт.е получается лучше использовать

для PK - ID
для FK - ID_TableName

например
Car(ID,Name)
Detail(ID,Name,ID_Car)

т.о. мы получаем быстрочитаемый SQL код ?

Ну можно и так, но мне больше нравится
Car(ID,Name)
Detail(ID,Name, Car_ID )
...
Рейтинг: 0 / 0
13.05.2005, 10:55
    #33061549
Va1entin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
ShtockЛично я использую <имя поля>_id, например
delivery_adress_id.Первым всегда идет описание сущности, а лишь потом
префикс (я бы даже сказал постфикс), так как сущность все-таки
главнее.

Сущность лучше выносить в название таблицы.
А идентификатор начинать с префикса id_

Например

table Something(
id_something
something_name
)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
13.05.2005, 11:03
    #33061587
crok77@mail.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
А чем это лучше ? Аргументируйте пожалуйста
...
Рейтинг: 0 / 0
13.05.2005, 11:17
    #33061636
Va1entin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Таблицу лучше называть по имени сущности - см. аргументы Stock'а
Аргументация за идентификатор типа id_something:

- Все идентификаторы имеют унифицированный вид
- Каждый "говорит" сам за себя
- Если идентификатор используется в другой таблице,
как foreign key по отношению к таблице, на которую ссылается,
то сразу видно что это ссылка (по префиксу).
Первый (первые несколько для сложного ключа)
идентификатор в таблице всегда primary key,
последующие - foreign key.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
13.05.2005, 11:19
    #33061641
KSLcom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Va1entin
Сущность лучше выносить в название таблицы.
А идентификатор начинать с префикса id_

Например

table Something(
id_something
something_name
)


Меня например напрягает повторение названия сущности в именах полей. Ведь из названия таблицы уже можно понять к чему поле относится, зачем дублировать?

select Something.id_something по моему менее читаемо чем select Something.id
...
Рейтинг: 0 / 0
13.05.2005, 11:59
    #33061785
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
To KSLcom>

Когда будете связывать 5-6 таблиц в запросе и увас будет несколько полей с одинаковыми именами а-ля name,id и т.д., я думаю, что очень захотите продублировать название сущности в имени. Кстати, PD не любит сущностей с одинаковым названием, поэтому у меня как-то на автомате все выходит.
...
Рейтинг: 0 / 0
13.05.2005, 12:04
    #33061819
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Присоединюсь к прозвучавшему:

Код: plaintext
1.
Единообразно.
Все остальное формально не принципиально.

Лично я всегда использую в качестве первичного ключа поле TableName_ID. Какие преимущества я вижу в этом подходе перед другими:

1) Почти во всех связках получается условие a.table_id = b.table_id. Это дефолт, который хорошо виден глазу. Те редкие случаи, когда связка делается другим образом, зрительно выбиваются из этого ряда. Соответственно, минимизируется вероятность пропустить важную мелочь, просматривая чужой селект.

2) Аналогично, редкие случаи, выбивающиеся из общего ряда - например, ссылка в таблице на себя - также хорошо видны. Встречая поле типа table_id_parent - сразу видишь, что это не обычный pk и не обычный fk, а поле с некоторым особым смыслом. Например, в коде

Код: plaintext
1.
2.
3.
4.
create table ... 
  ...
  id_document_master integer,
  id_document_detail integer

есть все основания предположить, что это две обычных ссылки на таблицы document_master и document_detail соответственно. Видя же код

Код: plaintext
1.
2.
3.
4.
create table ... 
  ...
  document_id_master integer,
  document_id_detail integer

понятно, что это две ссылки на одну таблицу, и виден смысл, различие между этими ссылками.

Да, конечно, в первом случае можно использовать master_id_table и detail_id_table - но такого подхода я никогда не видел.

3) Это обеспечивает читаемый код при использовании алиасов таблиц. Я предпочитаю писать квалификаторы везде, кроме самых простых запросов; в этом случае запрос

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select
  a.table_a_id,
  a.field1,
  b.field2
from
  table_a a,
  table_b b
where
  a.table_a_id = b.table_a_id

выглядит удобнее, нежели

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select
  table_a.id,
  table_a.field1,
  table_b.field2
from
  table_a,
  table_b
where
  table_a.id = table_b.table_a_id

4) Нужно единообразие. Если выносить ID как префикс, точно так же нужно будет выносить и другие стандартные слова - Name, Date, Count, Qnt.... Лично с моей точки зрения они удобнее и естественнее как постфиксы. Например, если поля таблицы описывают четырех человек, у каждого из которых есть name, у троих - salary, и у двоих - hire_date, порядок полей

Код: plaintext
1.
2.
3.
4.
5.
human1_name
human1_salary
human1_hire_date
human2_name
....

представляется мне удобнее, нежели

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
name_human1
name_human2
name_human3
name_human4
salary_human1
salary_human2
....

Подчеркну - это личная точка зрения. Главное - должны быть четкие правила, соблюдаемые везде в проекте. Они должны быть продуманы - так, чтобы не требовалось исключений, и проработаны достаточно, чтобы все участники проекта полностью на автомате читали код и понимали что он значит.
...
Рейтинг: 0 / 0
13.05.2005, 12:23
    #33061924
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Мне очень понравился подход, который я увидел 2 года назад, теперь им и пользуюсь:
<кр_название_типа_поля><кр_название_таблицы>_<имя_поля>

Например:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table Car(
   nC_id Number( 10 ),
   vC_abbr VarChar2( 10 ),
   vC_name VarChar2( 30 ));

create table Detail(
   nD_id Number( 10 ),
   nC_id Number( 10 ),
   vD_abbr VarChar2( 10 ),
   vD_name VarChar2( 30 ));
...
Рейтинг: 0 / 0
13.05.2005, 12:27
    #33061934
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
не буду аггетировать никого за мой подход, но мне он кажется наиболее удачным из всех увиденных, т.к.:
1. Всегда ясно поля кого типа
2. Всегда ясно к какой таблице относится
3. Краткое
4. имя отделенно от типа и названия таблицы - легко читается
5. не дублируются имена таблиц :-)
...
Рейтинг: 0 / 0
13.05.2005, 12:34
    #33061969
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
bas1. Всегда ясно поля кого типа
Хм. Вы этим часто пользуетесь? Я встречал сторонников венгерской нотации, но таки сохранил убеждение, что тип поля должен быть ясен из его имени (то есть предназначения).
...
Рейтинг: 0 / 0
13.05.2005, 12:44
    #33062002
KSLcom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
ShtockTo KSLcom>

Когда будете связывать 5-6 таблиц в запросе и увас будет несколько полей с одинаковыми именами а-ля name,id и т.д., я думаю, что очень захотите продублировать название сущности в имени. Кстати, PD не любит сущностей с одинаковым названием, поэтому у меня как-то на автомате все выходит.

Абсолютно не возникает никаких проблем, потому как я всегда указываю полное наименования полей в запросах

select E1.ID, E2.ID, E3.ID
from Entity1 E1
left join Entity2 E2 on E1.ID=E2.ID
left join Entity3 E3 on E1.ID=E3.ID

и т.д.

При проектировании таблиц, придерживаюсь правил как и при описании структур в ЯП. Например:

Код: plaintext
1.
2.
3.
4.
5.
 type 
  TEntity= record 
    ID: integer;
    Name:  string ;
   end ;

Не вижу необходимости городить такое:
Код: plaintext
1.
2.
3.
4.
5.
 type 
  TEntity= record 
    TEntity_ID: integer;
    TEntity_Name:  string ;
   end ;
...
Рейтинг: 0 / 0
13.05.2005, 12:47
    #33062011
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Любая система лучше ее отсутствия.
Моя система довольно хорошо проработана и полностью меня устраиваеит.
Таблица называется с учетом имени сущности, но, в силу ограничений некоторых используемых мною СУБД, ограничивается длиной в 8 символов (сочетание латинских букв, знаков подчеркивания и цифр, причем, первый символ - всегда буква). Множественные числа в названиях принципиально не используются (т.е. называю таблицы не "ORDERS", а "ORDER"). Плюс к тому, чаще всего имя таблицы у меня имеет префикс общности (2 буквы или 1 буква и подчеркивание). Например, P_ORDHDR - заголовки заказов на приобретение, S_ORDLIN - строки заказов на продажу, F_USER - пользователи системы (общности, соответственно, "purchase", "sales" и "fundamentals").
PK таблицы суррогатный и построен по одному полю. Его имя равно имя таблицы с добавлением суффикса ID. Например, P_ORDHDRID , S_ORDLINID , F_USERID
Внешние ключи именуются точно так же, как и PK, при условии, что это возможно. Иногда это сделать невозможно. Например, таблица ссылается на одну и ту же другую таблицу дважды и более. Или таблица ссылается на саму себя. В случае ссылки на себя, FK, как правило, обзывается просто PARENTID . А случай нескольких ссылок из одной таблицы на другую - исключительный. Тут FK называются, как получится.
...
Рейтинг: 0 / 0
13.05.2005, 13:40
    #33062261
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Система ID с моей точки зрения неудобна тем, что при миграции ключа его в любом случае необходимо переименовывать, а во-вторых фрагмент
Код: plaintext
where а.order_id = :x
более читаем чем
Код: plaintext
where а.id = :x
.
KSLcom[quot Shtock]To KSLcom>
При проектировании таблиц, придерживаюсь правил как и при описании структур в ЯП. Аналогия не полная, в ЯП не используются алиасы.
Но согласен с тем, что и эта система много лучше чем никакой.
...
Рейтинг: 0 / 0
13.05.2005, 14:01
    #33062343
KSLcom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
ModelRСистема ID с моей точки зрения неудобна тем, что при миграции ключа его в любом случае необходимо переименовывать, а во-вторых фрагмент
Код: plaintext
where а.order_id = :x
более читаем чем
Код: plaintext
where а.id = :x


А здесь а.order_id это что такое? Если это PK, то почему тогда для таблицы order такой странный псевдоним - "а".
Код: plaintext
where order.id = :x
короче и несёт абсолютно туже информацию. А если это FK на таблицу Order то я всёми руками и ногами за такой вариант, т.к. всегда сам его использую р чём и писал выше.

ModelR
Аналогия не полная, в ЯП не используются алиасы.
Но согласен с тем, что и эта система много лучше чем никакой.

В SQL наличие псевдонимов, как дополнительное удобство при написание запроса.
...
Рейтинг: 0 / 0
13.05.2005, 15:16
    #33062639
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
KSLcomwhere order.id = :x короче и несёт абсолютно туже информацию
Короче только если рассматривать в отрыве от всего остального запроса. Когда этот "order" надо употребить еще тридцать-сорок раз, становится существенно некороче.
...
Рейтинг: 0 / 0
13.05.2005, 20:22
    #33063443
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
crok77@mail.ru
а что народ скажет о плюсах минусах
1. ID_Car,ID_Detail
2. ID,ID

Минус варианта 2: ухудшение сематичности и ограничениях в SQL.
Семантичность - больше надо усилий, в интепритации данных. Ограничения в SQL- , например, во многих случаях придется отказаться от естественного соединения. Причем - это относится ко всем столбцам - т.е. для разных свойств лучше иметь разные имена атрибутов.
...
Рейтинг: 0 / 0
13.05.2005, 22:05
    #33063508
SanyL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше именовать поля PrimaryKey ?
Paul Sacks"Идентификатор" должен быть говорящим.

Полностью согласен....
ЗЫ: недавно заглянул в инстанс БД для MS SharePoint Portal Services - ряд таблиц с нормальными именами, а ряд с именами - Varchar1,Varchar2,Varchar3 и т.д. - вот так называть не стоит
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше именовать поля PrimaryKey ? / 25 сообщений из 58, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]