Xpoint
   [напомнить пароль]

Чем лучше создавать таблицы в БД?

Метки: [без меток]
[удл]
2006-01-18 15:15:24 [обр] Антон Клесс(0/25)[досье]

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

Сайт разросся — получилось, что одну и ту же таблицу используют пять различных скриптов (отвечающие за разные сущности). Переписывать CREATE TABLE в каждом в случае изменения структуры таблицы становится напряжно.

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

Есть ли более изящное решение? Любые мысли на этот счет приветствуются.

спустя 1 час 12 минут [обр] Миша Спларов(0/34)[досье]
Скрипт-инсталлятор, который создаст заранее все таблицы?
спустя 12 минут [обр] Phlinten(0/14)[досье]
сообщение промодерировано
dump и только dump, ничего изящнее не придумано.
Либо целиком его дампить родным способом, либо через пхп explode по ";" и mysql_query, тогда это инсталятор и возможности вариатов безграничны))
спустя 10 минут [обр] Антон Клесс(0/25)[досье]

Не совсем инсталлятор — ибо таблицы могут падать, причем выборочно.

Phlinten[досье], я плохо Вас понял, "через пхп explode по ";" и mysql_query" — это то же самое, к чему пришел я?

спустя 3 минуты [обр] 30-ый(0/584)[досье]
В сложных проектах (а точнее в проектах, которые чуть-чуть сложнее элементарных), структура базы данных создается руками и только руками!
спустя 38 минут [обр] Phlinten(0/14)[досье]
сообщение промодерировано

Можно делать как уже правильно сказали - руками, я это понимаю файл вида dump.sql, дружественного интерфейса в таком случае нету))

Можно сделать как я сказал,или как вы хотели интерфейс средствами PHP. В таком случае самый элегантный способ мне известный, это снова брать dump.sql, делать explode по ";", то есть получить массив запросов..и в цикл))всякие примочки реализуются по вкусу.

спустя 1 минуту [обр] Phlinten(0/14)[досье]
сообщение промодерировано
Проверять каждый раз при выполнение скрипта, существует ли таблица.. это бред.
спустя 1 час 1 минуту [обр] Алексей Севрюков(2/1280)[досье]
Phlinten[досье] explode по ';' не подойдет. В тексте тоже может быть точка с запятой и это надо учитывать.
спустя 4 часа 37 минут [обр] fetis(0/82)[досье]

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

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

спустя 11 часов [обр] Антон Клесс(0/25)[досье]

Проблемы какого рода?

В моем движке используются 2 базы, всего в них 16 таблиц. В каждой таблице ~15 полей.

спустя 33 минуты [обр] fetis(0/82)[досье]
Для сохранения изменений поправить одну-две строчки в файле быстрее, чем сделать дамп всей базы.
Если CVS (Control version system) не поддерживает множественное редактирование, то не получится одновременно править исходники базы нескольким людям.
Ориентироваться в структурированном дереве исходников проще, нежели в одном большом файле.
спустя 3 часа 19 минут [обр] Phlinten(0/14)[досье]
сообщение промодерировано
fetis[досье] Ужасы какие вы рассказываете, если надо поправить одну строчку то это ALTER TABLE, при чем тут CVS вообще не ясно.
спустя 1 час 1 минуту [обр] fetis(0/82)[досье]
сообщение промодерировано
если надо поправить одну строчку то это ALTER TABLE

...а потом база грохается и все изменения летят в трубу.

CVS нормальная практика. Попробуйте и вам понравится.

спустя 2 часа 45 минут [обр] Phlinten(0/14)[досье]
сообщение промодерировано
Против CVS ничего не имею... только свою идею обьясните получше, как этот инструмент мне поможет редактировать базу?
спустя 16 часов [обр] fetis(0/82)[досье]

Phlinten[досье]
В оригинале было:

Если CVS (Control version system) не поддерживает множественное редактирование, то не получится одновременно править исходники базы нескольким людям.

Сам CVS ничего править не умеет, но он помогает эту задачу распараллелить. Т.е., грубо говоря, 1 файл — 1 человек, N файлов — N человек. Так понятнее?

спустя 1 час 24 минуты [обр] Phlinten(0/14)[досье]
fetis[досье]я знаю функии CVS в общих чертах, поэтому и удивился когда спросил, какое отношение это имеет к топику.
Powered by POEM™ Engine Copyright © 2002-2005