반응형
대리 키가 사용되는 경우 테이블에 삽입
테이블이 두 개 있습니다.
표 1은 다음과 같습니다.
product_id (INT 11)
- PK, 자동 증분category (INT 11)
- 색인, FK 대상Table2.category_id
product (VARCHAR 255)
표 2는 다음과 같습니다.
category_id (INT11)
- PK, 자동 증분category_name (VARCHAR 255)
이제 1번 테이블에 새로운 제품을 추가할 때는INSERT
카테고리와 상품 모두.하지만, 카테고리는 다음과 관련된 대리 키입니다.Table2.category_id
열(각 범주에는 열이 있음), 즉 삽입할 때 실제로는category_id
, 바로 그category_name
.
이 작업을 효율적으로 수행할 수 있는 방법에 대한 아이디어가 있습니까?
아니면 그냥 대리 키를 포기하고 자연 키에 충실해야 할까요?
감사해요.
만약 당신이 새로운 제품을 삽입하고 싶지만 당신이 아는것은category_name
, 그러나 그렇지는 않습니다.category_id
, 그 다음에 우리는 시도합니다.INSERT INTO ... SELECT
:
INSERT INTO table1 (category, product)
SELECT category_id, 'new product'
FROM table2
WHERE category_name = 'some category';
여러 가지 이유로 인해 이것은 나쁜 디자인으로 느껴집니다.첫째, 아마도 당신의 앱(예: PHP)은 다음과 같이 처리할 것입니다.category_id
복면을 쓰고 있는category_name
. 그래서 이상적으로 당신은 질문할 필요가 없습니다.table2
이 삽입체를 작동시킬 수 있습니다.여기서 또 다른 문제는 둘 이상의 카테고리가 같은 이름을 가질 수 있다는 것입니다(그러나 다른 이름).category_id
). 가능하면 기본 키로 직접 작업하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/53028151/insert-to-table-when-surrogate-key-is-being-used
반응형
'code' 카테고리의 다른 글
파일 이름에 대괄호 [ ]로 파일을 복사하고 * 와일드카드를 사용합니다. (0) | 2023.10.20 |
---|---|
목록의 모든 값이 특정 값보다 큰지 확인합니다. (0) | 2023.10.20 |
Android Studio : Run 또는 Debug 전에 APK를 자동으로 제거(또는 adb 명령 실행)하는 방법? (0) | 2023.10.20 |
자바스크립트 get element by name (0) | 2023.10.20 |
Q: Fedora 30에 MariaDB 설치 문제 (0) | 2023.10.15 |