2010-11-01 2 views
7

Какова наилучшая практика для именования столбца, который является первичным ключом для таблицы mysql? Я видел два пути:Именование столбца идентификатора MYSQL

  1. 'ID'
  2. tableName_id (где TABLENAME заменяется на имя таблицы).

Я бы подумал, что достаточно просто идентификатора, поскольку вы все еще можете однозначно идентифицировать столбец, выбрав столбец, пройденный периодом и именем таблицы (то есть для столбца «id» в таблице «cars», вы можете выбрать его как cars.id)

Или я передумал все это?

+1

А? 'tableName_id' обычно используется для поля внешних отношений, а не для самой таблицы, не так ли? –

+0

Это было задано много раз. Обычно такие вопросы приводят только к пламени. – Quassnoi

ответ

4

Обычно я называю их [tblname] _id. Причина проста. Скажем, у меня есть две таблицы:

member 
    member_id 
    member_alias 
    ... 

post 
    post_id 
    member_id 
    post_text 
    ... 

Теперь я могу присоединиться к ним с MySQLs ПРИМЕНЕНИЕМ-синтаксиса и сохранить несколько символов для каждого соединения:

SELECT post.*, member_id, member_alias FROM post 
    INNER JOIN member USING (member_id) 

Конечно, все это в основном субъективный характер.

+0

Что делать, если две таблицы имеют более одного отношения? – symcbean

+0

Это действительно очень субъективно, особенно принимая во внимание, что вы можете ссылаться на любой столбец, используя имя таблицы: member.id и post.id. Если ваш синтаксис требовал явных ссылок на таблицы, вы бы получили member.member_id и post.post_id, которые кажутся излишними. – Mark

1

Я использую «ID» для первичного ключа текущей таблицы и tableName_id для поля внешнего ключа, но обычно это сводится к личным предпочтениям.

Я работал в компаниях, которые используют tblMyTable для имени таблицы, а затем используют это как префикс для каждого отдельного поля в таблице. Хотя я не люблю делать это.

1

Я всегда иду tablename_id. Таким образом, я могу использовать ИСПОЛЬЗОВАНИЕ.

Кроме того, если вы плохой и не указываете псевдонимы таблиц в нескольких таблицах, ваш sql будет немного яснее.

2

MySQL не содержит конкретных соображений, кроме базы данных SQL. Таким образом, вопрос заключается в том, какое соглашение об именах должно использоваться для базы данных SQL.

Отмечая, что вы действительно можете назвать столбцы, что вы любите (в пределах диапазона допустимых имен), при оценке лучшего выбора имен, рассмотрите:

  1. как удобно будут имена взаимодействовать с функциями языка SQL - в частности, объединяется?
  2. Насколько хорошо будут пониматься имена?

Относительно 1, считают:

  • Каким ИСПОЛЬЗОВАНИИ положение ведет себя?
  • Как работает процедура NATURAL JOIN?
  • Как работает INNER JOIN, когда столбцы без объединения из разных исходных таблиц имеют одно и то же имя и являются SELECTed? (Хотя SQL позволяет точным именам откладывать конфликты - это не распространяется на подзапросы.)

Что касается 2, считайте, что по мере развития вашей схемы первичная ситуация может стать иностранной. То, что может стать многими. Помогает ли это переименовать столбцы только потому, что изменяется кардинальность?

Наконец, считайте, что первичный ключ с одним столбцом не всегда является искусственным ключом. В данном примере это может быть на самом деле внешний ключ (1-1 отношения):

ЗАДАЧА {TASK_ID, task_created_date} - задача с TASK_ID была создана на task_created_date

TASK_DUE {TASK_ID, task_due_date} - задача с TASK_ID связано с DUE_DATE

Смежные вопросы