내가 옵션을 하나 갈 것입니다.
주된 이유는 첫 번째 옵션을 사용하면 특정 외래 키 제약 조건을 사용할 수 있기 때문에 주 테이블의 모든 특성이 관련 테이블에만 연결될 수 있다는 것을 의미하며 두 번째 옵션은 동일한 특성을 사용합니다. 옵션을 사용하면 검사 제약 조건을 사용해야하므로 더 복잡한 데이터베이스 스키마를 만들게됩니다.
두 번째 이유는 데이터베이스 테이블이 비즈니스 엔티티를 반영해야한다는 것이고 첫 번째 옵션을 사용하면 더 정확하게 할 수 있습니다.
세 번째 이유는 각 "열거 형"에 대해 가장 정확한 데이터 형식으로 "열거 형"을 저장할 수 있다는 것입니다.
좀 더 자세한 예를 들어 보겠습니다. 데이터베이스가 셔츠를 판매하기위한 것으로 가정 해 보겠습니다. 셔츠는 예를 들어 색상이나 크기와 같은 세부 정보를 확인할 수 있습니다.
Create table Shirts
(
Id int,
Model_Id int,
Color_Id int,
Size_Id int
)
Create table Models
(
Id int,
Name varchar(50)
)
Create table Colors
(
Id int,
Name varchar(20)
)
Create table Sizes
(
Id int,
Name varchar(5)
)
이 두 번째이로 번역 것 :
는
Create table Shirts
(
Id int,
Model_Id int,
Color_Id int,
Size_Id int
)
Create table Enums
(
Id int,
Name varchar(50),
Categoery_Id int
)
Create table Categories
(
Id int,
Name --(Model, Color, Size etc`)
)
이제 누군가가 열거 테이블의 특정 레코드에 대한 CATEGORY_ID을 변경 말할
첫 번째 옵션은이 같은 것으로 해석 할 - 귀하의 데이터는 더 이상 정확하지 않습니다. 이는 첫 번째 옵션으로는 발생할 수 없습니다.
이 테이블에 보관되는 데이터의 용도는 무엇입니까? 특정 값 유형에 추가 열이 필요할 가능성은 얼마나됩니까? – iamdave
대부분 미리 정의 된 텍스트 특성 (예 : 필터링에 사용할 수있는 레이블)으로 사용되며 다른 테이블에서 외래 키로 참조됩니다. –
[5 가지 간단한 데이터베이스 설계 오류 예방] (https : // www.simple-talk.com/sql/database-administration/five-simple--database-design-errors-you-should-avoid/) - 포인트 1은 "일반적인 룩업 테이블"입니다. # 2 - 이것을 피하십시오 ! –