多个用户,但将数据存储在相同的表中

时间:2013-05-24 22:27:37

标签: c# asp.net database

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

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

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

1 个答案:

答案 0 :(得分:5)

假设您今天有下表:

FavoriteFood
—————————————
FoodId
FoodName

它列出了所有你最喜欢的食物。但是你决定让我用你的数据库存储我最喜欢的食物。既然你不关心我最喜欢的食物,而且我不关心你的食物,你需要一种方法让它们分开。首先,您将创建一个User表:

User
—————————
UserId
UserName
FirstName
LastName

然后,您需要将User表与FavoriteFood表相关联。执行此操作的一种方法是将外键添加到FavoriteFood表。给它一个名为UserId的新字段:

FavoriteFood
—————————————
FoodId
UserId
FoodName

然后,您可以通过在SQL代码中添加WHERE子句来获取单个用户的食物:

SELECT FoodName
  FROM FavoriteFood
 WHERE UserId = @UserId

那可能没问题,但我对此并不满意。这个数据库没有规范化!假设您以后想要存储有关食物的卡路里信息。您将名为calories的字段添加到FavoriteFoods表中。当您使用数据填充该字段时,您会注意到您多次输入相同的数据。你的所有用户都喜欢香蕉,所以你的桌子上有很多条目用于香蕉。您必须一遍又一遍地输入完全相同的卡路里信息。相反,您应该只在表格中获得食物的所有信息,并使用完全独立的表格向用户绘制食物:

Food
—————————
FoodId
FoodName
Calories

FavoriteFood
—————————————
FoodId
UserId

使用联接为用户获取最喜欢的食物:

SELECT f.FoodName
      ,f.Caloires
  FROM Food f
  JOIN FavoriteFood a ON a.FoodId = f.FoodId
 WHERE a.UserId = @UserId