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

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

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

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

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

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

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

т.о. мы получаем быстрочитаемый SQL код ?
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33061543
KSLcom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как лучше именовать поля PrimaryKey ?
    #33061549
Фотография Va1entin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShtockЛично я использую <имя поля>_id, например
delivery_adress_id.Первым всегда идет описание сущности, а лишь потом
префикс (я бы даже сказал постфикс), так как сущность все-таки
главнее.

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

Например

table Something(
id_something
something_name
)

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

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

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

Например

table Something(
id_something
something_name
)


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

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

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

Код: 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
Как лучше именовать поля PrimaryKey ?
    #33061924
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне очень понравился подход, который я увидел 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
Как лучше именовать поля PrimaryKey ?
    #33061934
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не буду аггетировать никого за мой подход, но мне он кажется наиболее удачным из всех увиденных, т.к.:
1. Всегда ясно поля кого типа
2. Всегда ясно к какой таблице относится
3. Краткое
4. имя отделенно от типа и названия таблицы - легко читается
5. не дублируются имена таблиц :-)
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33061969
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bas1. Всегда ясно поля кого типа
Хм. Вы этим часто пользуетесь? Я встречал сторонников венгерской нотации, но таки сохранил убеждение, что тип поля должен быть ясен из его имени (то есть предназначения).
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33062002
KSLcom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как лучше именовать поля PrimaryKey ?
    #33062011
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любая система лучше ее отсутствия.
Моя система довольно хорошо проработана и полностью меня устраиваеит.
Таблица называется с учетом имени сущности, но, в силу ограничений некоторых используемых мною СУБД, ограничивается длиной в 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
Как лучше именовать поля PrimaryKey ?
    #33062261
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Система ID с моей точки зрения неудобна тем, что при миграции ключа его в любом случае необходимо переименовывать, а во-вторых фрагмент
Код: plaintext
where а.order_id = :x
более читаем чем
Код: plaintext
where а.id = :x
.
KSLcom[quot Shtock]To KSLcom>
При проектировании таблиц, придерживаюсь правил как и при описании структур в ЯП. Аналогия не полная, в ЯП не используются алиасы.
Но согласен с тем, что и эта система много лучше чем никакой.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33062343
KSLcom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как лучше именовать поля PrimaryKey ?
    #33062639
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KSLcomwhere order.id = :x короче и несёт абсолютно туже информацию
Короче только если рассматривать в отрыве от всего остального запроса. Когда этот "order" надо употребить еще тридцать-сорок раз, становится существенно некороче.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33063443
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crok77@mail.ru
а что народ скажет о плюсах минусах
1. ID_Car,ID_Detail
2. ID,ID

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

Полностью согласен....
ЗЫ: недавно заглянул в инстанс БД для MS SharePoint Portal Services - ряд таблиц с нормальными именами, а ряд с именами - Varchar1,Varchar2,Varchar3 и т.д. - вот так называть не стоит
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33063969
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SanyL
ЗЫ: недавно заглянул в инстанс БД для MS SharePoint Portal Services - ряд таблиц с нормальными именами, а ряд с именами - Varchar1,Varchar2,Varchar3 и т.д. - вот так называть не стоит Как в SharePoint Portal Services не знаю, но в принципе такие имена допустимы для полей, зарезервированных под пользовательские расширения. Их смысл определяется не в словаре СУБД, а в словаре приложения.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33717753
xLock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
basМне очень понравился подход, который я увидел 2 года назад, теперь им и пользуюсь:
<кр_название_типа_поля><кр_название_таблицы>_<имя_поля>
Поддерживаю. Тоже использую аналогичный подход, за исключением <кр_название_типа_поля> - никогда не было необходимости.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33718273
iamhere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KSLcomмне больше нравится
Car(ID,Name)
Detail(ID,Name, Car_ID )

Поддерживаю!
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33718587
А с какой целью господа используют такую странную МД, в которой приходится заморачиваться с ключами ?
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33718589
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iamhere KSLcomмне больше нравится
Car(ID,Name)
Detail(ID,Name, Car_ID )

Поддерживаю!+1
Зверь(Код,Имя)
Свойства(Код,Имя, Код зверя )
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33718625
wwe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
wwe
Гость
комментаторА с какой целью господа используют такую странную МД, в которой приходится заморачиваться с ключами ?
Здравствуйте, Андрей Леонидович! :-)
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33718861
Опа ! Достойная цель.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33719172
Евгений_СТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, самое главное уже сказано - "Любая система всегда лучше, чем отсутствие системы".

Лично я использую такую нотацию. Все ключевые поля заканчиваю постфиксом _ID , все ссылки на другие таблицы по внешнему ключу заканчиваю постфиксом _DD .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table LSchet (
  LSchet_ID integer PRIMARY KEY,
  LSchet    integer,
  FIO       char( 50 ),
  Address   char( 50 ));

create table Lgota (
  LSchet_DD integer,     -- ссылка на таб. LSchet
  WorkDate  date,
  Lgota     numeric( 20 , 4 )
  );

В запросе мне удобнее если сразу видно, какое поле от первичного ключа, а какое - ссылка:

Код: plaintext
1.
select *
  from LSchet s left join Lgota l on (l.LSchet_DD = s.LSchet_ID);
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33719965
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений_СТВсе ключевые поля заканчиваю постфиксом _ID , все ссылки на другие таблицы по внешнему ключу заканчиваю постфиксом _DD .

а что обозначает постфикс DD?

а если просто ставить постфиксы PK и FK

INVOICE_PK
SUPPLIER_FK
INVOICE_DATE


LINEITEM_PK
INVOICE_FK
LINEITEM_AMOUNT
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33720954
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
proposed amendmentа если просто ставить постфиксы PK и FK
Эти постфиксы имхо естественно оставить для constraint-ов.

Впрочем, я вообще не понимаю смысла нотационно разделять PK и FK атрибуты. В связи с этим особенно интересен вопрос - как именовать FK атрибут, являющийся частью PK :))
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33721138
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer proposed amendmentа если просто ставить постфиксы PK и FK
Эти постфиксы имхо естественно оставить для constraint-ов.

Впрочем, я вообще не понимаю смысла нотационно разделять PK и FK атрибуты. В связи с этим особенно интересен вопрос - как именовать FK атрибут, являющийся частью PK :))

да это я уж так просто - разговор поддержать

хватает NAME_ID или ID_NAME но чаще первое
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33721662
Евгений_СТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
proposed amendment Евгений_СТВсе ключевые поля заканчиваю постфиксом _ID , все ссылки на другие таблицы по внешнему ключу заканчиваю постфиксом _DD .

а что обозначает постфикс DD?

Обозначает ссылку на ключевое поле другой таблицы. Буквы _DD взяты "с потолка", просто для того, чтобы отличать от _ID . Можно было бы назвать например _II , но я посчитал, что ДД будет красивее :)
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33805800
cg_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KSLcom
Ну можно и так, но мне больше нравится
Car(ID,Name)
Detail(ID,Name,Car_ID)


Еще один голос в поддержку данного мнения.

В нашей компании, в рамках задачи создания, развития существующей документации, создали, обсудили, утвердили и теперь рекомендуем к использованию соглашения о правилах наименований объектов БД (DatabaseNameRules). Может кому интересно - цитирцю:

Правила наименований объектов баз данных

Общие
Все названия объектов писать в нижнем регистре английскими буквами (в некоторых серверах есть возможность именовать объекты БД кирилицей; на некоторых платформах имена в разных регистрах различаются)
Все служебные слова MySQL писать в верхнем регистре английскими буквами для удобного чтения кода скрипта
Выбирать англоязычные названия, не транслитерацию. Исключения: абревиатуры и другие подобные общеупотребляемые выражения, облегчающие понимание.
Для разделения имени на составляющие используется '_'

Сущности (таблицы)
Наименования сущностей в единственном числе. По аналогии с Delphi VCL: имя класса - имя таблицы, объект - запись в таблице

Атрибуты (поля)
В именах атрибутов имя таблицы указывать не нужно, т.к. на атрибуты ссылаемся через имя таблицы. В таком случае дублирование названия таблицы в выражениях customer.customer_surname, customer.customer_passport, customer.customer_address избыточно. Вместо таких избыточных наименований следует использовать customer.surname, customer.passport, customer.address и т.д.

Первичный ключ
Все сущности имеют суррогатный первичный ключ - поле с последовательно увеличивающимся числовым значением - атрибут id. Называние перивчного ключа одинаково для всех таблиц.

Пример:

Таблица customer - первичный ключ customer.id
Таблица payment - первичный ключ payment.id

Внешний ключ
По договрености о первичном ключе, в каждой таблице мы имеем атрибут id. Для того, чтобы сослаться на эту таблицу, в дочерней таблице используем внешний ключ вида <имя таблицы>_id.

Пример:

Допустим, мы хотим из таблицы detail сослаться на таблицу master: используем поле detail.master_id.

Принцип еще хорошо иллюстрируется выражением: table.id = table_id

Используя такую схему наименования внешних ключей легко определить:

- все внешние ключи в таблице - их легко визуально выделить среди обыкновенных атрибутов
- по имени ключа сразу видно на какую таблицу он ссылается
- при написании запроса достаточно вспомнить, на какую таблицу мы хотим сослаться - дальше действует стандартное правило
...
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33805933
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cg_romaВсе названия объектов писать в нижнем регистре английскими буквами .....
Все служебные слова MySQL писать в верхнем регистре английскими буквами для удобного чтения кода скрипта
Аргументация этого пункта, признаться, улыбнула. То есть: ключевую для понимания запроса информацию (названия таблиц, полей итп) следует писать в нижнем регистре, зато выпячиваются FROM, JOIN, AND и прочие очень важные для понимания сути слова.

В остальном - как уже говорилось, любая система лучше отсутствия системы. Хотя легко назвать и недостатки - например, эта система обрушится, как только окажется необходимым иметь два foreign key-я между одной и той же парой таблиц.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33805968
cg_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerАргументация этого пункта, признаться, улыбнула. То есть: ключевую для понимания запроса информацию (названия таблиц, полей итп) следует писать в нижнем регистре, зато выпячиваются FROM, JOIN, AND и прочие очень важные для понимания сути слова.

Некоторые лица, учавствующие в обсуждении настояли на этом. Принимался документ сообща :)

softwarerВ остальном - как уже говорилось, любая система лучше отсутствия системы. Хотя легко назвать и недостатки - например, эта система обрушится, как только окажется необходимым иметь два foreign key-я между одной и той же парой таблиц.

Как раз первоначальной целью документа и являлось создание системы. Когда встанут острые вопросы - вернемся к пересмотру этого документа.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33805973
cg_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю, что лично мне болшье по душе нижний регистр
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33806186
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cg_romaНекоторые лица, учавствующие в обсуждении настояли на этом. Принимался документ сообща :)
Улыбнула именно аргументация. Само соглашение - может быть, и хуже других, но вопросов ровно два:

Принципиальное наличие согласованности

Удобство для команды в целом (для большинства или нечто в этом духе)

cg_romaКогда встанут острые вопросы - вернемся к пересмотру этого документа.
Это абсолютно правильно.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33807132
Student007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще вариант именования полей и таблиц:

1) Таблица называется маленькими буквами, название отражает содержимое во множественном числе, например: clients, orders
2) Поля таблицы называются маленькими буквами в формате tn[_field_name][_id|_date|...], где tn_ - двух-трех буквенное сокращение названия таблицы, field_name - сущность поля, _id - приставка для обозначения характеристики данных (дата, код и пр.). Например cl_id - PK таблицы clients, ord_issue_date - дата составления заказа из таблицы orders.

Удобство такого подхода в том, что небольшими усилиями мы всегда знаем поле какой таблицы используется в запросе, знаем что все поля в базе уникальные, знаем что никогда не наткнемся на зарезервированное слово при задании имени поля, используем как префикс, так и суффикс для информативного представления. Еще психологически легче восстанавливать название поля в последовательности название таблицы - название поля - тип/характеристика.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33807660
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KSLcomмне больше нравится
Car(ID,Name)
Detail(ID,Name, Car_ID )
Если вспомнить про NATURAL JOIN, то -1
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33810118
iamhere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76Если вспомнить про NATURAL JOIN, то -1

И сколько раз ты про него вспоминал в реальной практике??
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33810138
Фотография Lamer@fools.ua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KSLcomА мне кажется, что маска типа delivery_adress_id больше подходит для FK. delivery_adress - имя справочника, id - первичный ключ. Сам для PK всегда использую просто ID.

+1.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33810243
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iamhere Dik76Если вспомнить про NATURAL JOIN, то -1

И сколько раз ты про него вспоминал в реальной практике??Скажем так - хотел бы чтоб он был в FB. Сам использую и в PK и в FK одинаковую запись id_table_name. Кстати NATURAL JOIN как раз и придуман для стимуляции использования одинаковых наименований.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33810546
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dik76Если вспомнить про NATURAL JOIN, то -1
Если вспоминать про natural join, то все, что способстствует отказу от него, имеет аргумент в свою пользу.

Что, впрочем, не мешает мне считать "просто ID" плохим решением.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33811977
iamhere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЧто, впрочем, не мешает мне считать "просто ID" плохим решением.

Если "просто ID" - плохое решение, то и "просто Name" должно быть плохим. Потому что тоже во многих таблицах такое поле есть и называется одинаково :)

И тогда что - все поля предварять префиксом???

а) снижается читабельность/писабельность
б) мешаются ограничения на размер поля
в) вообще лишее.

Или что - некоторые поля предварть префиксом, а некоторые - нет? Это просто бардак будет.

Просто надо взять за правило - как только в запросе есть две (и более) таблицы - сразу для всех вводим одно-двухбуквенные алиасы и на ВСЕ поля ссылаемся только с алиасом. Читается и пишется отлично, ничего не спутаешь, и вообще все замечательно.

Чем EMP_ID лучше EMP.ID?
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33812093
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iamhereЧем EMP_ID лучше EMP.ID?ем что PK и FK будут именоваться одинаково.
emp.id = order.emp_id - на мой взгляд крайне не удобно
emp.emp_id = order.emp_id - так значительно лучше имхо
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33812100
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iamhereЧем EMP_ID лучше EMP.ID?
Рисовать легче. Пир создании в CASE-средстве внешнего ключа в дочернюю таблицу мигрирует поле с "правильным" именем.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33812355
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iamhereЕсли "просто ID" - плохое решение, то и "просто Name" должно быть плохим.
В первую очередь, схема этого рассуждения представляется мне сомнительной.

Во вторую очередь, "просто Name" - я лично не использую.

iamhereИ тогда что - все поля предварять префиксом???
Всем полям давать осмысленные и достаточно различимые имена. В том числе в этом может помочь префикс.

iamhereПросто надо взять за правило - как только в запросе есть две (и более) таблицы - сразу для всех вводим одно-двухбуквенные алиасы
Это правильно, но в случае ID не слишком помогает по причинам, указанным Денисом. Плюс, действует еще то соображение, что когда одно-двухбуквенных алиасов оказывается пятнадцать-двадцать-сорок штук, более различимые поля помогают читать запрос.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33813334
cg_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iamhere
Если "просто ID" - плохое решение, то и "просто Name" должно быть плохим. Потому что тоже во многих таблицах такое поле есть и называется одинаково :)

И тогда что - все поля предварять префиксом???
...
Или что - некоторые поля предварть префиксом, а некоторые - нет? Это просто бардак будет.
...


По-моему хорошо аргументированно. Кто против "PK - всегда ID", можете конкретно ответить на каждый заданный вопрос в этом высказывании?

1. Если "просто ID" - плохое решение, то и "просто Name" должно быть плохим. Потому что тоже во многих таблицах такое поле есть и называется одинаково :)

И тогда что - все поля предварять префиксом???

2. Или что - некоторые поля предварть префиксом, а некоторые - нет?

3. Просто надо взять за правило - как только в запросе есть две (и более) таблицы - сразу для всех вводим одно-двухбуквенные алиасы и на ВСЕ поля ссылаемся только с алиасом. Читается и пишется отлично, ничего не спутаешь, и вообще все замечательно.

Кто-то против такого правила?

4. Чем EMP_ID лучше EMP.ID?
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33813344
cg_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer iamhereЕсли "просто ID" - плохое решение, то и "просто Name" должно быть плохим.
В первую очередь, схема этого рассуждения представляется мне сомнительной.

Уважаемый softwarer, когада-то читал на Вашем сайте об уверенности в своем умении четко следовать логическим рассуждениям, но в данном случае - в чем сомнительность высказывания:

iamhereЕсли "просто ID" - плохое решение, то и "просто Name" должно быть плохим.

Вполне логичный вывод.

Другое дело, что у каждого есть свои эстетические предпочтения и доля здравого смысла - вот корень данной дискуссии. Мне кажется - каждый должен осмыслить услышанное и опредлиться со своими предпочтениями. Одним из главных критериев верности выбора может служить чувство комфорта и "симпатишности", наблюдаемого в процессе работы :)
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33813349
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на вкус и цвет товарищей нет. Какой внутренний стандарт примите, тот и будет правильным.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33813542
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cg_romaУважаемый softwarer, когада-то читал на Вашем сайте об уверенности в своем умении четко следовать логическим рассуждениям,
Любопытно, поскольку не припомню там подобных утверждений. Возможно, Вы имеете в виду параграф про соблюдение темы дискуссии; возможно же - Вы имеете в виду параграф "Логика", где я как раз предостерегаю от того, чем Вы, возможно, занялись - подмены сказанного мной Вашим мнением о том, что же я имел в виду.

cg_romaно в данном случае - в чем сомнительность высказывания:
.....
Вполне логичный вывод.
Хм. Признаться, я почти уверен, что Вы не строили цепочку рассуждений, приводящую к этому выводу, и "вполне логичный" следует читать как "интуитивно кажется мне верным".

Сомнительность же его в том, что его можно оспорить, причем вполне логичным рассуждением. Например, так:

Поле ID используется почти исключительно для решения двух задач: выборки одиночной записи по ключу и связывания данных в запросе.

Поле Name практически никогда не применяется для решения этих задач, зато применяется для решения задач, в которых практически никогда не используется поле ID.

Таким образом, доказано принципиальное различие этих полей, более того - практическое отсутствие общности сверх самого базового уровня (уровня "и то, и другое - поля").

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

Повседневная аналогия такой ситуации - практически любой стандарт говорит об использовании осмысленных идентификаторов, но в то же время практически любой стандарт допускает использование переменных наподобие i, j, ii в роли варианта цикла, хотя это вроде бы противоречивые подходы.

cg_romaДругое дело, что у каждого есть свои эстетические предпочтения и доля здравого смысла - вот корень данной дискуссии. Мне кажется - каждый должен осмыслить услышанное и опредлиться
Безусловно. Именно поэтому я в ходе этой дискуссии минимизировал изложение собственных вкусов и в основном говорил либо о "главное - система, не так важно какая именно", либо об объективных, проверяемых преимуществах/недостатках того или иного подхода.
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33816774
ABC_1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свое время очень много писал для БД, PK которой были построены по принципу table_name_id. Очень утомительно было писать и отлаживать конструкции наподобие:
Код: plaintext
...table_name.table_name_id = table_name_detail.table_name_id...
Даже введение alias наподобие:
Код: plaintext
tn.table_name_id = tnd.table_name_id
не очень спасает ситуацию когда пишешь действительно много больших по объему и сложных запросов. Гораздо проще написать те же
Код: plaintext
...tn.id = tnd.table_name_id...

особенно если все в команде знают, что tn это общепринятый alias для table_name. Нет разницы между emp_id и emp.id (если нет еще одной таблицы с полем emp_id...), но есть большая разница между, например ii.invoice_item_id и ii.id... А читается так же легко, если ii.id не легче при долгой работе с системой... Особенно учитывая, что полные наименования таблиц таковы, что не всегда условие по join влезает в экран :)...

В общем, когда пришло время проектировать свою БД, пришел к выводу, что обозначение PK просто как ID позволит сохранить много времени при дальнейшей работе.
Хотя все это весьма и весьма субъективно, кому-то вон венгерская нотация нравится... В общем, как во всех учебниках пишут про стиль: главное чтобы был, был один и удобный для Вас в использовании...
...
Рейтинг: 0 / 0
Как лучше именовать поля PrimaryKey ?
    #33831028
Фотография Megabrain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю устроить конференцию в Москве по данному вопросу. А также выпустить книгу "Именование PK - его огромное значение в жизни современого общества".
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше именовать поля PrimaryKey ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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