Mysql структура и проектирование столов - PullRequest
1 голос
/ 04 октября 2010

У меня есть две таблицы, и я работаю, как показано ниже ...

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

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

  2. Если я добавлю дополнительную таблицу (counter_id_table), которая будет сохранять значение id с автоматическим приращением. Когда любая новая запись будет вставлена ​​первой, я получу значение counter_id_table, и это значение будет id моей первой таблицы, и это значение будет сторонним идентификатором во второй таблице. Когда я снова получу значение из counter_id_table, я обновлю его после одного приращения.

Как мне спроектировать мой стол для лучшего исполнения?

1 Ответ

1 голос
/ 04 октября 2010

Первый вариант - как обычно это делается.Вы можете использовать MySQL mysql_insert_id() для получения идентификатора вставленной записи сразу после запроса на вставку.Не беспокойтесь о скорости или загрузке, это происходит за доли секунды, и MySQL может сделать это во сне.

Так вы получите что-то вроде этого:

`user`
- id
- name
- etc

`user_stuff`
- id
- userId // foreign key
- stuff
- etc

$sql = "INSERT INTO user (name) VALUES ('foo')";
mysql_query($sql) or die(mysql_error());

$userId = mysql_insert_id();

$sql = "INSERT INTO user_stuff (userId, stuff) VALUES ($userId, 'stuff')";
mysql_query($sql) or die(mysql_error());
...