[SQL] 필드에 외부 키를 리팩토링
SQL필드에 외부 키를 리팩토링
PostgreSQL의 I에서 테이블 (구입)를 리팩토링 할 필요가; 그것은 다른 테이블 (쇼핑)에 외부 키를 가지고있다. 대신에 나는 텍스트 방식으로 관계를 유지하는 두 개의 필드를 원한다. 내가 어떤 정보가 손실되지해야 테이블은 이미 데이터가 포함되어 있습니다.
Purchases.shop_id: (long) -- is the field I need to drop
Purchases.shop: (characters) -- will hold the Shop's name
Purchases.shop_user: (characters) -- will hold the Shop's user name.
Shop.id: (long, pk) -- still referenced from Purchases
Shop.name: (characters) -- Shop's name
Shop.user: (characters) -- Shop's user name
가게가 (이름, 사용자)에 고유 한 (또는 물론 ID로)이기 때문에 두 개의 필드가 필요합니다.
ALTER TABLE Purchases ADD COLUMN shop CHARACTER VARYING(255);
ALTER TABLE Purchases ADD COLUMN shop_user CHARACTER VARYING(255);
-- ???
ALTER TABLE Purchases DROP CONSTRAINT shop_id_fk;
ALTER TABLE Purchases DROP COLUMN shop_id;
그래서 시작과 끝은 쉽게 중간 부분 캔 누군가의 도움이됩니다? :)
나는 외래 키는이를 위해 만들어진 것으로 알고 있지만 나는 이런 식으로해야한다.
해결법
-
==============================
1.당신이 잘못된 길을 갈 것 같다. 원래, 정규화 된 스키마는 일반적으로 우수하다. 당신이 숍 / 사용자를 표시해야하는 경우 뷰를 만들 수 있습니다.
당신이 잘못된 길을 갈 것 같다. 원래, 정규화 된 스키마는 일반적으로 우수하다. 당신이 숍 / 사용자를 표시해야하는 경우 뷰를 만들 수 있습니다.
하지만 당신은 그래서 여기에 간다, 당신의 이유가있을 수 있습니다 :
UPDATE purchases p SET (shop, shop_user) = (s.name, s."user") FROM shop s WHERE s.id = p.shop_id;
식별자로 예약어 "사용자"를 사용하지 마십시오. 그리고 "이름은"하나, 좀처럼 좋은 이름입니다. 그리고 포스트 그레스에 VARCHAR (255)는 통상적으로 오해를 나타낸다.
-
==============================
2.그래서 당신은 단순히 당신의 가게 테이블의 정보를 포함하여 구매 테이블을 업데이트하고 누락 된 조각 날 것으로 보인다. 그게 맞다면 당신은 당신이 그것을 드롭하기 전에 기존 외래 키를 사용하여 테이블을 업데이트 할 수 있습니다 :
그래서 당신은 단순히 당신의 가게 테이블의 정보를 포함하여 구매 테이블을 업데이트하고 누락 된 조각 날 것으로 보인다. 그게 맞다면 당신은 당신이 그것을 드롭하기 전에 기존 외래 키를 사용하여 테이블을 업데이트 할 수 있습니다 :
UPDATE purchases SET (shop, shop_user) = (SELECT name, user FROM shop WHERE shop.id = purchases.shop_id);
from https://stackoverflow.com/questions/24558650/refactor-foreign-key-to-fields by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 : 대신 DELETE CASCADE ON의 자기 참조 FK, 트리거 (0) | 2020.07.17 |
---|---|
[SQL] 어떻게 봄 부팅 프로젝트에 SQL 쿼리, Log4jdbc과의 매개 변수 및 결과를 기록하려면? (0) | 2020.07.17 |
[SQL] TO_CHAR () 출력에서 빈 패딩을 제거 (0) | 2020.07.17 |
[SQL] 생년월일에 제약 조건을 확인? (0) | 2020.07.17 |
[SQL] MySQL은 오류 1093 주위 방법 (0) | 2020.07.17 |