复杂的MySQL数据库

时间:2012-07-21 22:39:58

标签: php mysql

我有一个美术馆项目。

小组每隔一小时访问一次图库,即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中使用PHP。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

此过程称为规范化。通常,在使用数据库时,最好使用模拟现实世界情况的数据结构。

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

答案 1 :(得分:0)

您通常位于1:N entity relationship之间

之前
  • 访问时间
  • 唯一身份证 因为每个小时都有多个访客可以访问该画廊。

通过使用2列表

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

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

相关问题