2016-10-20 1 views
0

저는 약 20 개의 컬럼을 가진 테이블을 가지고 있습니다. 그것은 잘 작동하며 다른 많은 테이블과 관련이 있지만 잘 작동하고 디자인이 좋은 편입니다.SQL 테이블은 하나의 테이블 또는 두 개의 테이블을 디자인합니다.

이제는 거의 같은 열을 가진 다른 유형의 데이터를 저장해야합니다. 기본적으로 동일한 15 개의 열이 있지만 5 개의 열은 완전히 다른 두 가지 유형입니다. 두 가지 유형이 있습니다. 그럼 어떻게해야합니까? 1. 첫 번째 테이블에 새 열을 추가하여 하나의 테이블에 저장합니까 -> 이렇게하면 5 개의 열이 저장되는 데이터 유형에 따라 null이됩니다.) 또는 2. 분할하여 2 테이블과 각 테이블보다 다른 테이블에 반복 동일한 열이 3. 다른 방법으로?

COLUMNS CASE 1 - ONE 같은 테이블에 저장

ID   INTEGER 
Description NVARCHAR(max) 
Value   FLOAT 
ValueEUR  FLOAT 
ValueUSD  FLOAT 
YearOfBuilt SMALLINT 
New   BIT 
Requirements NVARCHAR(max) 
FIELD A1 
FIELD A2 
FIELD A3 
FIELD A4 
FIELD A5 
FK_TypeID  INT 

내가 위의 표에 다른 문서 유형에 대한 5 개 새로운 필드를 추가 할 : 나는 유형에 대한 데이터를 저장하면이 경우

FIELD B1  FLOAT 
FIELD B2  FLOAT 
FIELD B3  FLOAT 
FIELD B4  FLOAT 
FIELD B5  FLOAT 

을 1 저장된 필드 값은 nullFIELD B1, FIELD B5 열입니다. 글쎄, 그것은 작동하지만 일부 필드는 유형에 따라 비어있을 것입니다.

또는 내가

아래의 경우 2에서 테이블 디자인을 할

COLUMNS 사례 2 - 동일한 열을 반복하지만, 제외 열 수 없습니다 - 두 개의 테이블

표 1

ID   INTEGER 
Description NVARCHAR(max) 
Value   FLOAT 
ValueEUR  FLOAT 
ValueUSD  FLOAT 
YearOfBuilt SMALLINT 
New   BIT 
Requirements NVARCHAR(max) 
FIELD A1 
FIELD A2 
FIELD A3 
FIELD A4 
FIELD A5 
FK_TypeID  INT 

표 2에 STORE 이 테이블에 필요함

ID   INTEGER 
Description NVARCHAR(max) 
Value   FLOAT 
ValueEUR  FLOAT 
ValueUSD  FLOAT 
YearOfBuilt SMALLINT 
New   BIT 
Requirements NVARCHAR(max) 
FIELD B1  FLOAT 
FIELD B2  FLOAT 
FIELD B3  FLOAT 
FIELD B4  FLOAT 
FIELD B5  FLOAT 
FK_TypeID  INT 

이제이 경우 2, 나는 열은 필요하지 않지만 열은 제외합니다. 이것은 동일한 열 이름을 의미하지만 공간을 절약하기 위해 데이터가 저장됩니다 (null 값 없음).

어떤 접근 방식이 더 좋을까요? 다른 방법이 있습니까? 나는 데이터베이스 디자인에서 초보자가 아니다.

답변

1

은 일반적으로 우리가 두 개의 테이블로 분할 -이라고 데이터베이스 정규화 : https://en.wikipedia.org/wiki/Database_normalization

특히 그들이 사람들의 서로 다른 두 종류의 연락처 세부 정보 (예를 들어, 고객 대가 같은 경우-열이 예를 들어 어떤 식 으로든 관련이있는 경우 이렇게 직원) 다음에 새 테이블의 이름을 지정할 수 있습니다 (예 : 새 데이터베이스는 contact_details 또는 다른 이름으로 지정됩니다).

기본적으로 : 동일한 테이블에 모든 것을 저장하여 공간을 절약하거나 성능을 최적화하지 않고 아무것도 저장하지 않습니다. 사용자 또는 다른 개발자가 앞으로 이해할 수 있도록 데이터를 혼란스럽게 만드는 것입니다.

또한 앞으로 작성하는 쿼리에 대해 생각해보십시오. 모든 쿼리는 관련없는 데이터를 필터링해야하므로 모든 쿼리가 복잡해집니다. 서로 다른 테이블에 서로 다른 것을 저장하고 이해하기 쉽게 - 데이터베이스에서 진행중인 작업 + 코드

+0

좋아, 초보자입니다. 첫 번째 표와 동일한 15 열을 반복해도 상관 없습니다.열 이름은 동일하지만 기본적으로 다른 데이터이므로 열은 두 테이블간에 어떤 식 으로든 관련이 없습니다. – ExpertLoser

+1

아, 그렇습니다. 그렇습니다. 열 이름이 같아도 상관 없습니다 ... 데이터가 다르면 열 이름이 같기 때문에 같은 테이블을 공유하지 마십시오. 그들을 따로 보관하십시오. –

+2

기본적으로 : 같은 테이블에 모든 것을 저장하여 공간을 절약하거나 성능을 최적화하지 않고 아무것도 저장하지 않습니다. 데이터를 이해하기 위해 자신이나 다른 개발자가 데이터를 혼란스럽게 만드는 것뿐입니다. 또한 앞으로 작성하는 쿼리에 대해 생각해보십시오 - 모든 쿼리는 관련이없는 데이터를 필터링해야하므로 모든 쿼리가 더욱 복잡해집니다. 서로 다른 테이블에 서로 다른 것을 저장하고 이해하기 쉽게 - 데이터베이스의 코드 + 코드 –

관련 문제