가정하면 오늘 다음과 같은 테이블이 :
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
필요한 경우 연결을 열어 끝내자 마자 연결을 닫으면 아무 일도 일어나지 않습니다. 여러 사용자가 동시에 연결을 열고 데이터를 삽입하는 확률은 매우 낮습니다. 사용자 # 1에 대한 데이터베이스 연결을 여는 잠금 메커니즘을 만들 수도 있고 다른 사용자에게 오류를 표시하거나 잠금이 설정된 경우 응용 프로그램이 대기하도록 할 수 있습니다. – Stefan
@Stefan 그는 사용자가 서로의 데이터를 볼 수 있다는 것에 우려하고 있으며 동시 트랜잭션에 대해 걱정하지 않는다고 생각합니다. –
@DaveZych는 실제로 질문을 해석하는 또 다른 방법입니다. 나는 그 질문이 실제로 무엇이 요구되는지 명확하게 밝히지 않는다고 생각한다. – Stefan