[SQL] SQL 데이터베이스 테이블에서 다형성?
SQLSQL 데이터베이스 테이블에서 다형성?
나는 현재와 같은 같은 '기본 필드'로 구성 내 데이터베이스에 여러 테이블을 가지고 :
name character varying(100),
description text,
url character varying(255)
하지만 영화 테이블 RELEASE_DATE있는 동안, 예산 등 tv_series이 필드 시즌, 에피소드, 방송을 가지고 예를 들어입니다 기본 테이블의 여러 전문이
이제 처음이 문제가되지 않습니다,하지만 난이 전문 테이블에 외래 키와 두 번째 테이블라는 linkgroups을 만들려고합니다. 즉 어떻게 든 자체 내에서 정상화해야합니다.
내가 들었이를 해결하는 한 가지 방법은 키 - 값 쌍 테이블로 정상화이지만,이 '데이터베이스 내에서-A-데이터베이스'기법의 일종이기 때문에 내가 그 생각처럼하지, 난 몰라 특정 키 / 필드가 필요하거나 특별한 형식을 요구하는 방법이, 그리고 그것을 가져 오기 및 주문 데이터 이후에 큰 고통이 될 것입니다.
나는 더 나은 여러 테이블 사이 또는 '공유'가 기본 키에 지금은 방법을 찾고 있어요 그래서 : 방법은 일반 테이블과 여러 전문 테이블을함으로써 그것을 정상화.
해결법
-
==============================
1.네, 문제는 하나의 하위 유형의 하나의 객체가 부모 클래스의 특정 행을 참조 할 수 있습니다. @Jay S에 의해 주어진 예에서 시작,이 시도 :
네, 문제는 하나의 하위 유형의 하나의 객체가 부모 클래스의 특정 행을 참조 할 수 있습니다. @Jay S에 의해 주어진 예에서 시작,이 시도 :
create table media_types ( media_type int primary key, media_name varchar(20) ); insert into media_types (media_type, media_name) values (2, 'TV series'), (3, 'movie'); create table media ( media_id int not null, media_type not null, name varchar(100), description text, url varchar(255), primary key (media_id, media_type), foreign key (media_type) references media_types (media_type) ); create table tv_series ( media_id int primary key, media_type int check (media_type = 2), season int, episode int, airing date, foreign key (media_id, media_type) references media (media_id, media_type) ); create table movies ( media_id int primary key, media_type int check (media_type = 3), release_date date, budget numeric(9,2), foreign key (media_id, media_type) references media (media_id, media_type) );
이것은 @ 마이크 g 언급 끊긴 아형의 일례이다.
@Countably 무한하고 @ 피터에 의해 다시 코멘트 :
두 테이블에 INSERT 두 삽입 문을 필요로한다. 하지만 그 SQL에서 또한 자식 테이블이 언제든지 사실이다. 그것은 할 수있는 평범한 일입니다.
UPDATE는 두 문장이 필요할 수 있습니다,하지만 당신은 하나 개의 문장에서 그것을 할 수 있도록 RDBMS의 일부 브랜드, 가입 구문을 사용하여 멀티 테이블 UPDATE를 지원합니다.
데이터를 조회 할 때, 당신은 단순히 당신은 단지 일반적인 열에 대한 정보가 필요하면 미디어 테이블을 조회하여 그것을 할 수 있습니다 :
SELECT name, url FROM media WHERE media_id = ?
당신이 영화를 쿼리하는 알고 있다면, 당신은 하나와 함께 영화 관련 정보를 얻을 수 있습니다 조인
SELECT m.name, v.release_date FROM media AS m INNER JOIN movies AS v USING (media_id) WHERE m.media_id = ?
주어진 미디어 항목에 대한 정보를 원하고, 당신이 무슨 타입인지 알 수없는 경우, 당신은 단지 하나의 하위 테이블이 일치 할 것을 알고, 모든 하위 테이블에 가입해야 할 것이다 :
SELECT m.name, t.episode, v.release_date FROM media AS m LEFT OUTER JOIN tv_series AS t USING (media_id) LEFT OUTER JOIN movies AS v USING (media_id) WHERE m.media_id = ?
주어진 미디어는 영화, t에서 모든 열 경우. * NULL이됩니다.
-
==============================
2.테이블 전문 정보로의 오프 확장과 주요 기본 데이터 테이블을 사용하는 것이 좋습니다.
테이블 전문 정보로의 오프 확장과 주요 기본 데이터 테이블을 사용하는 것이 좋습니다.
전의.
basic_data id int, name character varying(100), description text, url character varying(255) tv_series id int, BDID int, --foreign key to basic_data season, episode airing movies id int, BDID int, --foreign key to basic_data release_data budget
-
==============================
3.이 PostgreSQL의 태그 때문에, 당신은 http://www.postgresql.org/docs/8.1/static/ddl-inherit.html보고 있지만,주의 사항을주의 할 수있다.
이 PostgreSQL의 태그 때문에, 당신은 http://www.postgresql.org/docs/8.1/static/ddl-inherit.html보고 있지만,주의 사항을주의 할 수있다.
-
==============================
4.당신이 관계형 세계에서 '분리 된 서브 타입'라고 찾고 있습니다. 그들은 언어 수준에서 SQL에서 지원되지 않습니다,하지만 더 많거나 적은 SQL의 상단에 구현 될 수있다.
당신이 관계형 세계에서 '분리 된 서브 타입'라고 찾고 있습니다. 그들은 언어 수준에서 SQL에서 지원되지 않습니다,하지만 더 많거나 적은 SQL의 상단에 구현 될 수있다.
-
==============================
5.당신은 주요 분야 플러스 각 특정 사건에 대해 동일한 UID와 UID 다음 확장 테이블과 하나 개의 테이블을 만들 수 있습니다. 당신이보기를 만들 수있는 별도의 테이블처럼 다음을 조회합니다.
당신은 주요 분야 플러스 각 특정 사건에 대해 동일한 UID와 UID 다음 확장 테이블과 하나 개의 테이블을 만들 수 있습니다. 당신이보기를 만들 수있는 별도의 테이블처럼 다음을 조회합니다.
-
==============================
6.어떻게 두 단계에서 할 필요없이 삽입하고 업데이트를 할 것, 빌 Karwin가 제시 한 분리 된 하위 접근 방식을 사용하십니까?
어떻게 두 단계에서 할 필요없이 삽입하고 업데이트를 할 것, 빌 Karwin가 제시 한 분리 된 하위 접근 방식을 사용하십니까?
가져 오기 데이터, 내가 조인하고 (내가 여기에 MS SQL 서버를 이야기하고있다) 여러 테이블에 영향을주기 때문에 선택이 해당 뷰에 특정 MEDIA_TYPE하지만 AFAIK 내가 캔트 갱신 또는 삽입에 기초한보기를 소개 할 수 있습니다. natually 및 저장 프로 시저없이 -이 두 가지 작업을 수행하지 않고 수행 할 수 있습니다.
감사
-
==============================
7.질문은 아주 오래하지만 현대의 PostgreSQL 버전 또한 JSON / jsonb / hstore 유형을 사용하여 고려 가치가있다. 예를 들면 :
질문은 아주 오래하지만 현대의 PostgreSQL 버전 또한 JSON / jsonb / hstore 유형을 사용하여 고려 가치가있다. 예를 들면 :
create table some_table ( name character varying(100), description text, url character varying(255), additional_data json );
from https://stackoverflow.com/questions/561576/polymorphism-in-sql-database-tables by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 목록에서 SqlBulkCopy의 <> (0) | 2020.04.13 |
---|---|
[SQL] 안드로이드 여러 데이터베이스가 열립니다 (0) | 2020.04.13 |
[SQL] 어떻게 SQL Server의 가입과 UPDATE 문을 할 수 있습니까? (0) | 2020.04.13 |
[SQL] 서로 데이터를 하나 개의 테이블을 업데이트 (0) | 2020.04.13 |
[SQL] 기본 키가없는 SQL 테이블에서 삭제 중복 레코드 (0) | 2020.04.13 |