[SQL] 여러 테이블이 많은 관계로 하나가 필요합니다
SQL여러 테이블이 많은 관계로 하나가 필요합니다
A, B, C, D. 엔티티 해당 테이블에있는 아주 다른 것, 다른 열, 그리고 그들 사이의 관계의 다른 종류 : 나는 여러 테이블과 SQL 데이터베이스를 가지고있다. 그러나, 그들은 모두 공유하는 하나의 작은 일 : author_id, 날짜, 내용 등 :이 경우, 동일한 구조를 가질 것이다 댓글 시스템의 필요성
전략이 스키마에 가장 적합한 될 것이라고 나는 경이 테이블 코멘트 시스템을 사용 .. D을 가지고 있습니다. 고전 '블로그'웹 사이트에서 나는 '의견'테이블 내부에 post_id를 가진 일대 다 관계를 사용할 수 있습니다.
나는 조금 이상한 비트 보이는이 문제를 처리 할 테이블을 A_comments, B_comments 등 필요한처럼 여기 보인다.
더 좋은 방법이 있나요?
해결법
-
==============================
1.comment_id 기본 키와 주석의 다양한 속성과 코멘트 테이블을 만듭니다.
comment_id 기본 키와 주석의 다양한 속성과 코멘트 테이블을 만듭니다.
또한,이 코멘트 작성 :
CREATE TABLE A_comment ( comment_id PRIMARY KEY REFERENCES comment(comment_id), A_id REFERENCES A(A_id) )
B, C에 대한 마찬가지로 수행 및 D.이 주석 사이의 참조 무결성과 당신이에 ID를 저장하는 경우 당신이 할 수없는 다른 모든 테이블을 보장, B, C와 직접 코멘트에서 D.
기본 키 보장 A_comment.comment_id을 선언하는 것은 코멘트는 A의 하나 개의 항목에 속해 그것은 A의 항목 및 B의 항목에 속하는에서 코멘트를 방지,하지만 너무 많은 당신이 달성 할 수있다하지 않습니다 수 외래 키; 이것은 어떤 데이터베이스 내가 지원의 알지 데이터베이스 수준의 제약 조건을 필요로한다.
이 디자인은 또한 의견을 고아 방지하지 않습니다,하지만 난, SQL에서이 문제를 방지하려면 피하기 위해 싶었던 바로 그 일을 수행하기 위해, 물론 제외 할 수있는 방법을 생각할 수 없다 : 여러 개의 코멘트 테이블을 만듭니다.
-
==============================
2.좀 더 다른 객체 유형에 대해 의견이 비슷한 "문제"를 가지고 (내 경우에는, 예를 들어 기사와 상점, 각 유형은 자신의 테이블이 있습니다).
좀 더 다른 객체 유형에 대해 의견이 비슷한 "문제"를 가지고 (내 경우에는, 예를 들어 기사와 상점, 각 유형은 자신의 테이블이 있습니다).
내가 무슨 짓을 : 내 의견 테이블에 내가 연결을 관리하는 두 개의 열이 있습니다
칼럼 구조는 다음이다 : ID, OBJECT_TYPE, object_id에, author_id, 날짜, 내용 등을
여기에서 중요한 것은 빠른 색인 만들기 위해 열 모두에 인덱스 (OBJECT_TYPE, OBJECT_ID를)하는 것입니다.
-
==============================
3.난 당신이 "정확히 한"A, B, C 또는 D에 외래 키와 함께 하나의 코멘트 테이블의 얘기하는 것을 가정
난 당신이 "정확히 한"A, B, C 또는 D에 외래 키와 함께 하나의 코멘트 테이블의 얘기하는 것을 가정
SQL이 처리 할 수없는 사실은 근본적인 약점 중 하나입니다. 문제는 이상 물어 또 다시됩니다.
참조, 예를 들어,
무결성 제약 조건을 가진 '집합'의 관계를 강화하는 가장 좋은 방법은 무엇입니까
귀하의 제약 조건이 A의 식별자의 조합이다보기에 당신의 "하나의 의견"테이블에서 "외래 키"입니다, B는 C와 D SQL은 기본 테이블에 전용 외래 키를 지원합니다.
언어는 상황에 맞는 지원을 가지고 같은 주장을 CREATE의 형태로, 그 SQL을 준수하십시오. 나는 그러나, 그 진술을 지원하는 어떤 SQL의 제품으로 알고있다.
편집하다 당신은 또한 그렇지 않으면 댓글을 자동으로 엔티티 사이에 "공유"가져옵니다 시간이 발생할 수에 대한 '하나의 의견 테이블과, 당신은 A, B, C 및 D의 키 사이 disjointness을 적용해야 할 수도 있음을 유의하십시오 바람직하지 않을 수도 다른 테이블에서 발생.
-
==============================
4.당신은 하나의 코멘트 테이블이 있고 그 테이블 내에서 주석이 속한 테이블 차별화 값이 포함 된 열을 가질 수있다 - 즉,이 테이블 B의 테이블 A, 2 댓글의 해당 열 수단에서 1 등을. 숫자 하나 다른 수를 나타내는 테이블을 자세히 설명 : 당신은 코멘트 테이블에 "매직 넘버"를 갖고 싶어하지 않은 경우, 당신은 단지 두 개의 열이있는 다른 테이블을 가질 수 있습니다.
당신은 하나의 코멘트 테이블이 있고 그 테이블 내에서 주석이 속한 테이블 차별화 값이 포함 된 열을 가질 수있다 - 즉,이 테이블 B의 테이블 A, 2 댓글의 해당 열 수단에서 1 등을. 숫자 하나 다른 수를 나타내는 테이블을 자세히 설명 : 당신은 코멘트 테이블에 "매직 넘버"를 갖고 싶어하지 않은 경우, 당신은 단지 두 개의 열이있는 다른 테이블을 가질 수 있습니다.
-
==============================
5.당신은 하나가 충분하다, 다른 모든에 대해 별도의 코멘트 테이블이 필요하지 않습니다. 당신은 충돌에 대한 걱정을하지 않아도 모든 의견은 고유 ID가 있습니다.
당신은 하나가 충분하다, 다른 모든에 대해 별도의 코멘트 테이블이 필요하지 않습니다. 당신은 충돌에 대한 걱정을하지 않아도 모든 의견은 고유 ID가 있습니다.
from https://stackoverflow.com/questions/5537779/multiple-tables-need-one-to-many-relationship by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 내가 준비된 문을 사용하지 않고 SQL을 소독 (0) | 2020.07.03 |
---|---|
[SQL] 와 BY와 오라클의 KEEP없이 PARTITION (0) | 2020.07.03 |
[SQL] MySQL의 또는 일반적으로 SQL에서 BETWEEN과 IN 사이의 성능 차이가 있나요? (0) | 2020.07.03 |
[SQL] SQL Server의 일광 절약 시간 시작 및 종료 기능을 만드는 방법 (0) | 2020.07.03 |
[SQL] 부동산의 열 이름은 최대 절전 모드로 매핑하기 (0) | 2020.07.03 |