Как лучше организовать мои таблицы данных MySQL для этих данных? - PullRequest
1 голос
/ 03 апреля 2012

Я работаю над созданием программного обеспечения для оценки работы для семейного бизнеса по благоустройству дома, и у меня возникла небольшая головоломка о том, как лучше организовать мои данные. Конечно, будет таблица БД для «заданий», в которой хранятся имя, адрес, описание задания и т. Д.

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

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

Не секрет, что я не программист, но я здесь, чтобы учиться. Является ли MySQL неправильным инструментом для работы здесь? Нужен ли мне другой инструмент или я должен отказаться от идеи использовать БД для этого вообще? Если ответом является MySQL, как мне организовать эти данные?

Я считал, что JSON хранится в БД, но, похоже, это плохая форма.

<?php
    $gable_soffit = array(
    'qty'=>125,
    'uom'=>'ft',
    'desc'=>"Gable Soffit",
    'price'=>6.50,
    'os'=>12,           // inches
    'ss'=>12            // inches
); 

// qty, uom, desc, price, overhang size, soffit size 
$level_soffit = array(
    'qty'=>200,
    'uom'=>'ft',
    'desc'=>"Level Soffit",
    'price'=>6.50,
    'os'=>12,           // inches
    'ss'=>12            // inches
); 

// qty, uom, price,desc
$brick_mold = array(
    'qty'=>15,
    'uom'=>feet,
    'price'=>1.50,
    'desc'=>"Brick Mold"
);

$gable_vents = array(
    'qty'=>5,
    'uom'=>ea,
    'price'=>48.00,
    'desc'=>"Gable Vents"
);

$window_tops = array(
    'qty'=>2,
    'uom'=>ea,
    'price'=>10.00,
    'desc'=>"Window Tops"
);

$openings = array(
    'qty'=>2,
    'uom'=>ea,
    'price'=>50,
    'desc'=>"Openings Capped"
);

$garage_doors = array(
    'qty'=>1,
    'uom'=>ea,
    'price'=>100,
    'desc'=>"Garage Doors Capped"
);

$porch_ceiling = array(
    'qty'=>124,
    'uom'=>sqft,
    'price'=>2.00,
    'desc'=>"Porch Ceiling"
);

$porch_beam = array(
    'qty'=>36,
    'uom'=>ft,
    'price'=>3.60,
    'desc'=>"Porch Beam"
);

$siding = array(
    'qty'=>22,
    'uom'=>sq,
    'price'=>165.00,
    'desc'=>"Siding"
);

$insulation = array(
    'qty'=>22,
    'uom'=>"sq",
    'price'=>30.00,
    'desc'=>"Insulation"
);

$shutters = array(
    array(
        'type'=>'Louvered',
        'length'=>50,
        'width'=>12,
        'color'=>'Brick Red'
    ),
    array(
        'type'=>'Louvered',
        'length'=>50,
        'width'=>12,
        'color'=>'Brick Red'
    ),
    array(
        'type'=>'Raised Panel',
        'length'=>36,
        'width'=>12,
        'color'=>'Black'
    ),
    array(
        'type'=>'Raised Panel',
        'length'=>50,
        'width'=>12,
        'color'=>'Black'
    ),
);

$gutters = array(
    array(
        'qty'=>100,
        'type'=>"5-inch",
        'uom'=>"ft",
        'desc'=>"5-inch Gutter",
        'price'=>3.00
    ),
    array(
        'qty'=>50,
        'type'=>"6-inch",
        'uom'=>"ft",
        'desc'=>"6-inch Gutter",
        'price'=>4.00
    ),
    array(
        'qty'=>10,
        'type'=>"screen",
        'uom'=>"ft",
        'desc'=>"Gutter Screen",
        'price'=>2.00
    ),
    array(
        'qty'=>5,
        'type'=>"guard",
        'uom'=>"ft",
        'desc'=>"Gutter Guard",
        'price'=>5.00
    )
);
?>

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Веселый ответ : Если вы готовы попробовать что-то новое, вы можете использовать MongoDB - это документно-ориентированная база данных с документами в стиле JSON.Он использует динамические схемы, которые предлагают простоту и мощь.Он должен идеально соответствовать вашим потребностям.

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

Products
id    name         quantity   description   price
2     Level Soffit 200        Level Soffit  6.50
5     Porch Beam   36         Porch Beam    3.60

Кроме того, у вас может быть таблица с вашими атрибутами.

Attributes
id    attribute    value
2     Os           12
2     Ss           12
5     Color        Black
5     Color        Brown
0 голосов
/ 04 апреля 2012

MySQL является стандартным инструментом для большинства рабочих мест. На самом деле Google использует сильно модифицированную версию, которую они называют BigTable, что позволяет им выполнять сверхбыстрый поиск. Что касается этого проекта, используйте несколько таблиц соединения.

Вот что я рекомендую. У вас есть следующие таблицы: project, project_items, measure_types, item_types

Таблица проекта содержит название проекта, идентификатор проекта и любые другие полезные сведения о проекте для всего проекта.

В таблице project_items перечислены все те позиции, которые вы указали выше. Он содержит следующие столбцы: наименование товара, описание товара, количество, вес, длина, ширина, высота, цена, идентификатор_мерки_идентификации (относится к таблице типов_измерения), идентификатор_по_т_пункта

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

Таблица item_types содержит типы элементов, таких как желоба, жалюзи, двери, изоляция и т. Д. Вам нужен столбец id и столбец имени. Эта таблица в основном используется для классификации данных.

Способ, которым вы используете это, состоит в том, чтобы создать проект, чтобы связать все элементы, а затем добавить элементы к нему. Каждый предмет имеет свои размеры, название, описание, количество, тип и цену. В зависимости от того, какой тип вы выберете, вы можете иметь JavaScript, чтобы показать / скрыть правильные поля измерений в форме ввода. Затем, когда вы сделаете свои вычисления позже, вы можете использовать этот тип, чтобы узнать, какую формулу использовать для каждого элемента.

Вы также можете создать несколько хороших отчетов. По цене, разбивке по предметам и т. Д.

0 голосов
/ 03 апреля 2012

Я рекомендую создать сайт в Drupal 7 с модулями Views 3 и Node Relationship и Node Reference для составления вашего отчета. И вот что вы хотите сделать. Вы создаете тип содержимого задания и тип содержимого элемента.

Тип содержимого элемента будет содержать:

  1. Ваше имя товара (название узла)
  2. Описание (тело узла, если вы хотите использовать описание вообще)
  3. Поле количества
  4. Поле измерения для длины, одно для ширины и одно для глубины
  5. Тип измерения (футы, метры, дюймы и т. Д., Делают этот список выпадающим)
  6. Цена за единицу товара (поэтому, если у вас есть 3 двери, каждая 3 фута на 5 футов, по цене 2 доллара каждая, тогда можно рассчитать общую стоимость как 6 долларов США (используя настраиваемое поле в представлениях).

Затем убедитесь, что в типе контента задания есть поле отношения узла, в котором могут быть неограниченные записи элементов (тип контента). Таким образом, вы можете добавить любые элементы, которые вы хотите сделать вычисления. Вы можете быстро создавать отчеты, оценки, страницы и т. Д. С представлениями. Вы даже можете предоставить своему клиенту портал для входа в систему для просмотра оценок.

Проверьте Drupal.org и drupalize.me. Есть множество отличных видео, статей и ресурсов для вас. Также, если вы можете подумать об этом, то, возможно, кто-то уже написал модуль для этого и бесплатно разместил его на Drupal.org для расширения вашего сайта.

Drupal позаботится о схеме БД. Это освобождает вас для создания веб-приложения. Получите отличный дизайн от themeforest.net, и я рекомендую использовать базовую тему Omega 960gs, чтобы помочь вам в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...