帮助杂货清单数据库设计

时间:2011-09-20 19:33:39

标签: sql-server database database-design relational-database database-schema

我想创建一个接受类别和特定产品的杂货清单表。

例如:我添加到我的购物清单:

  1. 水果(类别)
  2. 富士苹果(产品)
  3. 洗发水(类别)
  4. Dove Energize Shampoo(产品)
  5. 我有产品表与制造商(参考表),类别表w / SubCategoryId。

    我希望用户将类别或产品输入到杂货列表中,但要知道输入的项目是类别或产品。请指教。

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

Bogdan解决方案是一个非常好的解决方案,如果我有你的问题我将实现他的解决方案,但如果你坚持在一个表中的一列为你的购物清单,我想你必须使用子串

例如

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')

并访问您的表子串前两个字符以检查您的项目类型

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)

答案 1 :(得分:0)

我会创建两个单独的列,一个用于类别,另一个用于产品:

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;