나는 사이드 프로젝트를위한 데이터베이스 스키마를 디자인하려고 노력했지만, 내가 편한 어떤 것도 만들 수 없었다. 내 데이터 액세스를 위해 LINQ와 함께 ASP.Net을 사용하고 있습니다.동적 항목에 관한 데이터베이스 디자인 - 한 행 또는 여러 행?
사용자는 2 개의 숫자 속성과 1 개의 참조 속성 인 항목 이름으로 최대 10 개의 "항목"을 지정할 수 있습니다.
이 항목을 1 행에 입력하면 30 개 이상의 열 (최소)과 쉽게 동일 할 것입니다. 는 item_1_name (REF) 는 item_1_volume item_2_name ... 등 ...
을 item_1_weight 그리고 각 속성은 기본적으로 1에서 400 + 범위 수 단순히 참조 테이블에 이러한 열을 켤 수 없습니다.
사용자가 항목에 항목 1 개를 넣기로 결정한 경우 해당 데이터에 대한 개체를 만드는 방법은 LINQ처럼 고정적 일 것이라고 생각했습니다. 속성 및 기타 등등이 있는지 확인해야합니다. NULL을 지정하고 그에 따라 작업하십시오. 또한 항목에 허용되는 항목의 수를 늘리고 싶다면 두통이 될 수 있습니다.
내가 생각해 본 다른 옵션은 각 항목에 대한 행을 만들고이를 항목 ID와 연결하는 것입니다. 그래서 나는 본질적으로 널 엔트리를 가지지 않을 것이지만, 내 테이블은 천문학적으로 깊지 만 아주 넓지는 않을 것입니다. 단지 5 개의 홀수 열만 있기 때문입니다.
내 디자인에서 간과 할 부분이 있습니까?/이렇게하는 것이 훨씬 효율적이고 효율적인 방법이 있습니까?
EDIT : 내가 천문학적으로 성장할 것이라고 말할 때, 사용자가 항목을 만들 수 있고 각 항목에 항목 그룹이있을 가능성이 높습니다. 따라서 사이트에서 하루에 1 회 항목을 만들면 항목의 최대 개수 (10)와 함께 항목의 그룹 3 개를 가질 수 있습니다.이 항목의 유일한 항목은 30 개입니다. 이 비율로 매일 1 주일 동안 항목을 작성하면 단일 사용자에 대해210 개의 행을 가질 수 있습니다.
외래 키 대신 item_id에 CHECK 제약 조건을 사용하는 것이 더 좋지 않습니까? – Dave
내 편집을 확인하십시오. 나는 동의한다, 그러나 나는 열의 수가 거대하게 될 것이므로 내가 할 일의 효율성에 여전히 관심이있다. – MunkiPhD
예, CHECK 제약 조건을 사용할 수 있지만 12 개 항목으로 확장해야하는 경우 CHECK 제약 조건을 수정하면 메타 데이터가 변경되므로 (ALTER TABLE) 비용이 많이 듭니다. 값 (11), (12) 삽입은 쉬운 데이터 변경입니다. –