Нужна помощь по структуре

Тема в разделе "Базы данных", создана пользователем danneo, 2 апр 2014.

Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Дело на MySQL.
    Есть несколько типов фирм, например: производитель конфет, типография, монтажная фирма. У них есть много разных оригинальных (отличительных между друг другом) полей с данными о фирме. Это основные фирмы, где много данных.
    Также есть другие типы фирм: магазин цветов, заправки, нотариусы. У них данные обычные, минимальные.
    У всех фирм есть одинаковые поля, типа адреса, контактов и т.д.
    Для пользователей нужно выводить форму добавления в зависимости от типа фирмы. Форма должна быть на сессиях или ajax.

    1-я идея - Думал, что выводить на сайте несколько пунктов меню, по одному для каждого основного типа фирмы и один пункт для остальных мелких. При появлении нового важного типа дорабатывать код и создавать таблицу.
    А все мелкие фирмы сохранять в общую таблицу. Так получается, как для каждого типа свой модуль CMS. Но как устроить поиск для пользователя, по всем таблицам, не знаю (как такой процесс сделать), как выводить общий каталог тоже не знаю.
    2-я идея - сделать все в одной таблице. Но тогда может получится очень много полей с данными, от чего может и не влезть в возможности БД. Да и как в таком случае сделать некоторые поля обязательными для заполнения. Например, для одной группы пользователей с простым типом фирм первые 15 полей, для важных типов фирм (другой группы пользователей) сделать 30 важных полей. В БД это не сделать... только в php с проверкой на обязательность.
    3-я идея - сделать основные поля для всех типов фирм, а далее делать выборку из под.полей. В таком случае не знаю как сделать структуру для вывода формы и сохранения данных. Никогда доп.поля не делал.

    Надеюсь на то, что понятно объяснил :)

    Может быть кто-то подскажет, как можно еще сделать такую структуру?
     
  2. DesoTTo

    DesoTTo Создатель

    Регистр.:
    21 дек 2012
    Сообщения:
    48
    Симпатии:
    12
    Была похожая задача в своё время, и думаю самый удобный вариант тут вот какой:
    1. Делаем табличку#1 которая отвечает вводу всех параметров по всевозможным вариантам данных + служебные поля
    2. Делаем другую идентичную таблицу#2 но уже с флагами(булево, или что вам удобнее использовать в виде флага) которые будут регламентировать обязательно ли поле согласно признаку типа фирмы в этой же таблички.
    3. Разносим все варианты ввода данных о фирме на возможные типовые группы. (Можно сделать ещё табличку соответствия типа к группе если где то оно нужно далее)
    4. Делаем Визард, первым шагом которого будет выбор типа к которому относится фирма о которой дальше пользователь будет вводить данные, а мы будем на следующим шаге выводить обязательные поля согласно таблице#2

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

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    а куда тип полей формы сделать (картинки, textarea, checkbox и т.д.)?
     
    Последнее редактирование: 3 апр 2014
  4. DesoTTo

    DesoTTo Создатель

    Регистр.:
    21 дек 2012
    Сообщения:
    48
    Симпатии:
    12
    В первой таблице и делать, вторая только за группы вывода отвечает.
     
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    не понял. В 1-й таблице сохраняются поля: название фирмы, логотип, адрес и т.д. Где там можно указать тип (для формы, не тип данных в БД)?
    Это нужно отдельную таблицу с типами полей.
     
    Последнее редактирование: 4 апр 2014
  6. websheriff

    websheriff Создатель

    Регистр.:
    23 мар 2014
    Сообщения:
    15
    Симпатии:
    4
    Вашу задачу надо разложить на несколько подзадач:
    1 Составление базы данных
    2 Реализация ввода данных от пользователя на сайте

    По первому пункту, я считаю неважно большая фирма или маленькая, нужно делать одну таблицу.
    Добавить в таблицу поле обозначающее величину фирмы, (тут могут быть разные варианты, булево 1 или 0, если несколько вариантов то типа small,medium,big)
    Плюс ко всему советую для полей которые могут содержать несколько похожих записей организовать отдельные таблички (например счета,заказы, услуги) и привязывать по первичному ключу к основной.
    А на сайте предложить сначала выбрать величину фирмы(как было сказано выше) и в зависимости от выбора предлагать ему нужный список полей.
     
    DesoTTo нравится это.
  7. DesoTTo

    DesoTTo Создатель

    Регистр.:
    21 дек 2012
    Сообщения:
    48
    Симпатии:
    12
    Я как раз говорил максимально акцентируясь на первой подзадаче(опять же выше :), просто в явном виде не озвучивал, учту ). По мне так ввод вообще не проблема если корректно составить структуру БэДэ :). Тут само собой, либо отдельно, либо ещё как изгаляться с xml разметками, или ещё как.
    Согласен, не нужно зоопарка, но при перспективе роста структура должна быть гибкой, в идеале масштабируемой и "человеческой".
     
    websheriff нравится это.