Sql Query присоединиться к предложениям - PullRequest
2 голосов
/ 23 августа 2011

Мне было интересно, когда у меня есть родительская таблица и дочерняя таблица с внешним ключом, например:

users
id | username | password |

users_blog
id | id_user | blog_title

Можно ли использовать id в качестве автоматического приращения также в таблице соединений (users_blog) или у меня возникнут проблемы?скорости запроса?

также я хотел бы знать, какие поля добавить как PRIMARY, а какие как INDEX в таблице users_blog?

надеюсь, вопрос ясен, извините за мой плохой английский: P

Ответы [ 6 ]

2 голосов
/ 23 августа 2011

Можно ли использовать идентификатор в качестве автоматического приращения также в таблице соединений (users_blog) или у меня возникнут проблемы со скоростью запроса?

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

также я хотел бы знать, какие поля добавить как PRIMARY, а какие как INDEX в таблице users_blog?

Цель PRIMARY KEY (и других ограничений) - обеспечить правильность данных.Индексы "просто" для производительности.

То, какие поля будут в PRIMARY KEY, зависит от того, что вы хотите выразить с помощью вашей модели данных:

  • Если строка users_blogидентифицируется только с помощью id (т. е. между этими двумя таблицами существует «неидентифицирующая» связь), поместите только id в ПЕРВИЧНЫЙ КЛЮЧ.
  • Если он идентифицирован комбинацией id_user и id (он же «идентифицирующее» отношение), тогда у вас будут эти два поля вместе в вашем ПК.

Что касается индексов, это зависит от того, как вы собираетесь получить доступ к вашим данным,Например, если вы делаете много JOIN, вы можете рассмотреть индекс для id_user.

Хороший учебник по производительности индекса можно найти по адресу:

http://use -the-index-luke.com

2 голосов
/ 23 августа 2011

Я не думаю, что вам действительно нужен столбец id в таблице users_blog.Я бы сделал id_user основным индексом этой таблицы, если у вас нет другой причины для этого (возможно, таблица users_blog на самом деле имеет больше столбцов, и вы просто не показываете это нам?).

Что касается производительности, наличие столбца id в таблице users_blog само по себе не должно влиять на производительность, но ваши запросы никогда не будут использовать этот индекс, поскольку очень маловероятно, что вы когда-нибудь выберете данные на основе этого столбца.Наличие столбца id_user в качестве основного индекса на самом деле будет полезным для вас и ускорит ваши объединения и выбор.

2 голосов
/ 23 августа 2011

Какое количество элементов между пользователем и user_blog?Если это 1: 1, зачем вам поле id в таблице user_blog?

1 голос
/ 23 августа 2011

Вам не нужно использовать столбец id в таблице users_blog, вы можете объединить id_user с таблицей users. также автоматическое увеличение не является проблемой для производительности

1 голос
/ 23 августа 2011

Я не вижу проблем с автоматическим приращением id столбца на users_blog.

Первичный ключ может быть id_user, id.Что касается индексации, это сильно зависит от вашего использования.

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

0 голосов
/ 23 августа 2011
  • Рекомендуется иметь столбец идентификатора с автоматическим приращением - это гарантирует способ уникальной идентификации строки (в случае, если все остальные столбцы одинаковы для двух строк)
  • id - это хорошее имя для всех ключей таблицы, и это стандартное
  • <table>_id - это стандартное имя для внешних ключей - в вашем случае используйте user_id (не id_user, как у вас)
  • mysql автоматически создает индексы для столбцов, определенных как первичные или внешние ключи - здесь не нужно ничего делать
  • ИМХО, имена таблиц должны быть единичными - то есть user не users

Ваш SQL должен выглядеть примерно так:

create table user (
    id int not null auto_increment primary key,
    ...
);

create table user_blog (
    id int not null auto_increment primary key,
    id_user int not null references user,
    ...
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...