4

私は標準の SQL データベースを使用しており、テーブルをフラット化するか、より「オブジェクト指向」にするかを検討しています。私にとっては、小さいテーブルの方が読みやすいですが、テーブルを結合して 1 対 1 の関係を持たせる必要があります。これは一般的に物事を行う良い方法ですか、それとも SQL の世界では眉をひそめていますか?

次の属性を持つテーブルがあります。

MYTABLE
- ID
- NAME
- LABEL
- CREATED_TS
- MODIFIED_TS
- CREATED_USER
- MODIFIED_USER

私にとって、作成/変更されたフィールドは独自のオブジェクトになります。実際には他にもいくつかのフィールドがあるので、これだけ小さいわけではありません。「MYTABLE_MODINFO」と呼ばれる別のテーブルを作成するか、CREATEDフィールドとMODIFIEDフィールドを持ち、それらのデータが必要なときに結合されるようなものを作成すると思います。これらのテーブルはアクセスの多いテーブルではありません。1 分間に大量のクエリが実行されたり、数百行も含まれたりすることはないため、効率はそれほど問題にはならないと思います。

だから主に私が疑問に思っているのは、これが一般的に受け入れられているデザインなのか、それとも一般的にテーブル構造をフラットに保つべきなのかということです.

4

3 に答える 3

2

同じテーブルに監査情報を作成する必要があります。その理由は、このデータは行の一部であり、1 対 1 の関係であるため、分岐する意味がないからです。

監査情報 (監査追跡/履歴) を保存する場合は、別のテーブルを作成できますが、ほとんどの場合、これはデータを「複製」し、代理キーを作成して元の行にマッピングすることによって構築されています。複製を引用符で囲んで挙げる理由は、監査には本質的に古いデータの複製が必要だからです...それがリンクされ、書かれた後に変更可能である場合、それは実際には監査ではありません。

ちょうど私の2セント。意味がない場合は、いくつかの例を提供できます。しかし要点は、各行には現在の変更情報が 1 つしかないということです。

于 2012-07-02T16:34:35.240 に答える
1

データベースの「1 対 1」を避けると、パフォーマンス、スケーラビリティ、独立性が失われます。IDごとに2枚の写真を保存したい場合はどうなるか想像できますか? 別のフィールドを作成しますか、それとも行を繰り返しますか??...アップグレードしたい場合は、リレーションシップを作成して自由度を高める方が簡単です。このチュートリアルを確認してください。

http://www.youtube.com/watch?v=Onzm-PxSjtE

http://folkworm.ceri.memphis.edu/ew/SCHEMA_DOC/comparison/erd.htm

http://www.visual-paradigm.com/product/vpuml/provides/dbmodeling.jsp

それに加えて、DB を正規化して、すべてが可能な限り最良の状態であることを確認する必要があります。最も重要なことは、必要なものを取り入れて適応させることであることを忘れないでください。

http://databases.about.com/od/specificproducts/a/normalization.htm

http://www.youtube.com/watch?v=xzeuBwHkKxw

于 2012-07-02T16:34:14.863 に答える
1

私の見解では、RDBMS の設計はオブジェクト指向のアプローチと同じではありません。あなたが言及した例は、異なるオブジェクトドメインではなく、レコードのデータ継承です。テーブルの大量のクエリ/実行のオーバーヘッドがないため、監査目的でそれらを同じテーブルに保持し、データの正規化での作業も簡単にする必要があります。

于 2012-07-02T16:41:40.290 に答える