大学用のDelphiアプリケーションを作成していますが、行き詰まっています。プログラムはデータベースに関するもので、私はFireBird2.1をデータベースサーバーとして使用しています。私のデータベースとアプリケーションはLinuxディストリビューションに関するものです。
Firebirdデータベースの2つのテーブルをリンクしようとしています。最初の表はディストリビューションに関する情報を提供し、2番目の表はデスクトップ環境に関する情報を提供します。リンクしたい2つのフィールドがあります。DistributionsテーブルのDefaultDesktopEnvironmentとDEsテーブルのDesktopEnvironmentNameです。
1つのディストリビューションには、インストールディスクにある(またはインストール中にユーザーが選択した)デフォルトのデスクトップ環境を1つだけ含めることができます。DEsテーブルには、DEの名前で記述された一意のフィールドがあるため、ディストリビューションのデフォルトのDEフィールドにリンクする必要があります。
ただし、1つのDEを複数のディストリビューションでデフォルトのDEとして使用できます。これは、競合が発生する場所です。distrosテーブルのデフォルトのDEフィールドは一意である必要がありますが、そうではありません。私が到達しようとしているのは、参照整合性です。DEテーブルを依存させます。
また、DISTR_NAMEフィールドとENV_NAMEフィールドのみで構成される3番目のテーブルを作成しようとしましたが、これで到達した唯一のことは、この3番目のテーブルをDISTROSテーブルとDESテーブルに依存させることですが、それは間違っています。DESテーブルはDISTROSテーブルに依存している必要がありますが、その方法がわかりません。だからどんな助けもいただければ幸いです!これらの2つのテーブルを正しくリンクするにはどうすればよいですか?
そこで、次の2つのテーブルを作成しました。
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フィールドが主キーである必要があるため、これはできません。また、主キーは一意である必要があります。ただし、1つのデスクトップ環境を多くのLinuxディストリビューションで使用できるため、このフィールドを一意にすることはできません。そして、これら2つのテーブルを正しくリンクする方法がわかりません。