2012-10-06 5 views
1

나 자신을 위해 음식 요리법을 저장하는 Java 프로그램을 작성하려고합니다. 이 프로그램은 데이터베이스에 저장된 요리법을 저장, 검색 및 변경할 수 있어야합니다. 현재 익숙한 Access 2003을 사용하고 있지만 나중에 MySQL을 사용할 것입니다.새내기 데이터베이스 : 한 테이블에 대해 동일한 외래 키가 있습니까?

여기에 문제가 발생할 가능성이 매우 높지만 내 문제는 논리적 모델을 구현하는 것입니다.이 문제를 해결하는 방법이나이를 수행하는 더 좋은 방법이 있는지 알고 싶습니다.

다음은 구체적인 예입니다. '당근'과 같은 데이터베이스에 재료를 저장하고 싶습니다. 그러나 많은 항목에 대체 이름이 있습니다. 특히 영어가 아니기 때문에 특히 그렇습니다. 당근은 당근은 영어입니다. 당근은 제 언어로 "Morot"입니다. 어쩌면 나중에 제이미 올리버 (Jamie Oliver)의 쇼를보고 그는 "shapdoodles"같은 무언가를 당근이라 부릅니다.

이유는 내가이 세 가지 요리법을 추가하고 나중에 "당근"에 검색을 추가하기 때문에, 나는 물론 당근뿐만 아니라 morot 및 shapdoodles 관련된 요리법을 나열하는 프로그램을 원하기 때문에 , 그들은 또한 당근, 단지 다른 이름입니다!

아주 간단하게 들리지만, 처음에는 하나의 텍스트 필드로 "성분"표를 갖는 것이 쉽지 않다고 생각했습니다. 텍스트는 기본 키가되며 "당근"또는 "shapdoodle"과 같은 성분 이름을 저장합니다. 이 테이블은 "Ingredientlist"테이블과 연결되고 Ingredientlist는 "RecipeDescription"등으로 연결됩니다.

두 개의 텍스트 필드, 이름 및 대체 이름이있는 다른 테이블을 추가하고 Ingredient의 텍스트 필드를이 두 텍스트 필드 모두에 외래 키로 만들고이 두 텍스트 필드를 함께 사용하면 테이블의 기본 키가됩니다. 나는 좀 결과 이런 종류의 생각 : 그래서 때 나중에 나는 단순히 관련이 테이블에서 모든 것을 찾기 위해 쿼리를 보낼 수 ... 등등

AlernateIngredientTable: 
carrot shapdoodle 
carrot morot 

그리고 "당근"과에 거기에서에 당근 또는 shapdoodles 또는 morot와 관련된 조리법을 찾으십시오.

음, 테이블의 두 필드에 동일한 외래 키를 추가 할 수 없기 때문에 나는 잃어 버렸습니다!

+1

은 로캘 대신 엔티티와 연결되어야하는 이름을 결정하는 다른 "컨텍스트"를 가질 수있는 지역화 솔루션을 찾는 것처럼 보입니다. 이 도움이 될 수도 있습니다 : http://stackoverflow.com/questions/316780/schema-for-a-multilanguage-database – marko

답변

1

모델을 변경하고 모든 이름을 가진 재료를 연결하는 표를 만들어야합니다. 당근과 동등한 모든 성분은 동일한 아이디입니다.

table Ingredient(id, name) 

id Name 
--------------- 
1 carrot 
1 shapdoodle 
1 morot 
2 potato 
2 patata 
3 sugar 
3 brownsugar 
3 anothernameforSugar 

그리고 조리법 테이블 : 예를 들면 다음과 같습니다

table recipe(id, name, preparation_time) 
1 carrot cake 45 

세 번 째 표는이 예에서 성분

table recipeToIngredient(recipeId, ingredientId) 
1 1 
1 3 

와 조리법을 연결하는, 나는 정의 " 당근 케이크 조리법 "ID 번호가 이 조리법에는 당근 (id '1 테이블'재료 ') 및 설탕 (id 3)

,451,515,

모든 조리법이 당근/morots/등 관련 검색하려면 : 기본적으로

SELECT recipe.name FROM recipeToIngredient, recipe 
WHERE recipeToIngredient.recipeId=recipe.id 
AND ingredient.id = recipeToIngredient.ingredientId 
AND recipeToIngredient.ingredientId = (SELECT id FROM ingredients WHERE name'carrot') 

, 우리가 여기서했던 것은 재료에 대한 'ID'필드를 넣어하는 것입니다, 대신 모델을 사용하는 경우 성분 이름 기본 키입니다. 이 방법은 언어에 따라 이름이 바뀌는 반면, 주어진 성분에 대해 항상 동일한 ID를 사용하며 성분 이름이 아닌 ID에 따라 쿼리를 실행할 수 있습니다.

내가 도와 줄 수 있는지/더 설명해주세요.

+0

@Deragon : updated 대답 – mbarthelemy

+0

나는 그것을 얻었습니다! 감사! – Deragon

관련 문제