0

저는 이제 데이터베이스 디자인을 처음 접했습니다.데이터베이스 정규화 - 관계가없는 테이블을 갖는 것이 좋습니다.

테이블을 추가해야하는 MS SQL 데이터베이스가 있습니다. 이 테이블에는 다른 테이블과 관련된 정보가 들어 있습니다. 그러나 기본 키에 대한 후보는 없습니다 (모든 필드는 중복 될 수 있음). 테이블을 사용하는 유일한 방법은 특정 종류의 쿼리에 필요할 수있는 레코드를 유지하는 것입니다. 다른 테이블에도 포함되지만 (고유하게 사용하지 않는) 필드를 사용하면 쉽게 검색 할 수 있습니다.

특히, 주요 테이블에는 많은 화학 기록이 있습니다. 각 화학 기록은 품질 관리 기록이라고하는 다른 기록 집합과 관련됩니다 (두 번째 표에 있음). 필드는 "BatchID"라는 필드와 연관되어 있습니다. 슈퍼 쉬운 부분은 "이 BatchID로 모든 레코드를 가져와"내가 필요한 것을 정확하게 얻을 수 있다는 것입니다. 그러나 두 테이블의 BatchID 인스턴스가 여러 개있을 수 있습니다 (사실 일반적으로 존재합니다). 그래서 링크를 연결하기 위해 점프해야합니다. 좀 더 일반적인 의미에서, 이론 상으로는 주위에 떠 다니는 탁자를 붙이지 않아도 괜찮습니까?

압도적으로 간단한 솔루션은 화학적 테이블과 아무 관계없이 품질 관리를 db에 넣는 것입니다. 나는 적어도 하나 이상의 다른 테이블을 삽입해야 할 필요가 있습니다. 아마도 더 많은 것, 그리고 그와 같은 제 인생을 복잡하게 만드는 유일한 이유는 데이터베이스 디자인의 중요한 교훈을 위반하고 싶지 않기 때문입니다.

내 질문에, 데이터베이스에 부동 테이블 만 있으면 괜찮습니까? 아니면 그게 맞습니까?

도움 주셔서 감사합니다.

+1

게시 한 시나리오가 너무 추상적이어서 나를 파악할 수 없습니다. 보다 실질적인 본보기를 줄 수 있습니까? (즉, "특정 종류의 쿼리"가 무슨 의미입니까?). 당신은 관계를 설명합니다 ("다른 테이블에도 포함 된 필드를 사용하여 매우 쉽게 검색 할 수 있습니다"). 그래서 당신이 또한 그것을 확장 할 수 있다면 질문에 대답하는 데 도움이됩니다. – Oded

+0

답장을 보내 주셔서 감사합니다. 내 메인 테이블에는 화학 기록이 많이있다. 각 화학 기록은 품질 관리 기록이라고하는 다른 기록 집합과 관련됩니다 (두 번째 표에 있음). 필드는 "BatchID"라는 필드와 연관되어 있습니다. 슈퍼 쉬운 부분은 "이 BatchID로 모든 레코드를 가져와"내가 필요한 것을 정확하게 얻을 수 있다는 것입니다. 그러나 두 테이블의 BatchID 인스턴스가 여러 개있을 수 있습니다 (사실 일반적으로 존재합니다). 그래서 링크를 연결하기 위해 점프해야합니다. 좀 더 일반적인 의미에서, 이론 상으로는 주위에 떠 다니는 탁자를 붙이지 않아도 괜찮습니까? – Stanton

+0

질문을 편집하고 주석 대신 설명을 추가 할 수 있습니까? 댓글은 2 차적인 것으로 간주되며 일부 사용자는 댓글을 읽을 수 없습니다. – Oded

답변

1

이론적으로 외래 키 제약 조건이없는 테이블을 사용하는 것이 좋습니다. 그러나 설명하는 표 (사용자가 설명하는 표)는 일 것입니다.에는 일괄 처리 테이블을 참조하는 외래 키가 있어야합니다. 일괄 처리 테이블에 기본 키가 "일괄 처리 ID"가 있어야합니다.

관계형 모델에는 테이블에 적어도 하나의 후보 키가 있어야합니다. 후보 키가없는 SQL 테이블을 갖는 것은 거의 항상 나쁜 생각입니다.

+0

Catcall에 감사드립니다. – Stanton

관련 문제