2013-04-09 3 views
0

Я столкнулся с проблемой, с которой я хотел бы попросить вас о некоторых направлениях. У меня есть база данных, как на рисунке ниже. enter image description hereКак правильно построить базу данных

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

Скажем, заказчики заказывают 5 мониторов и 4 клавиатуры, которые находятся на одном и том же заказе. Где я должен иметь количество? В моей таблице OrderProduct?

Что делать, если клиент хочет, чтобы на выбранном элементе была напечатана пользовательская наклейка или его логотип. Если я выбираю печать на элементе или наклейке в своем приложении, где в базе данных это должно храниться? Также на OrderProduct?

ответ

2
  1. Добавить таблицу с именем цвета и он имеет поле ID, осуществимое Имя и т.д. В продукте показать значение побитового для цветов, которые он поддерживает.

  2. Да, у вас будет количество в таблице OrderProduct.

  3. Это зависит от того, какие наклейки он получает. Является ли наклейка той, которую он может выбрать, или это то, что он может загрузить?

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

Назад к цветам, как я уже сказал, если вы собираетесь настраивать каждый продукт, затем создайте новую вставку для каждого продукта и удалите колонку количества, а затем просто добавьте столбец ColorID в таблицу OrderProduct, где вы определит, какой цвет или настройка будет иметь конкретный продукт.


Ответ на комментарий

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

1 | Black 
2 | Gray 
3 | Red 

Если у продукта могут быть черные и серые, вы делаете черный, серый, который идет на 1,2. Если у продукта есть Черный и Красный, вы будете делать черный, красный - до 1,3. Все побитовое значение - это преобразование его в значение, которое компьютер может понять легче.

Итак, чтобы получить побитное значение для черного & Серый квадрат ID и добавьте его вместе (bor). Если у вас есть это значение (это побитовое значение), вы можете запустить его на нем, чтобы увидеть, имеет ли он этот цвет.

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

+0

Спасибо. У клиента нет контакта с приложением. С наклейками я имел в виду настройку, которую я затем выберу в приложении при вводе заказа и его элементов. Таким образом, процедура заключается в том, что я получаю заказ на бумаге, а затем вставляю его в приложение, поэтому мы можем более легко отслеживать, что нужно делать для каждого элемента, который находится в определенном порядке. Так что мне также потребуется статус элемента ... если он закончен или нет. Если все элементы закончены с применением наклейки и т. Д., То я могу отметить свой заказ как полный. Не могли бы вы объяснить немного больше, что означало u с «поразрядным значением для цветов». – Dave

0
  1. Проблема, которую вы описываете - «продукт» доступен в нескольких цветах - распространен; стандартное решение - ввести понятие «вариант продукта». Например, футболки доступны в нескольких цветах и ​​разных размерах; обувь доступна в нескольких размерах и т. д.

Решение для базы данных может отличаться; см. this ответ на SO для моей рекомендации, если вы не знаете заранее, какими будут типы вариантов, или this, если вы это сделаете.

В зависимости от того, с каким решением вы включаетесь, вы можете включить ссылку на вариант в таблице product_order.

Это решение позволяет расширить решение для будущих типов продуктов, не загрязняя таблицу «product_order» - если вы используете рекомендацию @ Hans, чтобы включить битовую маску для указания цвета, и вы вводите размер в качестве другого измерения, очень быстро ваш " product_order "начинает включать в себя много знаний о структуре продукта, и становится сложно управлять/проверять.

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

  2. Для настройки вы можете создать таблицу «order_customization» со ссылкой на таблицу order_product и выбранную настройку, например.

    OrderID ProductID Настройка 1 2 синий стикер 1 1 зеленый стикер

Предположительно, не все пункты заказа будет иметь настройки; если одна строка order_product с количеством> 1 может иметь разные настройки для каждого элемента, вам придется разделить ее еще дальше ...

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