私はジレンマを抱えています。私は多くのレガシーコードを扱っていますが、テーブル構造に多くの冗長な情報があります。主に2つの形式で存在します。
A.「結合」を節約するための冗長な情報。例えば:
event_id, event_name, event_creator_id
3 test1 43
subevent_id, event_id, event_creator_id
21 3 43
event_creator_idの重複に注意してください。かつての「シニア」開発者によって与えられた理論的根拠は、イベント作成者IDが必要な場合、値を取得するために「高価な」結合を行わずに、1つのテーブルをクエリするだけでよいということです。
B.計算を節約するための冗長な情報。例えば:
event_id, event_default_price
3 100
discount_id, discount_code, discount_percentage
7, ABCD, 50
special_event_id, event_id, discount_id, discounted_price
21 3 7, 50
この特別なイベントの最終的な「discounted_price」を計算する代わりに(discount_idへの参照がすでに存在するため)、コードはその「計算された」値をここにあるように保存していることに注意してください。繰り返しますが、正当化は「スピード」であり、通常は地獄に撃たれます。
2つの質問があります:
- これらの構造は正規化されていないことを新しい開発者に伝えることはできますが、彼らはより速く言うことができます。どうすればそれに対抗できますか?私はそれに対抗しますか?他の人はこのようにデータベースを構築していますか?!
- 経験則、または私が言うために使用できる一連の原則はありますか?