2016-02-02 2 views
0

Я создаю простую систему сопоставления данных с PHP, PDO и Mysql. Одним из его помещений является сопоставление массивов с объектами путем создания третичных таблиц (не уверены, правильно ли это имя).Создать таблицу, если она не существует, является дорогостоящей?

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

"create table if not exists ".$tablename." (id_".$firstName." int unsigned not null, ".$secondName." ".$type.", constraint fk_".$tablename." foreign key (id_".$firstName.") references ".$firstName."(id) ".$secondReference.");" 

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

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

Другой вариант заключается в том, чтобы проверить, существует ли таблица через инструкцию select, но она не выглядит намного лучше.

Одна важная информация заключается в том, что эти методы, используемые для сопоставления, будут доступны через объекты DAO, ссылающиеся на каждый объект.

Edit: Ссылка на GitHub с проектом является https://github.com/Sirsirious/SPDMap

+0

Проверка перед выполнением всегда хорошо – devpro

+2

* 'создать таблицу (если она не существует) для каждого элемента массива «* почему вы создаете столько таблиц? звучит как плохой дизайн –

+0

Dagon, он создает одну таблицу для каждой возможной таблицы «многие-ко-многим», уже разработанной в модели. Он не создает таблицу для каждого элемента, но пытается создать таблицу для имени элемента, если она не создана. Я как бы хочу беспокоиться только о моделировании классов, а затем позволить системе беспокоиться о сопоставлении sql. –

ответ

0
  1. мне это не кажется идеальным, чтобы создать таблицу каждый раз. Может быть лучше повторно использовать ту же таблицу (с дополнительным столбцом в качестве идентификатора между текущей «таблицей»

  2. если вы создаете таблицу, не вижу ничего плохого в create table if not exist. Это безопасное и хорошее программирование

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

+0

Прочтите мое новое редактирование и посмотрите, сможете ли вы теперь лучше понять. –

+0

@TiagoSirious - хорошо, я просто прочитал. Я все еще думаю, что этот дизайн не оптимален, но вы знаете детали лучше. в любом случае - если это ваш дизайн, посмотрите только на мой комментарий №2. это будет, безусловно, более эффективным с точки зрения сети и памяти, чтобы использовать 'create if not exist', а не выбирать раньше, чтобы проверить, существует ли она –

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