私はこの主題が長々と議論されていることを知っています (私はここやウェブ全体で多くの投稿を読みました) 死んだ馬をむち打ちするのは好きではありませんが、整数 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
)