2011-10-21 4 views
0

VB.Net 및 MySQL 데이터베이스를 사용하여 간단한 등록 프로그램을 만들려고합니다. 여기 내 간단한 테이블이 나는 테이블의 정상화 내 기본 지식을 향상시키기 위해 시도하고,표 정규화

enter image description here

그러나 기본적인 내용이고 내가 하루에 가정 해 봅시다, 피할 수있는 날짜 필드를 분리 그 이유는, 반복 같은 날짜의 삽입. 즉, 하루에 50 명의 개인이 등록되면 테이블에 50 번 추가하는 대신 단일 날짜 (레코드)를 tblRegDate 테이블에 추가하기 만하면됩니다. 이 일을 할 수있는 방법이 있습니까? VB.Net과 MySQL에서 가능합니까? 또는 일부 필드를 추가하거나 수정해야합니까? 또는 VB.Net에서 조건을 만들어야합니까? 위의 표는 내 친구가 가르쳐 준 것이지만 중복으로 제거하지 않는다는 것을 발견했습니다. 친절하게도 나에게 어떤 지시를 주거나 사이트에 직접 안내해 줄 수있는 간단한 튜토리얼이있다. 미리 감사드립니다!

여기 내 MySQL의 코드입니다 :

CREATE TABLE tblInfo(
     Number INT AUTO_INCREMENT, 
     LastName VARCHAR(45), 
     FirstName VARCHAR(45), 
     MiddleName VARCHAR(45), 
     Gender ENUM(M,F), 
     BirthDate DATE, 
     PRIMARY KEY(Number)); 

CREATE TABLE tblRegDate(
     IDRegDate INT AUTO_INCREMENT, 
     Date TIMESTAMP, 
     Number INT, 
     PRIMARY KEY(IDRegDate), 
     FOREIGN KEY(Number) REFERENCES tblInfo(Number)); 
+1

정보 테이블에'RegDate' 필드를 유지해야한다고 생각합니다. – AndrewR

+2

'tblInfo' 테이블에있는 하나의 DATE 컬럼에 필요한 스토리지는 외래 키 값에 대한 스토리지와 크기가 거의 같아서 공간을 절약 할 수 있습니다. 'tblRegDate' 테이블에 합류하는 비용은 절약 효과를 능가합니다. 이 기술은 반드시 자동으로 나쁜 것은 아닙니다. 이것은 기술 사용의 강력한 예가 아닙니다. –

답변

2

에 tblRegDate에서가 아니라 날짜를 유지하는 당신에게 추천 할 것입니다. 당신은 많은 성과를 잃을 것이다.

표 정규화에 대한 중복 값이 ​​없습니다. "관심사 분리"에 관한 것입니다.

또한 데이터베이스가 복잡해지지 않는 것이 중요합니다. 아무도 이해할 수없는 데이터베이스에서 단일 채움을 분리하면 결국 끝날 것입니다.

질문 : 등록에 대한 자세한 정보가 있습니까? 예를 들어 웹 페이지, IP, .....

"Person"과 "Registration"과 같은 두 개의 테이블이 있어야합니다. 그렇다면 두 가지 의미가 다른 것들이 섞여서는 안됩니다.

Google을 통해 많은 예제와 정보를 찾을 수 있습니다. 당신은 DB 구조를 정상화 위키 피 디아 http://en.wikipedia.org/wiki/Database_normalization

+0

감사합니다 ... 당신의 대답은 저에게 도움이됩니다. – aer

1

가 실제로는 테이블에서 타임 스탬프를 분리해서하는 것은 좋지 않습니다.
다른 테이블, 즉 timeTable이 필요합니다. 그것은 id와 timestmap이라는 두 개의 컬럼을 가질 것이고, tblRegDate 테이블에서이 id를 외래 키로 참조해야합니다. 외래 키는 정수이며 크기는 4 바이트입니다. 날짜가 다른 한편으로 3 바이트.

따라서 나는 당신이 하나의 필드를 오토넷의 advanages이없는이 경우에서 볼 같이 별도의 테이블

1

, 항상 산의 그것에게 마음을 유지 - 당신이 가지고있는 필드를 기반으로 http://en.wikipedia.org/wiki/ACID

, 당신은 단지 하나의 테이블로 유지해야합니다. 매번 조회해야하기 때문에 등록 날짜를 구분하는 것은 좋은 디자인이 아닙니다. 실제 생활에서 앱이 항상 regdate로 검색하거나 정렬하면 reg 날짜를 색인하는 것을 고려할 수 있습니다.

그리고 사용자 테이블에 FK RegDate 테이블을 사용하면 효율적이지 않습니다.

p.s. 또한 DB 정규화에는 4 가지 수준이 있음을 명심하십시오. DB 디자인을 처음 사용하는 경우 DB 설계를 1에서 2로, 2에서 3으로 정규 양식으로 이동하는 방법을 배우는 것이 좋습니다.

실제 상황에서는 거의 네 번째 정규 양식을 사용하지 않습니다. 거래 시스템은 대개 3 번째로 머물러 있습니다.

희망이 있습니다.

+2

4 개가 아닌 (적어도) 6 개의 표준 양식이 있습니다. BCNF, DKNF 및 EKNF와 같은 다른 것들도 있습니다. 제 5 정규형은 실제 사용시 가장 일반적 일 것입니다. – sqlvogel