我想創建一個購物清單表,它將接受類別和特定產品。幫助購物清單數據庫設計
例如:我添加到購物清單:
- 水果(類別)
- 紅富士蘋果(產品)
- 洗髮水(類別)
- 鳩季羨林洗髮露(產品)
我有產品表w /製造商(參考表),類別表w/SubCategoryId。
我希望用戶將類別或產品輸入到購物清單中,但知道輸入的項目是類別或產品的方法。請指教。
任何幫助,非常感謝。
我想創建一個購物清單表,它將接受類別和特定產品。幫助購物清單數據庫設計
例如:我添加到購物清單:
我有產品表w /製造商(參考表),類別表w/SubCategoryId。
我希望用戶將類別或產品輸入到購物清單中,但知道輸入的項目是類別或產品的方法。請指教。
任何幫助,非常感謝。
我會創建兩個單獨的列,一個類別和一個產品:
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;
爲什麼你不使用兩個單獨的表(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);
數據庫設計必須不完全與用戶界面相同:例如,如果用戶界面允許輸入類別和產品,這並不意味着數據庫必須具有用於類別和產品的唯一表格。
波格丹的解決方案是一個很好的解決方案,如果我有你的問題,我會實現自己的解決方案,但如果你在一個表中堅持一個欄爲你的購物清單,我想你必須使用子
像例如
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)
如果category_id或product_id保證爲每個記錄都爲NULL,那麼這個查詢不會返回任何結果嗎?我可能忘記了過時的JOIN語法。 –