복붙노트

[SQL] 다른 데이터 유형과 외래 키를 설정

SQL

다른 데이터 유형과 외래 키를 설정

나는 두 개의 테이블을 생성하고 난 도대체 내가 외래 키 열 데이터 유형을 설정할 수있는 이유 다른 테이블의 컬럼에 외래 키 하나 열을 설정하려면?

그냥 이해가되지 않습니다 아니면 내가 뭔가를 놓친 거지? 외부 키에 열이 목적에 서로 다른 데이터 유형이있는 시나리오가 있습니까?

좀 더 깊은 내 우려에 대해, 나는 몇 가지 간단한 포스트 그레스 DB를 구축하는 pgadmin을 사용하려고했습니다. 나는 기본 키 시리얼 데이터 형식으로 첫 번째 테이블을 만들었다. 그럼 난 외래 키하지만 데이터 유형을 만들려고? 내가 본 곳 직렬 서명되지 않은 BIGINT입니다. 그러나이 옵션조차 pgadmin에 존재 않습니다. 물론 나는 왜 GUI를 사용하고 다음 SQL을 사용하지만 수 있을까? 그래서, 대신 같은 문제를 Navicat를 시도했다. 모든 선택과 내 DB 디자인에 또 다른 실수를 할 같은 느낌 ...

편집하다:

아마도 내가 질문 잘못된 방법을 물었다. 나는 빌드 구조를 할 수 있었다 :

CREATE TABLE user
(
  id bigint NOT NULL,
  CONSTRAINT user_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

CREATE TABLE book
(
  user integer,
  CONSTRAINT dependent_user_fkey FOREIGN KEY (user)
      REFERENCES user (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);

나는 테이블 사용자에게 일부 데이터를 삽입 :

INSERT INTO user(id)
    VALUES (5000000000);

하지만 삽입 다음 캐스팅 할 수 없습니다

INSERT INTO book(user)
    VALUES (5000000000);

이해할 수있는 범위의 정수 밖으로, 그러나 명백한 설계 오류 : 오류.

그리고 제 질문은 : 우리는 제약 조건을 설정하면, 데이터 유형이 확인되지 않는 이유는. 내가 틀렸다 경우는 다른 데이터 유형을 가지고 유용이고, 대답은 시나리오를 포함해야합니다.

해결법

  1. ==============================

    1.사실은 메이크업의 의미는 여기 않는 이유입니다 :

    사실은 메이크업의 의미는 여기 않는 이유입니다 :

    테이블, 당신은 실제로 기본 키와 같은 열을 설정할 수 있습니다. 이 정수, 더블, 문자열 등이 될 수 그래서 비록 요즘, 우리는 대부분 하나의 정수를 사용하거나, 최근에는 테이블의 기본 키와 같은 문자열.

    외래 키는 다른 테이블의 기본 키를 가리키고 있기 때문에 당신이 외래 키의 데이터 유형을 지정해야하는 이유입니다. 그리고 그것은 분명 같은 데이터 타입이어야합니다.

    편집하다:

    우리가 볼 수있는 SQL 구현이 경우에 느슨 : 그들은 호환 유형 (INT와 BIG INT, 플로트 또는 DECIMAL 및 DOUBLE)하지만 자신의 위험 허용 않습니다. 그냥 우리는 아래에, 당신의 예에서 볼 수있다.

    그러나 SQL 규범은 모두 데이터 유형이 동일해야합니다 지정 않습니다. 데이터 형이 문자 인 경우, 그들은 정수 경우는 같은 크기를 가지고 있어야합니다, 그렇지 않으면, 같은 길이를 가지고 있어야하고 모두 서명 또는 두 가지 모두 서명해야합니다.

    당신은 여기 위에 자신이 2003 년에 발표 된 MySQL의 책에서 장을 볼 수 있습니다.

    이 질문에 대한 답변이 되었기를 바랍니다.

  2. from https://stackoverflow.com/questions/32267778/setting-up-foreign-key-with-different-datatype by cc-by-sa and MIT license