嗨,我是一般的数据库新手,请原谅我下面的noob问题,但我确实需要帮助。
我设计了一个包含4个表的数据库。我在C#中创建了一个应用程序,它将在应用程序运行过程中在这4个表中存储一些值。但是,当应用程序只有一个用户时,这一切都正常,但如果一个用户要使用在ASP.NET页面中运行的同一个应用程序,那么他们将访问和更改4中的数据。表格和问题很快就会出现。
我的问题是,如何防止这种情况发生?我希望每个用户都有自己独特的用户名,然后用它来区分表中的数据,但我对数据库的了解仅限于知道如何实现这一点。请帮帮忙?
答案 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