だから私は、私が制御できないデータベースと対話するphp Webサイトをコーディングしている職場でこのプロジェクトに取り組んできました。データベースは、私よりも長い間会社に勤務している同僚によって「設計」されました。したがって、最終的な決定は彼らの決定に任されています。
このプロジェクトに初めて参加したとき、同僚のところに行き、データベース スキーマに欠陥があるようだと説明しました。データベースを正規化してデータの整合性の問題を確実にし、ディスク領域を節約することの重要性と、プログラマー (私) の仕事を容易にすることを説明しました。挿入、削除、および更新の異常が現在の設計でどのように発生するかの例も示しました。それにもかかわらず、同僚は、プロジェクトのデータベースを過度に複雑にしたくないので、期間を変更しないと説明してくれました。
そのため、プロジェクトを開始して数か月が経ちましたが、2 つのテーブルを結合して、互いに 1 対 1 の関係を持つ属性に値を挿入する必要があるたびに、頭を悩ませています。(したがって、属性は単にメイン リレーションの属性である必要があります。) データベースは見栄えが悪く、データベースを使用するフロント エンドをプログラムしたので、数年後にこれが戻ってくるのではないかと心配しています。
「上司」の同僚にデータベースを正しく設計するよう説得する方法について、誰か提案はありますか? または、私が何の役にも立たなかったデザインのために何年も愛用されないようにする方法についての提案はありますか? 今後、このようなプロジェクトに取り組むことを拒否する必要がありますか? 私のコードにコメントを残して、データベースは私がやったことではないということですか?
ありがとう。
編集:コメントへの追加情報...
データベースの非正規化が速度向上に役立つことはわかっているので、これを見落としているわけではありません。この戦術について聞いたことがない読者のために、例を示します。多くの場合、データベース設計者は、ユーザーの番地、都市、州、および郵便番号をリストする住所関係を持っています。郵便番号が都市と州を決定することは誰もが知っているため、郵便番号を都市と州にインデックス付けするテーブルを構成します。多くの場合、データベース設計者は 2 つのテーブルを結合し、ユーザーのアドレスに対するすべてのクエリでアドレス テーブルから zip テーブルへの結合が必要になることを予測して非正規化します。これにより、最終的にクエリ処理が高速化され、データベース設計の一部を非正規化する正当な理由になります。
ここに詳細を入力するために、データベースはツアー リクエスト システム用に設計されているため、内部のデータは訪問者情報、日付などに関連しています。現在のデータベースが使用するスキーマは、最初から最後まで予測できません。変数の命名パターン (例: num_of_visitors、arrivalMethod など) の最も単純な矛盾から、単一の状態の 1 対 1 の属性に対して定義された別個の関係を持つことまで。例: statusID はツアー リクエストのステータスを表します。有効な状態は、可能な状態 (承認済み、拒否、保留中、キャンセル済み) のグループから選択された 1 つのみです。何らかの理由で、データベースには以下を含むステータス テーブルがあります: tour_id(Primaryツアー関係のキー)、statusID. これにより、ツアー リクエストごとに複数の状態を定義できます。これは、設計上、ツアー リクエストが常に 1 つの状態にある必要があるためです。