0

我想創建一個購物清單表,它將接受類別和特定產品。幫助購物清單數據庫設計

例如:我添加到購物清單:

  1. 水果(類別)
  2. 紅富士蘋果(產品)
  3. 洗髮水(類別)
  4. 鳩季羨林洗髮露(產品)

我有產品表w /製造商(參考表),類別表w/SubCategoryId。

我希望用戶將類別或產品輸入到購物清單中,但知道輸入的項目是類別或產品的方法。請指教。

任何幫助,非常感謝。

回答

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; 
+2

如果category_id或product_id保證爲每個記錄都爲NULL,那麼這個查詢不會返回任何結果嗎?我可能忘記了過時的JOIN語法。 –

1

爲什麼你不使用兩個單獨的表(A類&產品),然後由此定義視圖:

CREATE VIEW vw_GroceryList 
AS 
SELECT 'C' AS [Type], Id, Name FROM Category 
UNION ALL 
SELECT 'P', Id, Name FROM Product 

要插入新行,您可以使用具有兩個參數的單個存儲過程:@Type CHAR(1)@Name NVARCHAR(100)。該SP將檢查@Type值,並且如果@Type =「C」將數據插入Category表或如果@type =「P」將數據插入到Product表:

CREATE PROCEDURE sp_InsertCategoryOrProduct 
@Type CHAR(1) 
,@Name NVARCHAR(100) 
AS 
IF @Type = 'C' 
    INSERT Category (...) VALUES ([email protected]); 
ELSE IF @Type = 'P' 
    INSERT Product (...) VALUES ([email protected]...) ; 
ELSE 
    RAISERROR('Invalid object type', 16, 1); 

數據庫設計必須不完全與用戶界面相同:例如,如果用戶界面允許輸入類別和產品,這並不意味着數據庫必須具有用於類別和產品的唯一表格。

+0

目標是添加到購物清單集合。我有一個類別和產品表。但雜貨清單「表」需要收集類別或產品的物品。你在這裏有什麼是項目插入類別和產品表。 – jmogera

+0

你想創建一個產品和類別之間的關係? –

+0

嘿波格丹,不,我想創建一個購物清單表,它可以讓你輸入物品。這些項目可以是類別或產品。因此,例如,「我的購物清單」可以具有「水果」(類別),「蘋果」(產品),「洗髮水」(類別),「男士洗髮水鴿子」(產品)。希望有所幫助。 – jmogera

1

波格丹的解決方案是一個很好的解決方案,如果我有你的問題,我會實現自己的解決方案,但如果你在一個表中堅持一個欄爲你的購物清單,我想你必須使用子

像例如

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)