2013-02-15 3 views
0

Я создал форму, которая содержит много флажков, и мне интересно, как это сделать в моей базе данных MySql.MySql добавляет слишком много записей для одной простой формы флажка?

вот пример формы:


Label: Сумма

Флажки: Маленький | Много | Не так много | и т.д. и т.п.


Label: Корзина Тип

Флажки: Деревянные корзины | Стальная корзина | и т.д. | и т.д.


этикетки: Фрукты

Флажки: Бананы | Яблоки | апельсины | и т.д. | и т. д.


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

Все эти отдельные элементы загружены из базы данных, и к ним добавлен идентификатор.

Путь им хранить их теперь при отправке формы сейчас: Таблица: FruitBasket Запись 1: Fruitbasket Id = 1 Fruit Id = 1 Корзина Тип = 1 Сумма Id = 1 Запись 2: Fruitbasket Id = 1 Fruit Id = 1 Корзина Тип = 1 Сумма Id = 3

Так Отправляя эту форму один раз позволяет сказать, что 10 флажков выбранные будет генерировать много записей. Многие пользователи будут создавать их, и есть возможность сравнить эти FruitBaskets.

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

+0

Это звучит, как вы нормализовали свои таблицы, которые были бы лучшим подходом для системы OLTP. Это будет лучший подход для запросов к вашим данным. В вашем вопросе вторая корзина с фруктами должна иметь Fruitbasket Id = 2, верно? – Tom

+0

«Вторая корзина с фруктами должна иметь Фруктовую корзину Id = 2, верно?» - да – inControl

ответ

0

Я бы предложил использовать бит-поле для хранения каждой корзины фруктов. Вы можете напрямую сравнивать корзины фруктов с помощью побитовых операторов и т. Д. Если вы используете Javascript, чтобы ограничить пользователей возможностями, которые действительно доступны, тогда он должен работать нормально.

Пример:

// Quantities 
LITTLE = 1  (0x0000000000000001) 
MANY = 2   (0x0000000000000010) 
NOT_SO_MANY = 4 (0x0000000000000100) 
ALL_QTYS = 7  (0x0000000000000111) 

// Basket type 
WOODEN = 8  (0x0000000000001000) 
STEEL = 16  (0x0000000000010000) 
ALL_BASKETS = 24 (0x0000000000011000) 

// Fruit types 
BANANAS = 32  (0x0000000000100000) 
APPLES = 64  (0x0000000001000000) 
ALL_FRUIT = 96 (0x0000000001100000) 


user_selection = LITTLE | STEEL | BANANAS | APPLES; (0x0000000001110001) 

other_user_selection = LITTLE | WOODEN | BANANAS | APPLES; (0x0000000001101001) 

// use the bitwise AND to compare only the fruit types... 
if((user_selection & ALL_FRUIT) == (other_user_selection & ALL_FRUIT)) 
    echo "Fruit selection is the same!"; 
Смежные вопросы