我有一个美术馆的项目。
每小时都会有一群人参观画廊,也就是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。
发布于 2012-07-22 06:49:00
您应该创建数据库来模拟您的业务问题。
为每个访问者创建一个表。该表将有一个主键,它们正在调用UniqueId。
为每个组创建一个表。每组将有一行。把它叫做TourGroup,而不是"group“,因为"group”在SQL中是一个保留字。这个表应该有一个TourGroupId,以及关于组的信息。根据您的描述,每个组只访问一次,因此访问的小时应该在此表中。
创建一个将访问者分配到组的表。我们可以把它叫做VisitGroup。它将有两个重要的列,TourGroupId和UniqueId。
这个过程被称为标准化。通常,在使用数据库时,最好使用模拟真实情况的数据结构。
再提一条建议。在每个表中,将id作为主键和表中的第一列。它应该自动递增。另外,在表的末尾包括两列: CreatedBy和CreatedAt。它们应该有默认值,即谁和创建每行的时间。这将占用数据库中的一些额外空间,但在未来将非常有助于解决问题。
发布于 2012-07-22 06:50:27
你通常在一个1:N的entity relationship前面
这个问题可以通过使用一个两列的表来解决
然后,编写良好的SQL查询负责根据用户的需要显示数据,例如:SELECT `unique id` FROM `yourtable` WHERE `visit time` = '2012-07-22 15'
可以向您显示今天15小时的唯一ids列表。
https://stackoverflow.com/questions/11596403
复制相似问题