0

状況は次のとおりです。

[職種] は 1 つの [職種] に属し、どの [職種] は 1 つの [業種] に属しますか

したがって、私の初期設計は次のようなものです。Job には Job Category を検索する fk があり、Job Category には Industry を参照する fk があります。しかし、問題は、仕事がどの業界に属しているかを知りたい場合、職種を見つけ、職種 ID に基づいて業界テーブルを振り返る必要があることです。だから、私は非正規化を考えています。

しかし、そうするには2つのアプローチがあり、どちらが良いかを考えています。まず、ジョブ カテゴリ、業界を含むすべてのものを同じ場所 (Job テーブル) に記録します。

もう 1 つのアプローチは、Job は引き続き Job Category を参照しますが、Job Category には業界情報を格納するフィールドがあります。

どちらのアプローチが良いと思いますか? ありがとうございました。

4

2 に答える 2

2

2番目のアプローチは良いです。あなたが説明する問題、つまり特定の仕事のために業界を獲得することは、実際には問題ではありません。次の構造を参照してください。

Table jobs
ID PK
REF_CATEGORY FK

Table jobcategories
ID PK
REF_INDUSTRY FK

Table industries
ID PK

さて、与えられた仕事のために業界を手に入れるために:

SELECT j.ID, i.ID
FROM jobs j
JOIN jobcategories c ON j.REF_CATEGORY = c.ID
JOIN industries i ON c.REF_INDUSTRY = i.ID

時々非正規化するのには十分な理由がありますが、この場合はそうすべきではありません。JOB、JOBCATEGORY、およびINDUSTRYを1つのテーブルに入れると、複数の業界に属するジョブカテゴリを持つリスクがあり、1-nの関係が壊れます。

于 2010-07-13T08:17:06.470 に答える
1

しかし、この種の参照関係は常に存在します。業種テーブルと職種テーブルを職種の詳細のみに使用している場合は、非正規化を考えることができます。ただし、これらのテーブルが他のデータ/テーブルにも接続されている場合は、正規化スキームを確認する必要があります。非正規化は単独で行うべきではありません。また、RDBMS で 3 つのテーブルを接続するためのオーバーヘッドが非常に高いとは思いません。

于 2010-07-13T08:44:04.713 に答える