Помощь с дизайном базы данных списка покупок - PullRequest
0 голосов
/ 20 сентября 2011

Я хочу создать таблицу списка покупок, которая будет принимать как категорию, так и определенные продукты.

Например: я добавляю в список покупок:

  1. Fruit (Category)
  2. Fuji Apple (продукт)
  3. Шампунь (категория)
  4. Шампунь Dove Energize (продукт)

У меня есть таблица продуктов с производителем(справочная таблица), таблица категорий с / SubCategoryId.

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

Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 24 мая 2012

Решение Богдана - очень хорошее решение, и если бы у меня была ваша проблема, я бы реализовал его решение, но если вы настаиваете на одном столбце в одной таблице для списка покупок, я думаю, что вы должны использовать подстроку

например,

CREATE TABLE grocery_list (
    [groceryItem] varchar(100)
);

Insert into grocery_list ([groceryItem]) values ('(c)Fruit')
Insert into grocery_list ([groceryItem]) values ('(p)Fuji Apple')
Insert into grocery_list ([groceryItem]) values ('(c)Shampoo')
Insert into grocery_list ([groceryItem]) values ('(c)Dove Energize Shampoo')

и для доступа к вашей подстроке таблицы первые 2 символа, чтобы проверить тип вашего элемента

Select [item] = case when substring(groceryItem,2,1) = 'c' then
   right(groceryItem,len(groceryItem) - 3) +  ' (Category)'
when substring(groceryItem,2,1) = 'p' then
   right(groceryItem,len(groceryItem) - 3) +  ' (Product)'
end 
from grocery_list

Это даст вам следующий результат

**item**
Fruit (Category)
Fuji Apple (Product)
Shampoo (Category)
Dove Energize Shampoo (Category)
0 голосов
/ 20 сентября 2011

Я бы создал два отдельных столбца, один для категорий и один для продуктов:

CREATE TABLE grocery_list (
    'category_id' INTEGER NULL FOREIGN KEY categories 'id',
    'product_id' INTEGER NULL FOREIGN KEY products 'id',
    ...
);

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

SELECT * FROM grocery_list, categories, products
    WHERE categories.id=grocery_list.category_id
    AND products.id=grocery_list.product_id;
...