mysql - 数据表关联字段命名问题
阿神
阿神 2017-04-17 14:53:04
0
2
652


这是一张文章表,后面关联了node表,和category表。分别关联对应表的id字段。

节点表:

分类表:

接下来就有一个问题:

  1. 如果文章表按上面的设计,当我查询某篇文章的所属节点名称和所属分类名称。需要关联查询节点表和分类表。

  2. 我想把文章表的node_id 和 category_id 分别设置为 node_name 和 category_name,分别与另外两张表相关字段对应。查询的时候就可以直接取出,而不用关联其他表。这样是否更加合理?

阿神
阿神

闭关修行中......

全員に返信(2)
黄舟

そうではありません。
記事テーブルが article テーブルと呼ばれ、node_idcategory_idnode テーブルと category テーブル。

おっしゃるとおり、node_idnode_name に、category_idcategory_name に置き換えてください。いくつかの質問:

  • 今後、node_name または category_name を更新する必要がある場合、article テーブルのこのフィールドは更新されますか?

  • 今後、特定のクエリ条件を満たす記事に対応するノードのクリック数をクエリする必要がある場合、node_id のどちらを使用してクエリを実行する方が効率的ですか? >node_name は高効率ですか?

  • 将来、node テーブルと category テーブルのフィールドを拡張する必要がある場合、既存のテーブル構造と変更されたテーブル構造のどちらが良いですか。 ?

  • 実際、心配なのは、article テーブルをクエリするときに、node テーブルと category テーブルのクエリを結合する必要があることです。現時点では、articleテーブルは冗長である必要がありますかを検討できます。 >node テーブルの node_namecategory テーブルの category_name フィールドですが、冗長なフィールドがあると第 3 正規形が破壊されます。冗長フィールドはクエリ効率を向上させることができるため、ビジネス バランスが必要になります。
    また、冗長フィールドは、データの一貫性を維持する方法という問題にも直面します。たとえば、node テーブルの node_name フィールドが更新された場合、articleテーブルの node_name も更新する必要があります。

    または、ビューを使用してこの問題を解決することもできます。この方法はより柔軟です。

    CREATE OR REPLACE ALGORITHM=MERGE VIEW `v_article` AS (
        記事 AS a から SELECT a.id、a.title、...、b.node_name、c.category_name、
        JOIN ノード AS b ON a.node_id = b.node_id
        JOIN カテゴリ AS c ON a.category_id = c.category_id
        WHERE... #必要に応じて、ここにフィルター条件を追加できます
    );

    ただし、ビューでは結合テーブルが使用されるため、クエリ効率が高くない場合があります。これには、ビジネス側でより注意を払い、EXPLAIN を使用して SQL を分析する必要があります。

    いいねを押す +0
    迷茫

    カスタム タグをデザインすると、ページが ID を値に直接変換します。もちろん、実際にはバックグラウンドでチェックします。

    いいねを押す +0
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート