假设您今天有下表:
最喜欢的食物
—————————————
食物编号
食品名称
它列出了所有你最喜欢的食物。但后来你决定让我也使用你的数据库来存储我最喜欢的食物。既然你不关心我最喜欢的食物,我也不关心你的,你需要一种方法将它们分开。首先,您将创建一个User
表:
用户
—————————
用户身份
用户名
名
姓
然后,您需要将User
表与FavoriteFood
表相关联。这样做的一种方法是将外键添加到FavoriteFood
表中。给它一个名为的新字段UserId
:
最喜欢的食物
—————————————
食物编号
用户身份
食品名称
WHERE
然后,您可以通过在 SQL 代码中添加一个子句来为单个用户获取食物:
SELECT FoodName
FROM FavoriteFood
WHERE UserId = @UserId
这可能没问题,但我对此并不满意。此数据库未规范化!假设,您稍后想要存储有关您的食物的卡路里信息。您将一个名为的字段添加calories
到您的FavoriteFoods
表中。当您使用数据填充该字段时,您会注意到您多次输入相同的数据。您的所有用户都喜欢香蕉,因此您的表中有与用户一样多的香蕉条目。您必须一遍又一遍地输入完全相同的卡路里信息。相反,您应该只在表中获得所有食物信息,并使用一个完全独立的表将食物映射到用户:
食物
—————————
食物编号
食品名称
卡路里
最喜欢的食物
—————————————
食物编号
用户身份
使用连接来获取用户最喜欢的食物:
SELECT f.FoodName
,f.Caloires
FROM Food f
JOIN FavoriteFood a ON a.FoodId = f.FoodId
WHERE a.UserId = @UserId