2011-03-17 5 views
0

데이터 구조에서 정규화를 수행해야합니다. 나는 중복 데이터 (42 열)실제 데이터베이스를 정규화하는 방법

몇 가지 예를 많이 하나 개의 테이블이 있습니다

files_shit (id, filename String, upload_user, user_name, tags text, ....) 

을 나는 3 개 테이블 file, usertags

거의 30 000 레코드가를 만들려고합니다.

files, userstags 및 참조를 만드는 file_shit에서 데이터를 복사하는 가장 좋은 방법은 무엇입니까? (태그와 파일 사이에 다른 테이블이 있습니다 file_tags)

답변

3

먼저이 테이블을 변환 할 수 없습니다. 당신은 새로운 것을 사용해야 할 것입니다. 간단한 방법은이 테이블을 스테이징 테이블로 사용하는 것입니다. 새 테이블을 만듭니다. 그런 다음이 테이블에서 선택하고 추가하십시오.

각 테이블의 기본 키를 식별해야합니다. 그런 다음 테이블을 채우십시오 (참조 무결성 ... 등을 이유로 먼저 채울 테이블을 식별해야 할 수도 있음).

Sudo code eg : insert into files(columns..)Select <files columns> from files_shit group by primary_colum; 

(주 -. 이것은 ... 당신은 기본 키로 기본 컬럼 (들)을 사용합니다 당신이 조회를 수행해야합니다) 자동 생성 된 정수 (최적를 사용하려면 의미)

롯은 새로운 스키마와 관계에 의존합니다 (여기서 명확하게 정의하지 않았습니다). 희망이 도움이됩니다.

편집 - 조회

을 각 table.eg에 대한 INT ID 필드를해야합니다. file_id. 이들은 시스템 생성됩니다 (주로 auto_increment). 간단히 말해이 정보는 현재 테이블에 없습니다. 따라서 파일 테이블에 파일을 추가하고 file_id를 가져올 때이 파일의 ID를 조회하여 사용자 테이블에 추가하여 외래 키 관계를 충족시킵니다 (존재하는 방식에 따라) . SIMPLE EG - 주 테이블에 file_id/tag_id 열을 추가해보십시오.

먼저 태그 테이블을 채우십시오 (기본적으로 다른 태그는 참조하지 않습니다).

태그 테이블 (조회)을 결합하여 각 행에 대한 주 테이블 tag_id를 채 웁니다.

UPDATE <mainTable> mT JOIN tag_table tT on mT.tag_pk_column= tT.tag_pk_column 

SET mT.tag_id = tT.tag_id

지금

-이 태그 테이블의 일례이다 file_pk_col 조회하여 파일 선택 file_pk_col ..., tag_Id 그룹에 삽입한다.

+0

"조회를 수행해야합니다 ..."란 무엇을 의미합니까? 조회는 무엇입니까? SQL을 사용하여 대답 할 수 있습니까? 관계 :'users 1 ----- n files n ---- n tags' (마지막 태그는 더 이상 최적화 될 수 있습니다). 감사. – jcubic

+0

@jcubic 조회에 대한 편집을 참조하십시오. Ps - 당신이 many to many 관계를 가지고 있다면, 당신은 그 FILE_TAGS (file_id, tag_id) 타입을 지정하기위한 테이블이 필요합니다. – Jai

+0

예 질문에 표 수를 줄이려면이 작업을 건너 뜁니다. 와우. UPDATE에서 JOIN을 할 수 있습니까? 굉장해. 단일 업데이트에서 SELECT, JOIN 및 GROUP BY를 함께 사용할 수 있습니까? – jcubic

0

가장 간단한 방법은, 데이터베이스를 오프라인으로 새로운 테이블을 생성, 모든 필요한 제약 조건을 포함하여, 새로운 테이블을 채우는 데 INSERT INTO . . . SELECT column_list FROM old_table을 사용하는 것입니다. 일부 데이터는 새 테이블의 제약 조건을 충족시키지 않을 것입니다. 당신은 그것을 고쳐야 할 것입니다.

데이터베이스를 오프라인으로 만들 수 없거나 응용 프로그램에 변경 사항을 투명하게해야하는 경우 더 복잡해집니다. 트리거, 규칙 및 업데이트 가능한보기가 도움이 될 것입니다.

관련 문제