0

我有一个美术馆项目。

每隔一小时就有一组人参观画廊,这意味着24 hours = 24 groups

有时超过 24 组访问,例如 25、28、30、40...
每个组有 50 到 60 或 70 名访问者,每个访问者都有系统生成的唯一 ID。
我必须设计一个数据库,我可以根据访问的时间在其中插入所有组 ID。
例子:

1 hour = 1, 34, 3, 6, 67, 53, 57, ... up to 60 or 70 total IDs
2 hours = 2, 35, 4, 7, 68, 54, 58 ... up to 60 or 70 total IDs
...and so on. 

对于一天和第二天,使用其他唯一 ID 重复相同的过程。

如果我为几个小时创建一个表,那么我有NULL其他几个小时的值,这会导致无用的空间!
如果我为不同的时间创建不同的表,那么如果我的小时数比我拥有的小时表数多怎么办?

谁能建议如何设计一个完美的表格或其他方式来插入没有值的NULL值?

我正在使用 PHP 和 MySQL。

4

2 回答 2

3

您应该创建数据库来模拟您的业务问题。

为每个访客创建一个表。该表将有一个主键,它们正在调用 UniqueId。

为每个组创建一个表。每组将有一行。将其称为 TourGroup,而不是“组”,因为“组”是 SQL 中的保留字。该表将有一个 TourGroupId 和有关该组的信息。根据您的描述,每个小组只访问一次,因此访问时间将在此表中。

创建一个将访问者分配到组的表。将其称为 VisitGroup。它将有两个重要的列,TourGroupId 和 UniqueId。

这个过程称为标准化。通常,在使用数据库时,最好使用模拟真实世界情况的数据结构。

还有一条建议。在每个表中,将 id 作为主键和表中的第一列。它应该是自动递增的。此外,在表的末尾包括两列 CreatedBy 和 CreatedAt。这些应该具有创建每一行的人员和时间的默认值。这在数据库中占用了一些额外的空间,但在将来帮助解决问题时将非常有帮助。

于 2012-07-21T22:49:00.107 回答
0

你通常在一个 1:N 的实体关系前面

  • 参观时间
  • 自每小时多个访客可以访问画廊以来的唯一 ID。

这个问题通过有一个 2 列的表来解决

  • 访问时间(例如,将小时和日期存储在 DATETIME 列中)
  • 唯一 ID(将访问者的唯一 ID 存储为 UNSIGNED INT 或其他数据类型,具体取决于您的唯一 ID 的形成方式)。

然后,编写良好的 SQL 查询有责任按照用户的需要呈现数据,例如: SELECT `unique id` FROM `yourtable` WHERE `visit time` = '2012-07-22 15'可以向您显示今天 15 小时的唯一 ID 列表。

于 2012-07-21T22:50:26.953 回答