我有一个美术馆项目。
小组每隔一小时访问一次图库,即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。
答案 0 :(得分:3)
您应该创建数据库以模拟您的业务问题。
为每位访客创建一个表格。该表将有一个主键,它们调用UniqueId。
为每个组创建一个表。每组会有一行。称之为TourGroup,而不是“group”,因为“group”是SQL中的保留字。该表将包含TourGroupId以及有关该组的信息。根据您的描述,每个小组只访问一次,因此访问时间将在此表中。
创建一个将访问者分配到组的表。称之为VisitGroup。它有两个重要的列,TourGroupId和UniqueId。
此过程称为规范化。通常,在使用数据库时,最好使用模拟现实世界情况的数据结构。
还有一条建议。在每个表中,将id作为主键和表中的第一列。它应该是自动递增的。此外,在表的末尾包括两列,CreatedBy和CreatedAt。这些应该具有who的默认值以及何时创建每一行。这会占用数据库中的一些额外空间,但将来有助于解决问题。
答案 1 :(得分:0)
您通常位于1:N entity relationship之间
之前通过使用2列表
解决了这个问题然后,编写良好的SQL查询的责任是根据用户的需要显示数据,例如:
SELECT `unique id` FROM `yourtable` WHERE `visit time` = '2012-07-22 15'
今天可以显示15小时的唯一ID列表。