我知道这个主题已经被详细讨论过(我在这里和整个网络上阅读了很多帖子)并且我不喜欢鞭打死马,但我有一个关于整数 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
)