0

学習者管理システムのスキーマを設計しています。

現在、次のカテゴリの情報を格納するLearnerDetailsテーブルがあります。- ログインユーザーアカウントの詳細 - 連絡先の詳細と自宅住所 - 国籍情報、英国に滞在するための現在のビザの詳細などを含む学習者の居住関連情報 - 学習者の現在の州の特典関連情報 - 学習者の現在の雇用状況に関する詳細

私が抱えている問題は、これらすべての情報が 1 つのテーブルで表される場合、列の数が 70 列を超えることです。

私ができることの 1 つは、情報を上記のカテゴリを表すさまざまなテーブルに分離し、これらのテーブルを親テーブルの LearnerDetails に 1 対 1 の関係として関連付けることです。

これが推奨されるアプローチであるかどうかを知りたいです。私の意見では、1:1 の関係は、正規化されすぎたデータベースを表します。しかし、これを行わないと、LearnerDetailsテーブルとして巨大な水平テーブルが作成されることになります。

ご意見/ご提案をお聞かせいただければ幸いです。

4

3 に答える 3

2

柱の幅は?レコードがページ サイズよりも広い場合、幅の広いテーブルを 1 つ持つと、パフォーマンスの問題が発生するのを待っています。

住所は通常、人と 1 対 1 の関係ではありません。はい、ほとんどの人は 1 つしか持っていませんが、すべての人に当てはまるわけではありません。入学希望者は、離婚した両親と一緒にアルバイトをすることもあります。アドレスを分離することをお勧めします。電話番号を保存する場合、通常、これら 2 つは 1 対 1 の関係にはありません。携帯電話、ファックス番号、会社の電話番号、自宅の電話 (固定電話) 番号を持っているかもしれません。最終的に 1 対多の関係にする必要がある可能性が高いものは、最初から分離する必要があります。

テーブルを分離し、1 対 1 の関係を強制したい場合は、親テーブルの ID を子テーブルの PK として使用するか、テーブルに異なる Pk を設定して一意のインデックスを設定することができます。 FK フィールド用。データベースで強制する方法がない場合は、1 対 1 の関係を設定しないでください。

于 2011-08-30T13:22:18.207 に答える
2

5NF、または少なくとも 3NF がある限り、テーブル内の多くの列に本質的に問題はありません。

しかし、垂直分割 (1::1) が理にかなっている例はかなりあります。同様の質問を見てください

于 2011-08-30T11:56:06.480 に答える
1

正規化で必要な場合は、70 列以上を使用してもまったく問題ありません。使用する rdbms については言及していませんが、ほとんどの場合、少なくとも 255 のフィールドがサポートされています。

于 2011-08-30T08:57:19.163 に答える