2016-05-17 5 views
2

Я создаю приложение списка покупок для android, и я использую сервер MySQL.shopping list item data type

Я создал таблицу SQL с именем «shop_list», а ее столбцы - «list_id», «list_name», «user_id» и «item_ids».
Таким образом, каждый идентификатор списка подключается к идентификатору пользователя, поэтому, когда пользователь регистрируется, он может видеть только его списки.

Моя проблема заключается в том, что я не знаю, какой тип данных следует использовать для столбца «items».
У меня есть список элементов, которые я хочу, чтобы пользователи выбирали их элементы, поэтому я подумал об использовании типа данных SET и заполнил его всеми доступными идентификаторами элементов из таблицы «items», но я не знаю, как это сделать что.

Я также думал об использовании VARCHAR и просто разбирал текст, но я боюсь, что этого недостаточно, если пользователь добавит много элементов в список.

Просьба сообщить мне, что я могу сделать для выполнения этой работы.
Спасибо!

EDIT:
У меня есть две таблицы: 'products' и 'shop_list'.
это то, что 'products' выглядит следующим образом:

CREATE TABLE 'products' ( 
'id' int(5) NOT NULL AUTO_INCREMENT, 
'productname' varchar(45) NOT NULL, 
UNIQUE KEY 'id' ('id') 
) 

Теперь то, что мне нужно сделать еще одну таблицу, которая сохраняет списки создают пользователи.
Я думал о чем-то вроде этого:

CREATE TABLE 'shop_list' ( 
'list_id' int(5) NOT NULL AUTO_INCREMENT, 
'list_name' VARCHAR(45) NOT NULL, 
'user_id' VARCHAR(45) NOT NULL /*automatically insert the logged-on user ID*/ 
'products' /*I need this column to contain all the item IDs from 'products' table, according to the user's choice*/ 
); 

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

Еще раз спасибо

+0

вы можете использовать 'VARCHAR (5000)' From referece: _ Длина может быть указана как значение от 0 до 65,535_ – vaso123

+0

Спасибо за ваш комментарий, я просто думаю, что этот метод может быть довольно багги – Nickleby

ответ

1

Вы должны создать item таблицу, как это:

CREATE TABLE items(
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    name VARCHAR(100) NOT NULL, 
    description TEXT, 
    createdAt DATETIME, 
    PRIMARY KEY(id) 
); 

Эта таблица должна содержать все элементы, которые не только пользователи добавили в свой список.

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

После создания этого, вы должны создать еще один, который будет соответствовать элементы из item таблицы со списком из shop_list таблицы:

CREATE TABLE list_item(
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT 
    listId INTEGER NOT NULL, 
    itemId BIGINT UNSIGNED NOT NULL, 
    PRIMARY KEY(id), 
    FOREIGN KEY(listId) REFERENCES shop_list(id), 
    FOREIGN KEY(itemId) REFERENCES item(id) 
); 

Конечно, вам необходимо изменить тип данных listId, чтобы соответствовать ваш

+0

Эй, спасибо за вашу помощь, обратите внимание на мой EDIT – Nickleby

+0

@Nickleby Прежде всего, вашей таблице 'products' нужен первичный ключ, поэтому сделайте следующее:' ALTER TABLE products ADD PRIMARY KEY (id) ' Прочитайте мое сообщение внимательно , вам нужно создать другую таблицу, которая будет подключать продукты к списку. Вы не можете хранить все продукты списка в одной строке. Для этого нет данных. Лучшей практикой является создание отдельной таблицы – dimlucas

0

Сделать это отдельный стол:

shop_list

  • LIST_ID
  • LIST_NAME
  • user_id

shop_list_item

  • LIST_ID
  • item_id
+0

Это я действительно, моя проблема заключается в том, как правильно вставлять значения – Nickleby

+0

Первые значения 'insert into shop_list (list_name, user_id) ('Мой список', 100); ', затем' insert into shop_list_item (list_id, item_id) значения (last_insert_id(), 12345), (last_insert_id(), 23456), (last_insert_id(), 34567); ' –

+0

О, вы получили, а затем извлекаете данные из обеих таблиц , хороший. но разве нет более простого способа достижения этого? – Nickleby