[SQL] 데이터베이스 (1)를 사용하여 한 번에 적 있나요 : 1 개 관계가 의미가?
SQL데이터베이스 (1)를 사용하여 한 번에 적 있나요 : 1 개 관계가 의미가?
데이터베이스의 1의 관계 : 1이 있어야 할 곳에 내가 정상화에 다른 일을 생각하고, 그것이 나에게 발생, 나는 한 번 생각할 수 없다.
이름 : SSN? 내가 같은 테이블에 그들이있을 것이다 PersonID : AddressID? 또, 같은 테이블.
many 또는 many : 나는 하나의 엄청나게 많은 예제와 함께 올 수 많은 (적절한 중간 테이블), 그러나 결코 1 : 1.
내가 뭔가를 분명 실종?
해결법
-
==============================
1.1 : 1의 관계는 일반적으로 당신이 어떤 이유로 더 큰 법인을 분할 한 것을 나타냅니다. 0 : 종종 때문에 물리적 스키마의 성능 이유이지만, 데이터의 큰 덩어리가 같은 시간에 "알 수없는"것으로 예상된다 아니라 것처럼이 로직 측에서 일어날 수있다 (이 경우 당신은 일이 또는 1 : 1,하지만 더 이상).하지
1 : 1의 관계는 일반적으로 당신이 어떤 이유로 더 큰 법인을 분할 한 것을 나타냅니다. 0 : 종종 때문에 물리적 스키마의 성능 이유이지만, 데이터의 큰 덩어리가 같은 시간에 "알 수없는"것으로 예상된다 아니라 것처럼이 로직 측에서 일어날 수있다 (이 경우 당신은 일이 또는 1 : 1,하지만 더 이상).하지
논리적 파티션의 예를 들어 : 당신은 직원에 대한 데이터를 가지고 있지만, 단지 그들이 건강 보험을 가지고 선택하면 경우, 수집해야 할 데이터의 더 큰 세트가있다. 모두가 쉽게 보안 분할 및 피하고 운반에 줄에 나는 다른 테이블에 건강 보험에 대한 인구 통계 학적 데이터를 유지하는 것이라고 보험과 관련이없는 쿼리에 주위 데이터입니다.
물리적 파티션의 예는 동일한 데이터를 여러 서버에서 호스팅되는 것입니다. 나는 (예를 들어, HR 사무소는) 다른 상태에서 의료 보험 인구 통계 학적 데이터를 유지할 수 있으며, 기본 데이터베이스는 다른 위치로 중요한 데이터를 복제 방지, 아직 것이 사용할 수 있도록 ... 연결된 서버를 통해 링크 만 할 수있다 필요한 쿼리 (여기 희귀 가정).
더 큰 기업의 일관된 부분 집합을 필요로 쿼리있을 때마다 물리적 파티셔닝은 유용 할 수 있습니다.
-
==============================
2.한 가지 이유는 데이터베이스의 효율성이다. 1 갖는 : 1 관계하면 행 / 테이블 잠금 동안 영향을받는 필드를 분할 할 수 있습니다. 테이블 A 업데이트의 톤을 가지고 있으며, 읽기의 테이블 B는 t을 가지고 (또는 다른 응용 프로그램에서 업데이트의 톤이있다) 경우, 테이블 A의 잠금은 테이블 B의에 무슨 일이 일어나고 있는지에 영향을주지 않습니다
한 가지 이유는 데이터베이스의 효율성이다. 1 갖는 : 1 관계하면 행 / 테이블 잠금 동안 영향을받는 필드를 분할 할 수 있습니다. 테이블 A 업데이트의 톤을 가지고 있으며, 읽기의 테이블 B는 t을 가지고 (또는 다른 응용 프로그램에서 업데이트의 톤이있다) 경우, 테이블 A의 잠금은 테이블 B의에 무슨 일이 일어나고 있는지에 영향을주지 않습니다
다른 사람들은 좋은 지적을 제기. 보안도 등 응용 프로그램이 시스템을 치는 방법에 따라 좋은 이유가 될 수 있습니다. 나는 다른 접근을하는 경향이 있지만, 특정 데이터에 대한 액세스를 제한하는 쉬운 방법이 될 수 있습니다. 그냥 핀치의 특정 테이블에 대한 액세스를 거부하는 정말 쉽습니다.
그것에 대해 내 블로그 항목.
-
==============================
3.스파 스. 데이터의 관계는 기술적으로 1 일 수있다 : 1이지만 해당 행은 각 행에 존재하지 않는다. 당신이 천만 행이 만 그 중 0.5 %에 존재하는 일부 값 세트가 있다면 당신은 인구가 희박한 할 수있는 테이블에 그 열을 밀어한다면, 공간 절약은 광대하다.
스파 스. 데이터의 관계는 기술적으로 1 일 수있다 : 1이지만 해당 행은 각 행에 존재하지 않는다. 당신이 천만 행이 만 그 중 0.5 %에 존재하는 일부 값 세트가 있다면 당신은 인구가 희박한 할 수있는 테이블에 그 열을 밀어한다면, 공간 절약은 광대하다.
-
==============================
4.높은 순위 답변의 대부분은 매우 유용한 데이터베이스 튜닝 및 최적화 한 이유 제공 : 1 개 관계를,하지만 난 1 예 "야생에서"아무것도에 초점을하지만, 할 : 1 개 관계가 자연적으로 발생한다.
높은 순위 답변의 대부분은 매우 유용한 데이터베이스 튜닝 및 최적화 한 이유 제공 : 1 개 관계를,하지만 난 1 예 "야생에서"아무것도에 초점을하지만, 할 : 1 개 관계가 자연적으로 발생한다.
이 예제의 대부분의 데이터베이스 구현의 한 가지 중요한 특성을 참고 : 1 관계 : 역사적 정보는 (1)에 대해 유지되지 않습니다. 특정 시점에서 1 : 즉, 이러한 관계는 1입니다. 데이터베이스 디자이너가 시간이 지남에 관계 참가자의 레코드 변경하고자하는 경우, 관계는 하나가 될 : M 또는 M : M; 1 자연 : 그들은 그들의 일을 잃게됩니다. 그 이해와 함께, 여기 간다 :
역사적 정보가 기록되지 않은 경우에만 1 관계 : 나는 이들 중 대부분이 1이라는 것을 이전에 만든 경고를 반복합니다. 직원이 조직에서 자신의 역할을 변경하거나, 관리자가 다른 부서의 책임을지지, 또는 직원이 차량을 재 할당되고, 또는 누군가 미망인과 재혼하는 경우에 따라서, 다음의 관계 참가자 변경할 수 있습니다. 데이터베이스가이 일에 대한 이전의 역사를 저장하지 않는 경우 : 1 관계 : 1 개 관계를, 그들은 합법적 인 하나 남아있다. 그러나 데이터베이스 (예 : 각 관계의 시작 및 종료 날짜를 추가하는 등의) 기록 정보, M에 그들은 거의 모든 차례 기록하는 경우 : M 관계를.
역사 노트에 두 개의 주목할만한 예외가있다 : 첫째, 어떤 관계 때문에 거의 역사적인 정보가 정상적으로 저장되지 않을 것이라는 점을 변경할 수 없습니다. 예를 들어, 대부분의 IS-A 관계 (예를 들어, 제품 유형) 불변; 즉, 그들은 변경할 수 없다. 따라서, 과거 기록 논쟁 점이며; 1 관계 :이 항상 자연 1로 구현 될 것이다. 둘째, 예약 - 임대 관계를 저장 날짜 별도로, 예약 및 임대가 독립적 인 사건이기 때문에, 자신의 날짜와 각. 엔티티는 오히려 1보다 자신의 날짜를 가지고 있기 때문에 : 시작 날짜를 가진 1 관계 자체, 이들은 1로 남아있을 것입니다 : 기록 정보가 저장되는 일 개 관계에도 불구하고.
-
==============================
5.귀하의 질문 때문에 당신이 그것을 말로 방식, 여러 가지 방법으로 해석 될 수있다. 응답은이 문제를 보여줍니다.
귀하의 질문 때문에 당신이 그것을 말로 방식, 여러 가지 방법으로 해석 될 수있다. 응답은이 문제를 보여줍니다.
현실 세계에서 데이터 항목 사이 1 관계 : 확실히 하나가 될 수 있습니다. 그것에 대해 아무 문제 없습니다. 는 관계 일반적으로 1-1이다 "는이다". 자동차는 차량입니다. 한 자동차 한 차량이다. 한 차량은 하나 개의 자동차 수 있습니다. 일부 차량은이 경우 하나 개의 차량이 차 아니다, 트럭입니다. 여러 가지 대답이 해석을 해결합니다.
(1 개) 관계가 존재, 테이블 적 분할을해야한다 :하지만 당신이 정말로 ... 1이됩니다 묻는 어떻게 생각? 즉, 지금까지 정확히 동일한 키를 포함하는 두 개의 테이블을해야합니까? 실제로, 우리 대부분은 기본 키를 분석, 그리고 다른 후보 키를하지만 그 질문은 약간 개의 다른 것입니다.
1NF, 2NF 및 3NF에 대한 정규화 규칙은 동일한 기본 키를 사용하여 두 테이블에 (분할에게) 테이블을 분해 필요하지 않습니다. 나는 BCNF, 4NF에서 스키마를 넣어 여부를 밖으로 일을하지 않았거나 5NF 이제까지 동일한 키를 가진 두 개의 테이블이 발생할 수 있습니다. 내 머리 위로 떨어져, 나는 대답은 어떤 것을 생각하지거야.
6NF라는 정상화의 수준이있다. 6NF에 대한 정규화 규칙은 확실히 동일한 기본 키를 가진 두 개의 테이블이 발생할 수 있습니다. 6NF는 NULLS 완전히 피할 수 있다는 5NF 이상의 장점이 있습니다. 이 모든 데이터베이스 디자이너 일부 중요하지만. 나는 6NF에 스키마를 넣어 방해 적이 없어요.
6NF 누락 된 데이터가 아닌 일부 열에 NULL로 행의, 생략 된 행에 의해 표현 될 수있다.
분할 테이블의 정상화가 아닌 다른 이유가있다. 때로는 분할 테이블은 더 나은 성능을 초래한다. 일부 데이터베이스 엔진을 사용하면 테이블을 분할하는 대신 실제로 분할하여 동일한 성능의 혜택을받을 수 있습니다. 데이터베이스 엔진을 최대 속도 일에 필요한 도구를 제공하면서는, 이해하기 쉽게 논리적 디자인을 유지하는 장점을 가질 수 있습니다.
-
==============================
6.나는 주로 몇 가지 이유를 사용합니다. 하나는 데이터 변경의 속도에서 큰 차이입니다. 더 효율적에 난 단지 감사 추적 메커니즘을 별도의 테이블에 10 컬럼 분할하는 5 열 5 밖으로의 이전 버전을 추적하는 데 관심이 있다면 내 테이블 중 일부는 내가 기록의 이전 버전을 추적하는 감사 추적을 가질 수있다. 또한, 나는 쓰기 전용 그 (회계 앱 말한다) 레코드가있을 수 있습니다. 당신은 달러 금액을 변경할 수 없습니다, 또는 그들이 당신이 다음 실수를하는 경우가 쓰기에 해당 레코드가 다음 보정 항목을 작성, 잘못된 기록을 조정해야, 대한했다 차지하고있다. 나는 그들이 갱신 및 삭제를 할 수없는 사실을 집행 테이블에 제약이 있지만, 나는 그는 수정에 제한없이 별도의 테이블에 보관, 가단있는 객체의 속성 몇 가지가있을 수 있습니다. 내가 이렇게 또 다른 시간이 의료 기록 애플리케이션입니다. 사인 오프 후 변경할 수 있습니다 방문과 관련이에 떨어져 서명되면 변경할 수없는 방문에 관련된 데이터 및 기타 데이터가 있습니다. 이 경우 나는 데이터를 분할하고 오프 서명 할 때 잠긴 테이블에 대한 업데이트를 거부 잠긴 테이블에 트리거를 추가하는 듯했으나 데이터에 허용 업데이트는 의사에 떨어져 서명되지 않습니다.
나는 주로 몇 가지 이유를 사용합니다. 하나는 데이터 변경의 속도에서 큰 차이입니다. 더 효율적에 난 단지 감사 추적 메커니즘을 별도의 테이블에 10 컬럼 분할하는 5 열 5 밖으로의 이전 버전을 추적하는 데 관심이 있다면 내 테이블 중 일부는 내가 기록의 이전 버전을 추적하는 감사 추적을 가질 수있다. 또한, 나는 쓰기 전용 그 (회계 앱 말한다) 레코드가있을 수 있습니다. 당신은 달러 금액을 변경할 수 없습니다, 또는 그들이 당신이 다음 실수를하는 경우가 쓰기에 해당 레코드가 다음 보정 항목을 작성, 잘못된 기록을 조정해야, 대한했다 차지하고있다. 나는 그들이 갱신 및 삭제를 할 수없는 사실을 집행 테이블에 제약이 있지만, 나는 그는 수정에 제한없이 별도의 테이블에 보관, 가단있는 객체의 속성 몇 가지가있을 수 있습니다. 내가 이렇게 또 다른 시간이 의료 기록 애플리케이션입니다. 사인 오프 후 변경할 수 있습니다 방문과 관련이에 떨어져 서명되면 변경할 수없는 방문에 관련된 데이터 및 기타 데이터가 있습니다. 이 경우 나는 데이터를 분할하고 오프 서명 할 때 잠긴 테이블에 대한 업데이트를 거부 잠긴 테이블에 트리거를 추가하는 듯했으나 데이터에 허용 업데이트는 의사에 떨어져 서명되지 않습니다.
또 다른 포스터 1에 댓글 : 1이 정상화되지 않고, 나는 특히 하위 유형, 어떤 상황에서 그 동의 것입니다. 나는 직원 테이블이 있고 기본 키가 SSN라고 (그 예입니다, 이것은 다른 스레드에 대한 좋은 키인지 아닌지에 대한 논쟁 저장하자). 직원은 다른 유형의 수 있습니다, 일시적 또는 영구적 말을하고 영구적 인 경우 그들은뿐만 아니라 null의 경우 유형 = '영구'해야한다 사무실 전화 번호와 같이 작성해야 더 많은 필드를 가지고있다. 제 3 정규형 데이터베이스에서 컬럼 만 키에 의존하는 직원을 의미하지만, 일 때문에 실제로, 직원 및 유형에 따라 다릅니다한다 : 1의 관계가이 경우에 완벽하게 정상, 그리고 바람직하다. 나는 일반적으로 채워진다 10 열,하지만 특정 유형의 20 추가 열이있는 경우 또한, 지나치게 스파 스 테이블을 방지 할 수 있습니다.
-
==============================
7.당신이 BLOB의있을 때 내가 생각할 수있는 가장 일반적인 시나리오입니다. 하자 당신이 데이터베이스에 큰 이미지를 저장하고 싶은 말은 (을 저장하는 일반적이 아닌 가장 좋은 방법,하지만 때로는 제약이 좀 더 편리하게). 당신은 블롭이 아닌 BLOB 데이터의 조회를 개선하기 위해 별도의 테이블에 있어야 할 일반적 것이다.
당신이 BLOB의있을 때 내가 생각할 수있는 가장 일반적인 시나리오입니다. 하자 당신이 데이터베이스에 큰 이미지를 저장하고 싶은 말은 (을 저장하는 일반적이 아닌 가장 좋은 방법,하지만 때로는 제약이 좀 더 편리하게). 당신은 블롭이 아닌 BLOB 데이터의 조회를 개선하기 위해 별도의 테이블에 있어야 할 일반적 것이다.
-
==============================
8.순수 과학의 관점에서, 그래, 그들은 쓸모가 있습니다.
순수 과학의 관점에서, 그래, 그들은 쓸모가 있습니다.
실제 데이터베이스에 별도의 테이블에 거의 사용 필드를 유지하기 위해 때로는 유용하다 : 속도에이 만이 필드를 사용하여 쿼리까지; 피 잠금 등에
-
==============================
9.오히려 필드에 대한 액세스를 제한 할 뷰를 사용하는 것보다, 때로는 특정 사용자 만 액세스 할 수있는 별도의 테이블에 제한된 필드를 유지하는 의미가 있습니다.
오히려 필드에 대한 액세스를 제한 할 뷰를 사용하는 것보다, 때로는 특정 사용자 만 액세스 할 수있는 별도의 테이블에 제한된 필드를 유지하는 의미가 있습니다.
-
==============================
10.나는 또한 당신이 상속을 사용하는 객체 지향 모델을 사용하는 경우를 생각할 수 있고, 상속 나무는 DB에 지속되어야한다.
나는 또한 당신이 상속을 사용하는 객체 지향 모델을 사용하는 경우를 생각할 수 있고, 상속 나무는 DB에 지속되어야한다.
예를 들어, 당신은 모두 상속 동물에서 클래스 새와 물고기가 있습니다. 당신의 DB에서 당신은 동물 클래스의 일반 필드가 포함 된 '동물'테이블을 가질 수 있고, 동물의 테이블은 새 테이블과 일대일 관계를 가지고 있으며, 물고기와 일대일 관계 표.
이 경우 레코드가 새를 나타낼 때 물고기 데이터를 포함하는 모든 열이 NULL로 설정되어있는 새와 물고기 특성을 유지하기 위해 널 (NULL) 컬럼을 많이 포함하는 하나 개의 동물 테이블이 필요하지 않습니다.
대신, 동물 테이블의 레코드와 일대일 관계가있는 새 테이블에 레코드를 가지고있다.
-
==============================
11.당신은 너무 많은 정보가있는 경우 1-1 관계도 필요하다. 테이블의 각 레코드에 기록 크기 제한이 있습니다. 때로는 테이블은 너무 레코드 크기가 너무 크지 않을 것 (기본 테이블에서 가장 일반적으로 조회 정보) 두 분할됩니다. 테이블이 좁은 경우 데이터베이스는 쿼리에서 더 효율적이다.
당신은 너무 많은 정보가있는 경우 1-1 관계도 필요하다. 테이블의 각 레코드에 기록 크기 제한이 있습니다. 때로는 테이블은 너무 레코드 크기가 너무 크지 않을 것 (기본 테이블에서 가장 일반적으로 조회 정보) 두 분할됩니다. 테이블이 좁은 경우 데이터베이스는 쿼리에서 더 효율적이다.
-
==============================
12.또한 "진짜"데이터베이스 변경 미만 (인식) 위험과 생산에 이미 테이블을 확장 할 수있는 방법입니다. 1보고 : 레거시 시스템 1의 관계는 종종 필드는 초기 설계 이후에 추가 된 좋은 지표이다.
또한 "진짜"데이터베이스 변경 미만 (인식) 위험과 생산에 이미 테이블을 확장 할 수있는 방법입니다. 1보고 : 레거시 시스템 1의 관계는 종종 필드는 초기 설계 이후에 추가 된 좋은 지표이다.
-
==============================
13.양쪽 (테이블이되지 않는 읽기 전용)에 의무적으로 두 테이블 사이 1 관계 : SQL에서 1을 적용하는 것은 불가능합니다. 1 | 0 : 가장 실용적인 목적을 위해 : SQL에서 "1"의 관계는 정말 일을 의미한다.
양쪽 (테이블이되지 않는 읽기 전용)에 의무적으로 두 테이블 사이 1 관계 : SQL에서 1을 적용하는 것은 불가능합니다. 1 | 0 : 가장 실용적인 목적을 위해 : SQL에서 "1"의 관계는 정말 일을 의미한다.
참조 제한 조건에 필수 카디널리티를 지원하는 무능력 SQL의 심각한 한계 중 하나입니다. 그들은 시간의 일부를 적용하지 않는 제약 조건을 말하는 다만 방법이기 때문에 "지연 가능"제약 정말 포함되지 않습니다.
-
==============================
14.당신이 대중으로 ORMs 중 하나를 사용하여 데이터를 사용하는 경우, 당신은 당신의 개체 계층 구조에 맞게 여러 테이블에 테이블을 중단 할 수 있습니다.
당신이 대중으로 ORMs 중 하나를 사용하여 데이터를 사용하는 경우, 당신은 당신의 개체 계층 구조에 맞게 여러 테이블에 테이블을 중단 할 수 있습니다.
-
==============================
15.내가 발견 한 것을 나는 1 수행 할 때 : 1 관계를 그 완전히 전신 이유가 아닌 관계형 이유.
내가 발견 한 것을 나는 1 수행 할 때 : 1 관계를 그 완전히 전신 이유가 아닌 관계형 이유.
예를 들어, 내가 한 테이블에서 사용자의 예약 된 부분을 넣고 논리적으로 해당 필드에 대한 사용 권한에 대해 훨씬 더 쉽게 그 규칙을 작성 허용하는 다른 테이블에있는 사용자의 사용자 편집 가능한 필드를 두는 것으로 나타났습니다.
1 개 관계가 완전히 고안되어, 거의 현상입니다 :하지만 당신은 이론 1, 정확합니다. 그러나 논리적으로 쉽게 데이터베이스를 추출 프로그램 및 최적화 할 수 있습니다.
-
==============================
16.대부분의 경우, 디자인은 1을 것으로 생각됩니다 누군가가 묻습니다 1 일까지 "많은 아니라, 왜이 일 수 없다"? 한 조기에 서로 개념을 이혼은이 일반적인 시나리오의 기대에서 이루어집니다. 사람과 주소를 잘 작성하지 바인딩 너무 단단히 않습니다. 많은 사람들이 여러 개의 주소를 가지고있다. 등등...
대부분의 경우, 디자인은 1을 것으로 생각됩니다 누군가가 묻습니다 1 일까지 "많은 아니라, 왜이 일 수 없다"? 한 조기에 서로 개념을 이혼은이 일반적인 시나리오의 기대에서 이루어집니다. 사람과 주소를 잘 작성하지 바인딩 너무 단단히 않습니다. 많은 사람들이 여러 개의 주소를 가지고있다. 등등...
일반적으로 두 개의 분리 된 객체 공간은 하나 또는 모두를 의미는 곱 (X : 대부분) 될 수있다. 두 개체가 진정으로, 진정으로 1 인 경우 : 심지어 철학적으로, 1, 그것은 더입니다-관계입니다. 이 두 가지 "객체는"실제로는 하나의 전체 개체의 부분입니다.
-
==============================
17.특정 시나리오에 필요한 확장 된 정보를 제공합니다. 프로그램이 테이블을 통해 컴파일 된 기존 응용 프로그램 (예 : RPG 등) 프로그래밍 언어 (그래서 표는 프로그램 (들)을 다시 컴파일해야 변경하는 경우). 파일을 함께 태그 또한 테이블 크기에 대해 걱정할 필요가 경우에 유용 할 수 있습니다.
특정 시나리오에 필요한 확장 된 정보를 제공합니다. 프로그램이 테이블을 통해 컴파일 된 기존 응용 프로그램 (예 : RPG 등) 프로그래밍 언어 (그래서 표는 프로그램 (들)을 다시 컴파일해야 변경하는 경우). 파일을 함께 태그 또한 테이블 크기에 대해 걱정할 필요가 경우에 유용 할 수 있습니다.
-
==============================
18.대부분의 자주는 이상의 논리 구조보다 물리적이다. 일반적으로 분할 I / 요구가 같은 객체에 속성의 나머지 부분보다 보안을 더 유지하는 것을 자주 액세스하는 데이터 또는 데이터를 분리하는과 관련된 물리적 장치 또는 기타 쿼리 최적화를 통해 O를 활용하기 위해 테이블을 분할 수직으로 사용된다 (SSN, 급여 등).
대부분의 자주는 이상의 논리 구조보다 물리적이다. 일반적으로 분할 I / 요구가 같은 객체에 속성의 나머지 부분보다 보안을 더 유지하는 것을 자주 액세스하는 데이터 또는 데이터를 분리하는과 관련된 물리적 장치 또는 기타 쿼리 최적화를 통해 O를 활용하기 위해 테이블을 분할 수직으로 사용된다 (SSN, 급여 등).
특정 속성은 엔티티의 일부에 적용 할 때 1-1 관계를 규정하는 유일한 논리적 인 고려 사항이다. 그러나 대부분의 경우 엔티티 추출을 통해 데이터를 모델링하는 더 나은 / 더 표준화 된 방법이있다.
-
==============================
19.나는 1 볼 수있는 가장 좋은 이유 : 1 관계 데이터베이스 설계의 슈퍼 서브 타입이다. 나는이 모델을 기반으로 부동산 MLS 데이터 구조를 만들었습니다. 다섯 가지 데이터 피드가 있었다; 주거, 상업, 다세대, 호텔 및 토지.
나는 1 볼 수있는 가장 좋은 이유 : 1 관계 데이터베이스 설계의 슈퍼 서브 타입이다. 나는이 모델을 기반으로 부동산 MLS 데이터 구조를 만들었습니다. 다섯 가지 데이터 피드가 있었다; 주거, 상업, 다세대, 호텔 및 토지.
나는 다섯 개 별도의 데이터 피드의 각 일반적이었다 데이터가 포함 된 상위 유형이라는 속성을 만들었습니다. 이것은 모든 데이터 유형에서 매우 빠른 "간단한"검색을 허용했다.
나는 5 개 개의 데이터 피드의 각각의 고유 데이터 요소를 저장하는 것이 오 개 별도의 하위 유형을 만들 수 있습니다. 적절한 하위 유형 레코드에 1 관계 : 각 슈퍼 레코드는 일을했다.
고객이 상세한 검색을 원한다면 그들은 예를 PropertyResidential을위한 슈퍼 하위 유형을 선택했다.
-
==============================
20.내 의견으로는 1 : 1 관계는 RDBMS에 클래스 상속 매핑합니다. 즉 partent 클래스 상태 공통의 속성을 포함하는 테이블 A가있다 1 관계 각 클래스 상속 상태는 1과 표 B로 RDBMS에 매핑되고 테이블에, 전문 속성을 포함. 테이블 namend A는 또한 "캐스팅"기능을 나타내는 "유형"필드를 포함
내 의견으로는 1 : 1 관계는 RDBMS에 클래스 상속 매핑합니다. 즉 partent 클래스 상태 공통의 속성을 포함하는 테이블 A가있다 1 관계 각 클래스 상속 상태는 1과 표 B로 RDBMS에 매핑되고 테이블에, 전문 속성을 포함. 테이블 namend A는 또한 "캐스팅"기능을 나타내는 "유형"필드를 포함
안녕 마리오
-
==============================
21.상당한 성능 이점이있는 경우 하나 개의 관계 테이블에 만들 수 있습니다. 당신은 별도의 테이블에 거의 사용되지 않는 필드를 넣을 수 있습니다.
상당한 성능 이점이있는 경우 하나 개의 관계 테이블에 만들 수 있습니다. 당신은 별도의 테이블에 거의 사용되지 않는 필드를 넣을 수 있습니다.
-
==============================
22.1 같은 테이블에 보관 될 것이다 : 1 : 1이 될 것이다 아무것도 아니라 정상화에 있다면 한 관계는 정말 이해가되지 않습니다.
1 같은 테이블에 보관 될 것이다 : 1 : 1이 될 것이다 아무것도 아니라 정상화에 있다면 한 관계는 정말 이해가되지 않습니다.
현실 세계의하지만, 그것은 종종 다릅니다. 당신은 응용 프로그램 인터페이스에 맞게 데이터를 파괴 할 수 있습니다.
-
==============================
23.아마도 당신은 당신의 데이터베이스에 입력 된 오브젝트의 어떤 종류가있는 경우.
아마도 당신은 당신의 데이터베이스에 입력 된 오브젝트의 어떤 종류가있는 경우.
표에서 말하는 T1은 하나 개의 관계에 대한 하나 ... 칼럼 C1, C2, C3이있다. 그것은의 확인, 그것은 표준화 된 형태입니다. 이제, 테이블 T2에, 만약 열이 있다고 C1, C2, C3, ... (명칭은 다르지만 종류 말과 역할은 동일 할 수있다)도 하나 개의 관계에 대한 하나. 그것은 T1과 같은 이유로 T2에 대한 확인이다.
그러나이 경우에, I는 C1, C2, C3 ... 및 T3 및 T3을 T1에서 T2에서 하나 개의 관계로 한 채, 별도의 테이블 T3에 대한 착용감을 참조. 다른 테이블이되는 이미 여러번 C1에 하나의 존재가 존재할 경우 I 더욱 적합 참조 C2는 C3는 ... 대신 T3의 경우가 B를 사용하여, 그 다음 표 B. 여러 행 표 A에서 대답하고있을 B에 T1에서 하나 개의 관계로 한 T2에서 B에 대해 동일한, 여전히 B. A에서 다수의 관계와 같은 하나
나는이 동의하지 않는 정상화 생각, 그리고 그것의 아이디어 외부 될 수있다 : 개체 유형과 자신의 스토리지 풀에 동일한 유형의 이동 객체를 식별 일부 테이블에서 하나의 관계에 대한 하나를 사용하여 여러에 하나 다른 테이블에서 관계.
-
==============================
24.그것은 보안을하지만, 보안 검사를 수행하기가 더 나은 방법에 대한 불필요한 중대하다. 당신이 키를 사용하면은 개방 한 문을 만들고, 상상 해보세요. 키가 다른 문을 열 수있는 경우, 당신은 알람을 울릴 것이다. 본질적으로, 당신은 "CitizenTable"와 "VotingTable"을 가질 수 있습니다. 투표 테이블에 저장되어있는 후보 중 하나에 대한 시민 한 표. 하나는 다시 투표 테이블에 표시 시민 경우, 알람 자신이어야한다. 우리가 후보 필드로 다스 려하지 때문에 조언을해야합니다,이 하나 개의 관계에 하나, 우리는 투표 테이블과 시민 테이블에 다스 려한다.
그것은 보안을하지만, 보안 검사를 수행하기가 더 나은 방법에 대한 불필요한 중대하다. 당신이 키를 사용하면은 개방 한 문을 만들고, 상상 해보세요. 키가 다른 문을 열 수있는 경우, 당신은 알람을 울릴 것이다. 본질적으로, 당신은 "CitizenTable"와 "VotingTable"을 가질 수 있습니다. 투표 테이블에 저장되어있는 후보 중 하나에 대한 시민 한 표. 하나는 다시 투표 테이블에 표시 시민 경우, 알람 자신이어야한다. 우리가 후보 필드로 다스 려하지 때문에 조언을해야합니다,이 하나 개의 관계에 하나, 우리는 투표 테이블과 시민 테이블에 다스 려한다.
예:
Citizen Table id = 1, citizen_name = "EvryBod" id = 2, citizen_name = "Lesly" id = 3, citizen_name = "Wasserman" Candidate Table id = 1, citizen_id = 1, candidate_name = "Bern Nie" id = 2, citizen_id = 2, candidate_name = "Bern Nie" id = 3, citizen_id = 3, candidate_name = "Hill Arry"
그런 다음, 우리가 같이 투표 테이블을 참조하는 경우 :
Voting Table id = 1, citizen_id = 1, candidate_name = "Bern Nie" id = 2, citizen_id = 2, candidate_name = "Bern Nie" id = 3, citizen_id = 3, candidate_name = "Hill Arry" id = 4, citizen_id = 3, candidate_name = "Hill Arry" id = 5, citizen_id = 3, candidate_name = "Hill Arry"
우리는 시민 수 (3) 베른 니를 사기에 불 거짓말 쟁이 바지라고 말할 수 있습니다. 그냥 예.
-
==============================
25.당신은 타사 제품에서 데이터베이스를 처리 할 때, 그때는 아마 꽉 커플 링을 방지하는 자신의 데이터베이스를 변경하지 않습니다. 데이터와 1 :하지만 당신은 하나에 해당 데이터가있을 수 있습니다
당신은 타사 제품에서 데이터베이스를 처리 할 때, 그때는 아마 꽉 커플 링을 방지하는 자신의 데이터베이스를 변경하지 않습니다. 데이터와 1 :하지만 당신은 하나에 해당 데이터가있을 수 있습니다
-
==============================
26.어느 곳 완전히 독립적 인 두 기관은 일대일 관계 공유로했다. 예를 많이이 있어야합니다 :
어느 곳 완전히 독립적 인 두 기관은 일대일 관계 공유로했다. 예를 많이이 있어야합니다 :
사람 <-> 치과 의사 (그 1 :! N, 그 잘못 때문에)
사람 <-> 의사 (의 1 : N, 또한 잘못 때문에!)
사람 <-> 배우자 (!의 1 : 0 | 1, 그것의 대부분은 잘못된 때문에)
편집 : 예, 사람들은 내가 항상 일을 찾고 있었다 경우 특히 아주 나쁜 예 있었다 : 1이 아닌 0 또는 1 양쪽에. 나는 나의 뇌가 잘못 발사이었다고 생각한다 :-)
그래서, 난 다시 시도 할 것이다. 그것은 유일한 방법은 당신이해야합니다 (소프트웨어가 간다까지로) 함께 그들 모두가 높은 분류에 함께 존재하는 시간이 될 것으로 두 개의 실체를 가질 수 있다는 생각을 조금 후에 밝혀졌습니다. 그리고, 만약 당신이 낮은 분해에 해당하는 경우에만, 일들이 분리해야하지만, 더 높은 수준에서 서로없이 살 수 없다. 문맥은, 다음의 열쇠입니다.
의료 데이터베이스의 경우 별도의 실체로 유지 신체의 특정 지역에 대한 다른 정보를 저장할 수 있습니다. 이 경우, 환자는 단지 하나의 머리를 가지고 있으며, 그들은이 필요하거나 환자 없습니다. (그들은 또한 한 마음, 그리고 기타 필요한 단일 기관의 번호를 가지고). 당신은 예를 들어 수술을 추적에 관심이 있다면, 각 지역은 고유의 별도의 엔티티해야합니다.
이 차량의 조립을 추적하는 경우 생산 / 재고 시스템에서, 당신은 확실히 차체 다르게 엔진의 진행 상황을보고 싶은, 그러나 하나 개의 관계에 하나가있다. 케어는 엔진이 있어야하며 하나 (또는 그것은 더 이상 '자동차'하지 않을 것이다). 엔진은 하나의 차에 속한다.
각각의 경우에 당신은 하나 개의 큰 기록으로 별도의 엔티티를 생성하지만, 잘못 될 분해의 수준을 제공 할 수있다. 그들은 높은 수준에서 그렇게 나타나지 않을 수도 있지만 그들은, 이러한 특정의 상황에서, 진정으로 독립적 인 엔티티입니다.
폴.
from https://stackoverflow.com/questions/517417/is-there-ever-a-time-where-using-a-database-11-relationship-makes-sense by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 각 행은 쿼리에 의해 반환에 대해 한 번 어떻게 저장 프로 시저를 실행합니까? (0) | 2020.04.09 |
---|---|
[SQL] 하나 개의 컬럼에 대한 DISTINCT (0) | 2020.04.09 |
[SQL] SQL - 대다 테이블의 기본 키 (0) | 2020.04.09 |
[SQL] 두 날짜 사이의 날짜 범위에서 데이터를 선택합니다 (0) | 2020.04.09 |
[SQL] 기본 키 또는 고유 색인? (0) | 2020.04.09 |