我有3种类型的内容:博客,新闻稿和提醒.他们都有一个身体,并按字段进入.博客和新闻稿都有一个标题字段,提醒者缺少标题字段,而提醒文件有一个小时字段,博客和新闻稿缺乏.这是表格格式的样子,所以你很容易看到……
blog press release reminder
---------------------------------------------------
entered by field yes yes yes
body field yes yes yes
title field yes yes --
time field -- -- yes
我正在创建一个名为content的主表,链接到专门的表博客新闻稿提醒.我想到了2个结构
第一种结构……这就是我使用的内容管理系统如何做到的,但我不想盲目地遵循他们的步骤,因为我的需求是不一样的.将所有共享字段放在主内容表中.因此内容表不仅具有链接到专用表的类型和类型id,内容表还将具有像body一样的公共字段和输入.其他3个表只有它们唯一的字段.
content table B=blogs table PR=press releases table R=reminders table
------------------------------------------------------------------------------
id id id id
type=B/PR/R title title hour
type id
body
entered by
第二种结构.内容表只有链接到其他3个表所需的类型和类型ID,这意味着公共字段在3个表中重复.
content table B=blogs table PR=press releases table R=reminders table
------------------------------------------------------------------------------
id id id id
type=B/PR/R entered by entered by entered by
type id body body body
title title hour
我应该选哪个?我认为第一个结构更好,因为我可以搜索所有内容,无论是博客还是新闻稿或特定单词的提醒.如果我想搜索仅适用于博客和新闻稿的标题,我仍然需要查看其他表格,但是……
那么哪种结构更好,为什么你这么想?我也愿意接受与这些不同的其他想法或改进2.
解决方法:
第一个是更好的构造,它允许内容在内容表中具有一组特定的必需或公共数据,然后在子表中具有专用数据.这也允许您在将来添加更多类型,其他需求仍然可以重用内容中的公共元素,但保留任何唯一数据.
另一个关键问题是,如果需要这些数据,例如,所有提醒都需要一个小时,并且所有博客/新闻稿都需要标题.如果需要它们,则确保始终填充这些子表.如果他们不是那么也许你应该看看扁平化结构(是弗吉尼亚你有时应该非规范化).
所以你的内容表就变成了(nn = not null,n = nullable)
id(nn),类型id(nn),type(nn),body(nn),由(nn),title(n),hour(n)输入.我通常发现这样做的主要原因是,如果您创建的不同数据实体非常相似,那么随着时间的推移,它们可能会合并.例如,此时的提醒不需要标题,但将来可能需要.