저는 현재 제 대학의 델파이 응용 프로그램을 만들고 있습니다. 이 프로그램은 데이터베이스에 관한 것이며 FireBird 2.1을 데이터베이스 서버로 사용합니다. 데이터베이스와 응용 프로그램은 Linux 배포판에 관한 것입니다.SQL 및 외래 키 :이 두 테이블을 올바르게 연결하는 방법?
내 Firebird 데이터베이스에 두 개의 테이블을 연결하려고합니다. 첫 번째 테이블은 배포판에 대한 정보를 제공하고 두 번째 테이블은 데스크톱 환경에 대한 정보를 제공합니다. 링크하려는 두 필드가 있습니다 : 배포 테이블의 기본 데스크탑 환경과 DE 테이블의 데스크탑 환경 이름.
하나의 배포판에는 설치 디스크에 있거나 설치 중에 사용자가 선택한 기본 데스크톱 환경이 하나만있을 수 있습니다. DE 테이블에는 DE의 이름이 기술 된 고유 한 필드가 있으므로 배포의 기본 DE 필드에 연결되어야합니다.
그러나 하나의 DE는 기본값 배포본으로 사용될 수 있으며 여기에는 충돌이 있습니다. 배포판 테이블의 기본 DE 필드는 고유해야하지만 그렇지 않습니다. 내가 도달하고자하는 것은 참조 무결성입니다. DE 테이블을 종속적으로 만드십시오.
또한 DISTR_NAME 및 ENV_NAME 필드로만 구성된 세 번째 테이블을 만들려고했으나이 세 번째 테이블을 DISTROS 및 DES 테이블에 의존하게 만드는 것이 유일한 방법입니다. 틀렸어. DES 테이블은 DISTROS 테이블에 의존해야하며, 어떻게해야하는지 알지 못합니다. 그래서 어떤 도움을 주시면 감사하겠습니다! 이 두 테이블을 올바르게 연결하는 방법?
그래서 만든이 두 테이블 :
CREATE TABLE DISTROS (
DISTR_NAME VARCHAR(50) NOT NULL,
ARCHITECT VARCHAR(50) NOT NULL,
DEFAULT_DE VARCHAR(50) NOT NULL,
LASTSTABLE VARCHAR(50) NOT NULL,
PACKMANAGE VARCHAR(50) NOT NULL
);
및
CREATE TABLE DES (
ENV_NAME VARCHAR(50) NOT NULL,
USED_LANG VARCHAR(50) NOT NULL,
LASTSTABLE VARCHAR(50) NOT NULL,
SUPPORT_3D SMALLINT,
FILEMANAGE VARCHAR(50) NOT NULL
);
ALTER TABLE DES ADD CONSTRAINT PK_DES PRIMARY KEY (ENV_NAME);
ALTER TABLE DES
ADD CONSTRAINT FK_DES_1 FOREIGN KEY (ENV_NAME) REFERENCES DISTROS (DE);
나는이 문제를 해결하는 방법을 알아낼 수 없습니다
: 분포 테이블이 부모 테이블이어야하며, DE 테이블은 자식 테이블이어야합니다. 분배 테이블에는 기본 키 (DISTR_NAME 필드)가 있어야하며 DE 테이블에는 외부 키 (ENV_NAME 필드, 분배 테이블의 DE 필드와 링크 된)가 있어야합니다.
그러나 SQL은 배포 테이블의 DE 필드를 기본 키로 요구하기 때문에 그렇게 할 수 없습니다. 기본 키는 고유해야합니다. 그러나 하나의 데스크탑 환경은 여러 리눅스 배포판에서 사용할 수 있으므로이 필드는 고유하지 않을 수 있습니다. 그리고이 두 테이블을 올바르게 연결하는 방법을 알 수 없습니다.
이 질문은 사용되는 프로그래밍 언어 또는 데이터베이스 관리 소프트웨어와는 전혀 관련이 없으므로 Delphi 및 IBExpert 태그를 제거했습니다. 이것은 엄격하게 파이어 버드 SQL 질문입니다. –
당신의 외래 키가'DISTROS'에서'DES'까지이어야하고 다른 길은 아닌 것이어야한다고 생각합니다. –
Mark Rotteveel, 예! 예! 정말 고마워요! 고맙습니다! 도움이되었고 이제 모든 것이 제대로 작동합니다! 고맙습니다! – ArchAlessus