Нормально ли иметь МНОГО нулевых значений в базе данных MySQL?

#php #mysql

#php #mysql

Вопрос:

Я не уверен, как это правильно сформулировать, но позвольте мне попробовать. Я работаю над созданием приложения для управления запасами, которое будет использоваться со многими разными клиентами, чтобы делать все, начиная с проверки их собственного запаса товаров, получения цен, заказа товара и т.д. Интерфейс выполнен на Flex (Flash Builder), а серверная часть — MySQL и PHP. Итак, вот реальный вопрос, я думаю. Когда клиент размещает заказ на продукт, я не уверен, сколько из того, что он заказывает, но мне нужно сохранить все товары в один «билет». (Пример: один заказ может быть на 2 яблока, 3 апельсина, банан и киви — следующий может просто заказать одно яблоко.) Итак, в моей базе данных tickets у меня есть место для 20 элементов (ticketItem1, ticketItem2 и т. Д.) — Очевидным недостатком здесь является то, что если клиент заказывает только один продукт, у меня остается 19 пустых мест.

Какие типы проблем, если таковые имеются, обычно связаны с наличием большого количества нулевых значений в базе данных? Есть ли способ предотвратить их возникновение? И есть ли какие-либо предложения, чтобы помочь в этом?

Также и, наконец, — каждый заказанный элемент (давайте снова используем apple) имеет свой собственный УНИКАЛЬНЫЙ штрих-код, связанный с ним. Таким образом, одно яблоко может быть пронумеровано 0001, а другое может быть 4524…

Спасибо за любую помощь, которую вы можете предложить.

-CS

Комментарии:

1. Почему вы не можете использовать отношение 1: n для хранения заказов и заказанных товаров?

2. Прочитайте о нормализации базы данных.

3. Вы не должны делать это таким образом. Вы должны добавить еще одну таблицу с именем orderItems или что-то в этом роде, с идентификатором заказа в нем — таким образом, вы можете иметь бесконечное количество продуктов на заказ, это намного проще в управлении, и это шикарное отношение «один ко многим».

Ответ №1:

Вместо 20 столбцов ticketItem1, ticketItem2, ... введите таблицу order_item , например:

Порядок таблиц:

 id customer
1  42
2  23
  

Элемент таблицы:

 id name
1  banana
2  kiwi
3  apple
4  oranges
  

Table order_item:

 order_id item_id multiplicity
1        1       1             # 1 banana
1        2       1             # 1 kiwi
1        3       2             # 2 apples
1        4       3             # 3 oranges
2        3       1             # 1 apple in the second order
  

Затем СОЕДИНИТЕ таблицы, чтобы получить все упорядоченные элементы в порядке.

Ответ №2:

У вас должна быть таблица, в которой указан порядок, и таблица для OrderDetails с идентификатором OrderID, указывающим на таблицу Order

Итак, если у вас есть 10 продуктов в заказе. У вас будет 1 строка по порядку и 10 в OrderDetails

Комментарии:

1. Итак, если я правильно понимаю, у меня все равно будет много нулевых значений, они просто будут в отдельной таблице, которая определяет, какой конкретный продукт был запрошен для этого «билета». В чем преимущество этого способа по сравнению с другим? — Я также прочитаю больше о нормализации БД. Однако — будет ~ 30-50 заказов / билетов в день… Я ценю помощь!

2. Не совсем. У вас есть 1 таблица, в которой перечислены все заказы, без билетов. Например, в этой таблице у вас есть следующие столбцы: ID, OrderDate, IsProcessed, а в другой таблице OrderItems: ID, OrderID, Ticket и любые другие столбцы для конкретной информации для 1 билета. Если у вас есть один заказ с 20 билетами. У вас будет 1 запись в таблице Orders и 20 записей в OrderDetails. И ни в каких столбцах не будет нулевых значений

Ответ №3:

Если вы хотите быть динамичным в том, что вы храните, вы можете использовать массив json. Я полностью согласен с другими, что нормализация базы данных — это первое, что нужно сделать. Я бы следовал правилам Кодда.

Но в случае, если вы не знаете точно, что вам нужно для хранения, json может быть решением. Однако одним из основных недостатков является то, что поиск становится довольно сложным.