具有多个表的数据冗余

时间:2012-10-29 23:53:57

标签: php mysql database schema

所以我创建了一个用户通知系统,我有一个user_notifications表,结构如下:

id
receiver_id
sender_id
action
action_type
entity_id
timestamp

现在,其他表中的值通过'entity_id'列连接到通知。所以我要说我也有这个名为 videos_watched 的表:

video_id
user_id
time_watched_for

他们从 user_notifications .entity_id连接到 videos_watched .video_id

我想要决定的是将数据存储在第二个表中是否也是一件坏事。我应该将 user_notifications 表视为交互表,而不是实际可靠地存储用户数据的位置吗?

2 个答案:

答案 0 :(得分:2)

我接近此任务的方法是将您正在录制的数据分解为可管理的逻辑块(尽管这会受到使用量和您想要提取的实际信息的影响)。

例如,如果情况是您正在记录以下类型的数据:

  • 用户信息(电子邮件,身份证,姓名等)
  • 视频(ID,标题,文件名等)
  • 观看了视频(video_id,user_id,time_watched_for)

然后将数据存储在单独的表中可能有意义,以便以有意义的方式分离信息。

所以从这个意义上来说,让你拥有通知的初始表也是有意义的(尽管这看起来更像是一个通知日志表):

  • 通知表(id,receiver_id,sender_id,action,action_type, entity_id,timestamp)

基本上,将数据存储在单独的表中并不是一个坏主意,只要有一个有意义或逻辑的理由将其存储在那里,例如逻辑数据分离。

答案 1 :(得分:0)

通常,在数据库中存储冗余数据(非规范化)是个坏主意,因为:

  • 占用更多空间。
  • 维护起来比较麻烦,编写时间也要长(你将相同的数据写入多个地方)。
  • 你可以获得一个不一致的数据库(比如如果你搞砸了上面这一点并且没有写到你需要的所有地方)。

我能想到的有冗余数据的唯一原因是因为你绝对需要为某种类型的连接提供性能提升,你将会一直在阅读和阅读。如果您有冗余数据,则可以取消连接/查找并直接从单个表中读取。