1

嗨,我一般是数据库新手,所以请原谅我下面的菜鸟问题,但我确实需要帮助。

我设计了一个有 4 个表的数据库。我在 C# 中创建了一个应用程序,它将在应用程序运行过程中将一些值存储在这 4 个表中。但是,当应用程序只有一个用户时,这一切都可以正常工作,但是如果多个用户要使用在 ASP.NET 页面中运行的同一个应用程序,那么他们将访问和更改 4 中的数据表,很快就会出现问题。

我的问题是,如何防止这种情况发生?我希望每个用户都有自己唯一的用户名,然后用它在表格中区分它们,但我对数据库的了解仅限于知道如何实现这一点。请帮忙?

4

1 回答 1

5

假设您今天有下表:

最喜欢的食物
—————————————
食物编号
食品名称

它列出了所有最喜欢的食物。但后来你决定让我也使用你的数据库来存储最喜欢的食物。既然你不关心我最喜欢的食物,我也不关心你的,你需要一种方法将它们分开。首先,您将创建一个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
于 2013-05-24T22:58:35.573 回答