8

私はこの主題が長々と議論されていることを知っています (私はここやウェブ全体で多くの投稿を読みました) 死んだ馬をむち打ちするのは好きではありませんが、整数 ID と GUID のより具体的な側面について質問があります:

stackoverflow タグと同様のタグ付け機能を持つスキーマを作成していますが、5 つ以上の異なるテーブルに対して同じタグが使用されます。

リンクする基本的なテーブルは次のとおりです。

タグテーブル

Tag ID    Tag Name      Tag Description
-------------------------------------------------------------
     1    Hats          Tag for hats
     2    Coats         Tag for coats
     3    Gloves        Gloves tag
     4    Ladies        Ladies item

項目 表 1

Item ID    Item Name    Cost
------------------------------------------------------------
      1    Deerstalker  £20.00
      2    Fedora       £50.00
      3    Scarf        £15.00

ちょっと困ったのはtag_itemテーブルです。

ユーザーがタグを適用できるようにしたい、まったく異なる構造の 5 つのテーブルを用意するので、次のいずれかを実行する必要があると思います。

  • タグが関連する行の整数キーと同様にtable name/を格納しますtable number
  • GUIDを保存します。これはテーブルとは無関係に機能し、特定の行のすべてのタグを簡単に取得できます。

私が確信していないのは、これがパフォーマンスにどのように影響するかです:

  • 特定のタグを持つ 5 つのテーブルを超えるすべてのアイテムを検索する
  • アイテムのタグを編集する
  • 参加する

この場合、またはこの特定のシナリオの利点について読むことができる場所で、明らかにより良いオプションはありますか?


編集:

興味のある人のために、以下は私が決めたスキーマです:

タグの表

CREATE TABLE [dbo].[Sys_TagList](

    [Sys_Tag_Primary] [int] IDENTITY(1,1) NOT NULL,
    [Sys_Tag_Name] [varchar](50) NOT NULL,
    [Sys_Tag_Description] [varchar](1000) NULL

)

Tag_Items のテーブル

CREATE TABLE [dbo].[Meta_Tags](

    [Met_Tag_Primary] [int] IDENTITY(1,1) NOT NULL,
    [Met_Tag_Link_FK] [int] NOT NULL, -- Link to [Sys_Tag_Primary] field
    [Met_Tag_Name] [varchar](25) NOT NULL, -- To enable tag searches to use a single table
    [Met_Tag_Table] [varchar](25) NOT NULL, -- Table name, used with [Met_Tag_RowID] to create link to that item
    [Met_Tag_RowID] [int] NOT NULL -- Primary key of item[n] table

)
4

2 に答える 2

9

GUID と ID のどちらに焦点を当てるかは間違った問題であると (おそらく役に立たないかもしれませんが) 提案します。タグをアイテムにリンクする単一のテーブルが必要であるという仮定は、最初に検討する価値があるかもしれません。

5 つのアイテム カテゴリが異なるため、異なるテーブルが必要な場合は、おそらく 5 つの tag_item リンク テーブル (アイテム テーブルごとに 1 つ) を検討する必要があります。それらすべてを一度にクエリするコード (UNION ALL結果を連結するために使用) は、単一のリンク テーブルのコードよりも少し冗長で反復的かもしれませんが、クエリは大幅に単純になる可能性が高く、メンテナンスとクエリの両方に適しています。 - 視点を計画します。

もう 1 つの方法は、5 つのアイテム カテゴリが共有する共通属性を 1 つの中央テーブル (タグがリンクされている) にリファクタリングし、追加の非共通属性を 5 つの子テーブルに格納することです。既存のデータが現在どのように使用されているかについての情報がなければ、これが適切かどうかを判断するのは困難です。

于 2013-05-29T11:29:08.297 に答える