导入/导出的数据库规范化很多

时间:2012-01-07 12:05:21

标签: database database-design normalization

目前,我正在研究一个事件注册系统(在php中)。它有两个主要目的:在活动开始前在线注册客人,并使用条形码扫描仪在现场扫描客人。对于此系统,拥有在线和离线服务器非常重要,并非所有活动都可以访问互联网。

数据库将从一台服务器导入/导出到另一台服务器并返回。最重要的是,会同时发生多个事件。

为了解释我在开发这个系统时遇到的问题,我们假设有两个单独的事件(A和B)。在线服务器上,客人可以注册这些活动。在某个时间点会发生事件A,因此我必须将数据库导出到离线服务器以便现场使用。同时,客人仍然可以在线注册活动B.在活动A的现场,也可以注册活动A,但不能注册活动B.

事件A结束后,几乎不可能将离线数据库导入到在线数据库,而不会以某种方式更改数据。我想我可能有两种数据库方案选择:

  1. 完全标准化:有一个包含属性event_id的来宾表。依赖于访客或事件的所有其他表将仅引用访客和/或事件的主键。
  2. 在事件之间拆分表:有来宾表A_guests和B_guests。依赖于客人或活动的所有其他表格也将根据活动命名。
  3. 使用选择2(并且不更改数据)可以非常轻松地导入和导出,但表的数量将会非常快速地增长。这几乎是一个两难的问题:规范化但导入/导出有困难。或者拆分表格,使表格的数量快速增长。

    我错过了一个选项,还是您认为其中一个选项是最佳选择?

1 个答案:

答案 0 :(得分:0)

  

在某个时间点会发生事件A,所以我必须将数据库导出到离线服务器以便现场使用。同时,客人仍然可以在线注册活动B.在活动A的现场,也可以注册。

我想确定我理解这一点。在某个时间点,您将数据库导出到事件A的脱机服务器。访客不能再在线注册事件A,但只能在A站点注册。这是正确的吗?如果是这样,只要在线软件知道导出就没有问题。

在活动A,您想让客人注册活动B.这是正确的吗?因为,如果是这样,你将不得不最终将这些B交易传递回你的在线数据库,我想,希望你不要超量预订B.有了2个或更多的数据库副本,你没有预防的机制超额预订。

  

我错过了一个选项,还是您认为其中一个选项是最佳选择?

您想要完全规范化您的预订数据库。如果您想让人们在活动A中注册活动B或C或D等,活动A需要拥有整个预订数据库的副本。

我看到的唯一问题是超量预订问题,因为您在各种事件中拥有数据库的所有这些副本。