2017-11-07 2 views
-2

시스템을 개발 중이며 모델링에 대한 질문이 있습니다.데이터베이스 모델링 방법은 무엇입니까?

나는 "회사"라는 테이블이 있으며 각 회사의 저장 매개 변수가 필요합니다.

모든 회사에는 동일한 매개 변수가 있어야하며 변경할 수있는 것은 각 매개 변수의 값입니다. 이 매개 변수는 일부 시스템 자원을 설정하기위한 것입니다.

모델을 만드는 가장 좋은 방법은 무엇입니까?

A)
회사 (ID, 이름, ...)
매개 변수 (아이디, COMPANY_ID, PARAM1, PARAM2, 3 당겨, param4, param5)

B)
회사 (ID, 이름 , ...)
매개 변수 (ID, 이름)
Company_Parameters (COMPANY_ID, parameters_id, 값)

C)
또 다른. 뭐?


예 :

회사 A :
로고 주소 : 'http://www.logo.com/logo.jpg'
로그온 시도 : 3
테마 : '빨간색'
쇼 코멘트 :
알림을 가능하게 사실 : 거짓

회사 B :
로고 주소 : 'http://www.logo.com/logo2.jpg'
로그온 시도 : 1
테마 : '블루'
쇼 코멘트 : 사실

시 :
거짓 가 알림을 활성화이 예는에서 가상

있습니다 옵션 A :

회사 :
(id : 1, 이름 : 'Company 1', ...)
,451,515,(ID : 2, 이름 : '회사 2', ...)

매개 변수 :
(ID : 1, COMPANY_ID : 1, logo_address 'http://www.logo.com/logo.jpg',
logon_attempts : 3 주제 : '레드 'show_comments : TRUE, enable_notifications : FALSE)
(ID : 1 COMPANY_ID : 2 logo_address'http://www.logo.com/logo2.jpg 'logon_attempts 1 테마', '파란 show_comments : FALSE, enable_notifications : TRUE)

에서 옵션 B :

회사 :
(id : 1, 이름 : '회사 1', ...)
(id : 2, 이름 : 'Company 2', ...)

매개 변수 :
(ID : 1, 이름 : '로고 주소')
(ID : 2, 이름 : '로그온 시도')
(ID : 3, 이름 : '테마')
(ID : 4, 이름 : '쇼 댓글')
(ID : 5, 이름 : '알림 사용') 'http://www.logo.com/logo.jpg'

Company_Parameters :
(COMPANY_ID : 1, parameter_id : 1, 값)
(company_i D : 1 parameter_id : 2 값 : 3)
(COMPANY_ID : 1 parameter_id : 3 값 :) '적색'
(COMPANY_ID : 1 parameter_id : 4 값 : TRUE)
(COMPANY_ID 1 , parameter_id : 5, 값 : FALSE)
(COMPANY_ID : 2 parameter_id : 1, 값 'http://www.logo.com/logo2.jpg')
(COMPANY_ID : 2 parameter_id : 2, 값 1)
(COMPANY_ID : 2 parameter_id : 3 값 :) '청색'
(COMPANY_ID : 2 parameter_id : 4 값 : FALSE)
(COMPANY_ID : 2 parameter_id : 5 값 : TRUE)

+0

그 이상의 세부 사항을 제공해야합니다. Company는 회사 테이블에 직접 매개 변수를 포함 할 수 있으며, 다른 매개 변수는 Foreing 키를 통해 다른 테이블에 링크되고, 다른 매개 변수는 피벗 테이블을 통해 결합됩니다. 비즈니스 요구 사항과 제약 조건에 따라 다릅니다. 더 많은 정보가 없으면 이것은 데이터베이스 설계에 대한 의견과 일반적인 토론으로 빠르게 바뀔 것이며, SO는 그 장소가 아닙니다. – Nic3500

+0

옵션 A에서 같은 회사의'Parameters'에 여러 개의 행이 있습니까? 아니면 항목이 선택 사항입니까? 왜 두 개의 테이블이 분리되어 있습니까? – reaanb

답변

0

옵션 A는 관계형 접근 방식처럼 보이며 기본 선택입니다.

옵션 B는 Entity-Attribute-Value 솔루션으로 알려진 의심스러운 접근 방식입니다. 도메인의 valueCOMPANY PARAMETERS 인 경우 parameters_id 값에 따라 달라집니다. 일부 매개 변수 값에는 정수 유형, 일부 varchar 유형이 필요합니다. 따라서 하나의 열에 값 유형을 혼합하여 사용하는 쿼리는 해당 열의 여러 값 도메인을 고려해야합니다. 또 다른 문제는 여러 매개 변수를 기반으로 회사를 쿼리하려는 경우 쿼리를 복잡하게하는 여러 가지 자체 조인을해야한다는 것입니다.

+0

도움을 주셔서 감사합니다. @reaanb 문제를 더 잘 설명하고 예제를 설정하여 질문을 편집했습니다. –

+0

수정 사항에 따라 답변을 수정했습니다. – reaanb

0

"모든 회사에는 동일한 매개 변수가 있어야하며 변경할 수있는 것은 각 매개 변수의 값입니다." 그런 다음 하나의 테이블을 가지며 매개 변수 당 하나의 열이 있어야합니다.

일부 회사는 테마가 없거나 아직 테마를 모르는 경우에도 NULL을 셀에 넣을 수 있습니다.

나는 60 개 이상의 열을 사용하지 않을 것입니다. 수백 개의 열이 있다면 필터링하거나 정렬 할 필요가없는 기타 항목을 설명하는 JSON 문자열을 고려하십시오. 이는 '선택적'매개 변수에도 적용됩니다.

관련 문제