検索

ホームページ  >  に質問  >  本文

mysql - 数据表关联字段命名问题


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

节点表:

分类表:

接下来就有一个问题:

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

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

阿神阿神2787日前661

全員に返信(2)返信します

  • 黄舟

    黄舟2017-04-17 14:55:04

    そうではありません。
    記事テーブルが article テーブルと呼ばれ、node_idcategory_idnode< を指す外部キーであるとします。 /code それぞれ > テーブルと 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< /code >テーブルの 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
  • 迷茫

    迷茫2017-04-17 14:55:04

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

    返事
    0
  • キャンセル返事