DB에 동일한 이름의 제약 조건이 있을 수 있습니까?
이것은 제가 여기서 질문했던 질문의 후속 질문입니다.
DB의 제약 조건이 동일한 이름을 가질 수 있습니까?
내가 가지고 있다고 말하시오:
CREATE TABLE Employer
(
EmployerCode VARCHAR(20) PRIMARY KEY,
Address VARCHAR(100) NULL
)
CREATE TABLE Employee
(
EmployeeID INT PRIMARY KEY,
EmployerCode VARCHAR(20) NOT NULL,
CONSTRAINT employer_code_fk FOREIGN KEY (EmployerCode) REFERENCES Employer
)
CREATE TABLE BankAccount
(
BankAccountID INT PRIMARY KEY,
EmployerCode VARCHAR(20) NOT NULL,
Amount MONEY NOT NULL,
CONSTRAINT employer_code_fk FOREIGN KEY (EmployerCode) REFERENCES Employer
)
이것은 허용됩니까?DBMS(SQL Server 2005 사용)에 따라 달라집니까?만약 그것이 허용되지 않는다면, 그것을 어떻게 해결해야 하는지에 대해 제안하는 사람이 있습니까?
아니오 - 제약 조건도 데이터베이스 개체이므로 해당 이름은 고유해야 합니다.
예를 들어 테이블 이름을 제약 조건에 추가해 보십시오. 그러면 테이블 이름이 고유하게 됩니다.
CREATE TABLE BankAccount
(
BankAccountID INT PRIMARY KEY,
EmployerCode VARCHAR(20) NOT NULL,
Amount MONEY NOT NULL,
CONSTRAINT FK_BankAccount_Employer
FOREIGN KEY (EmployerCode) REFERENCES Employer
)
기본적으로 "FK_(하위 테이블)_(상위 테이블)"을 사용하여 제약 조건의 이름을 지정하고 이 명명 규칙에 매우 만족합니다.
MSDN의 정보
이 제약 조건 이름은 스키마에 고유해야 합니다(즉, 동일한 데이터베이스에 있는 두 개의 다른 스키마 모두 동일한 이름의 제약 조건을 포함할 수 있음).데이터베이스 개체의 식별자는 별도로 지정하지 않는 한 포함 스키마 내에서 고유해야 합니다.따라서 제약 조건 이름은 다음과 같이 정의됩니다.
제약 조건의 이름입니다.제약 조건 이름은 숫자 기호(#)로 시작할 수 없다는 점을 제외하고 식별자에 대한 규칙을 따라야 합니다.constraint_name을 제공하지 않으면 시스템에서 생성한 이름이 제약 조건에 할당됩니다.
인덱스 이름과 비교:
인덱스의 이름입니다.색인 이름은 표 또는 보기 내에서 고유해야 하지만 데이터베이스 내에서 고유할 필요는 없습니다.인덱스 이름은 식별자 규칙을 따라야 합니다.
이는 식별자의 범위를 명시적으로 좁힙니다.
다른 답변은 모두 좋지만 제목의 질문에 "DB에 동일한 이름의 제약 조건이 있을 수 있습니까?"라는 답변을 추가해야겠다고 생각했습니다.
MS SQL 서버에 대한 대답은 "예"이지만 제약 조건이 서로 다른 스키마에 있는 경우에만 가능합니다.제약 조건 이름은 스키마 내에서 고유해야 합니다.
제약 조건 이름이 테이블과 연결된 것처럼 보이기 때문에 데이터베이스에서 고유해야 하는 이유가 항상 궁금했습니다.
나서의 SQL-99에 대해 .ASSERTION
제약 조건 - 검사 제약 조건과 비슷하지만 단일 테이블과는 별도로 존재합니다.어설션에 선언된 조건은 다른 제약 조건과 마찬가지로 일관되게 충족되어야 하지만 어설션은 여러 테이블을 참조할 수 있습니다.
AFAIK SQL 벤더가 구현하지 않음ASSERTION
제약.그러나 이것은 제약 조건 이름이 데이터베이스 전체 범위에 걸쳐 있는 이유를 설명하는 데 도움이 됩니다.
DBMS에 따라 다릅니다.
예를 들어 Postgre에서SQL, 정답은 "예"입니다.
왜냐하면 PostgreSQL은 스키마 내에서 제약 조건 이름이 고유할 필요는 없지만 테이블당 하나의 제약 조건 이름에 일치하는 항목이 둘 이상 있을 수 있습니다.
출처: https://www.postgresql.org/docs/current/static/sql-set-constraints.html
외부 키 제약 조건 이름이 동일한 스키마 내의 두 개의 서로 다른 테이블에서 동일한 것을 보았습니다.
DBMS(SQL Server 2005 사용)에 따라 달라집니까?
네, 분명히 DBMS에 따라 다릅니다.
다른 답변에서는 허용되지 않는다고 하지만 MS SQL CE("Compact Edition") 데이터베이스를 사용하여 실수로 두 개의 테이블에 동일한 제약 조건 이름으로 두 개의 FK 제약 조건을 성공적으로 만들었습니다.
테이블 이름을 지정하는 인덱스 및 제약 조건 이름을 처음에 만드는 것이 좋습니다.인덱스/제약 유형이 시작 또는 끝에 있는 두 가지 접근 방식이 있습니다.
UQ_TableName_FieldName
또는
TableName_FieldName_UQ
외부 키 이름에는 참조된 테이블/필드의 이름도 포함되어야 합니다.
좋은 명명 규칙 중 하나는 테이블 이름을 FullName_3 형식으로 지정하는 것입니다.고유 별칭 문자입니다.
Employers_EMR
Employees_EMP
BankAccounts_BNA
Banks_BNK
이렇게 하면 쿼리에서 "미리 정의된" 별칭을 사용할 수 있으므로 가독성이 향상되고 다음과 같은 외부 키의 이름을 쉽게 지정할 수 있습니다.
EMPEMR_EmployerCode_FK
BNKEMR_EmployerCode_FK
언급URL : https://stackoverflow.com/questions/1397671/can-there-be-constraints-with-the-same-name-in-a-db
'programing' 카테고리의 다른 글
HEAD와 마스터(또는 주) 간의 차이 (0) | 2023.07.10 |
---|---|
도커 이미지를 빌드할 때 이미 설치된 경우 유형 스크립트를 설치하라는 메시지가 표시됨 (0) | 2023.07.10 |
다중 연결 몽구스 (0) | 2023.07.10 |
범위의 MariaDB/MySQL 조인 테이블 (0) | 2023.07.10 |
상대 가상 경로 "는 여기서 허용되지 않습니다. (0) | 2023.07.05 |