[Php] Как создать общую базу данных, макет которой может меняться со временем?



Answers

По сути, вы спрашиваете, как создать приложение без спецификаций. Реляционные базы данных не были разработаны так, чтобы вы могли сделать это эффективно. Общим подходом к этой проблеме является конструкция Entity-Attribute-Value и тип системы, в которой вы хотите ее использовать, вероятность отказа составляет почти 100%.

Например, нет смысла, чтобы столбец «Имя» мог стать «Зарпластом». Как бы отчет, в котором вы хотите, чтобы общая зарплата работала, если бы зарплатные ценности могли иметь «Фред», «Боб», 100 тыс., 1000, «много»? Базы данных не были предназначены для того, чтобы никому ничего не было. Для успешных схем базы данных требуется структура, которая означает усилие в отношении спецификаций на то, что нужно хранить и почему.

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

Question

Вот сложный вопрос: как я могу программно создать и опросить базу данных, содержимое которой я не могу предвидеть?

Я реализую общую систему входных форм. Пользователь может создавать формы PHP с макетом WYSIWYG и использовать их для любых целей, которые он пожелает. Он также может запросить ввод.

Итак, у нас три этапа:

  1. формируется и создается форма. Это одноразовая процедура, хотя форма может быть отредактирована позже. Это создает базу данных.
  2. кто-то или несколько человек используют форму - скажем, для ежедневных отчетов о продажах, запаса, расчета заработной платы и т. д. Их вклад в формы записывается в базу данных.
  3. другие, возможно, менеджмент, могут запрашивать базу данных и создавать отчеты.

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

Вопросы и замечания:

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

B) как лучше всего закрепить строки? Я думал о отметке времени, чтобы разрешить мне запрос и столбец для идентификатора строки из A)

C) Мне нужно обработать переименование столбца / вставить / удалить. Удаление Foe, я не уверен, удалять ли данные из базы данных. Даже если пользователь больше не вводит его из формы, он может запросить то, что было ранее введено. Или могут быть некоторые законодательные требования по сохранению данных. Любые ошибки в столбце переименовывают / вставляют / удаляют?

D) Для запроса я могу заставить мой PHP опросить базу данных, чтобы получить имена столбцов и создать форму со списком, в котором каждая запись имеет имя столбца базы данных, флажок, чтобы указать, следует ли ее использовать в запросе и на основе тип столбца, некоторые критерии выбора. Этого должно быть достаточно, чтобы строить поиски, такие как «должность =« старший продавец »и зарплата> 50 тыс.».

E) Мне, вероятно, приходится генерировать некоторые причудливые графики - графики, гистограммы, круговые диаграммы и т. Д. Для получения результатов запроса числовых данных с течением времени. Для этого мне нужно найти хороший FOSS PHP.

F) Что еще я забыл?

Мне все это кажется очень сложным, но я база данных n00b - может быть, это просто для вас гуру?

Изменить: пожалуйста, не говори мне, чтобы я этого не делал. У меня нет выбора :-(

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

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

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




Я согласен с Марком, используя опыт других, может предотвратить множество непредвиденных ошибок, особенно для «базы данных n00b», см. Эту статью от парня, работающего в компании , специализирующейся на родовом конце




Не уверен относительно базы данных, но для диаграмм вместо использования PHP для диаграмм, я рекомендую изучить использование javascript ( http://www.reynoldsftw.com/2009/02/6-jquery-chart-plugins-reviewed/ ). Преимущества этого - часть обработки выгружается на клиентскую сторону для отображения диаграмм, и они могут быть интерактивными.







Links