2013-05-24 7 views
1

안녕하세요 저는 일반적으로 데이터베이스에 익숙하지 않으므로 아래에서 제 멍청한 질문을 용서하십시오.하지만 도움이 필요합니다.여러 명의 사용자가 있지만 동일한 테이블에 데이터를 저장하는 중

나는 4 개의 테이블을 가진 데이터베이스를 설계했다. 응용 프로그램을 실행하는 동안 이러한 4 개의 테이블에 일부 값을 저장하는 C#에서 응용 프로그램을 만들었습니다. 그러나이 응용 프로그램의 사용자가 한 명일 경우이 모든 작업이 정상적으로 작동하지만 한 명 이상의 사용자가 ASP.NET 페이지에서 실행중인 동일한 응용 프로그램을 사용하게되면 4 명의 사용자가 액세스하고 변경하게됩니다. 테이블 및 문제가 곧 발생할 것입니다.

내 질문은 어떻게 이런 일이 발생하지 않도록합니까? 각 사용자가 고유 한 사용자 이름을 사용하고 테이블에서 이들을 구별하기 위해 사용하지만 데이터베이스 지식에 한계가 있습니다. 도와주세요?

+0

필요한 경우 연결을 열어 끝내자 마자 연결을 닫으면 아무 일도 일어나지 않습니다. 여러 사용자가 동시에 연결을 열고 데이터를 삽입하는 확률은 매우 낮습니다. 사용자 # 1에 대한 데이터베이스 연결을 여는 잠금 메커니즘을 만들 수도 있고 다른 사용자에게 오류를 표시하거나 잠금이 설정된 경우 응용 프로그램이 대기하도록 할 수 있습니다. – Stefan

+0

@Stefan 그는 사용자가 서로의 데이터를 볼 수 있다는 것에 우려하고 있으며 동시 트랜잭션에 대해 걱정하지 않는다고 생각합니다. –

+0

@DaveZych는 실제로 질문을 해석하는 또 다른 방법입니다. 나는 그 질문이 실제로 무엇이 요구되는지 명확하게 밝히지 않는다고 생각한다. – Stefan

답변

5

가정하면 오늘 다음과 같은 테이블이 :

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

그리고 당신의 좋아하는 음식을 모두 나열합니다. 그러나 당신은 내가 데이터베이스를 좋아하는 음식을 저장하는 데 사용하도록 결정할 것입니다. 너는 내가 좋아하는 음식에 관심이 없기 때문에 나는 너의 것에 관심이 없다. 너는 그들을 별개로 유지할 방법이 필요하다. 첫째, 당신은 User 테이블을 만듭니다 :

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

그런 다음, 당신은 FavoriteFood 테이블에 User 테이블을 관계 할 필요가있다. 이 작업을 수행하는 한 가지 방법은 외래 키를 FavoriteFood 테이블에 추가하는 것입니다. 이 새로운 필드가 UserId라는 보내기

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

그런 다음 당신은 당신의 SQL 코드에 WHERE 절을 추가하여 단일 사용자에 대해 단지 음식을 얻을 수 있습니다 :

SELECT FoodName 
    FROM FavoriteFood 
WHERE UserId = @UserId 

확인 될 수있다, 그러나 나는 그것에 만족하지 않는다. 이 데이터베이스는 정규화되지 않았습니다! 나중에 음식에 대한 칼로리 정보를 저장하려고한다고 가정합니다. FavoriteFoods 테이블에 calories이라는 필드를 추가합니다. 해당 필드에 데이터를 채우는 동안 동일한 데이터를 여러 번 입력하는 것을 알게됩니다. 모든 사용자는 바나나를 좋아하므로 사용자가있는 것처럼 바나나에 대한 항목이 테이블에 많이 있습니다. 똑같은 칼로리 정보를 반복해서 입력해야합니다. 대신, 당신은 단지 한 번 테이블에 음식에 대한 모든 정보를 가지고 있고, 사용자에게 음식을 매핑 완전히 별도의 테이블을 사용한다 : A는 사용자의 좋아하는 음식을 얻기 위해 조인을 사용

 
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 
+0

이 솔루션을 내 애플리케이션에 맞출 수 있기 전에 외래 키에 대해 더 자세히 알아야하지만이 응답을 보내 주셔서 감사합니다. – Belgarath

관련 문제