首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复杂的MySQL数据库

复杂的MySQL数据库
EN

Stack Overflow用户
提问于 2012-07-22 06:39:58
回答 2查看 386关注 0票数 0

我有一个美术馆的项目。

每小时都会有一群人参观画廊,也就是24 hours = 24 groups

有时超过24组访问,例如25,28,30,40...

每个群有50到60或70个访问者,每个访问者都有系统生成的唯一ID。

我必须设计一个数据库,在其中我可以插入所有的组ID根据访问的小时。

示例:

代码语言:javascript
运行
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2012-07-22 06:49:00

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

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

为每个组创建一个表。每组将有一行。把它叫做TourGroup,而不是"group“,因为"group”在SQL中是一个保留字。这个表应该有一个TourGroupId,以及关于组的信息。根据您的描述,每个组只访问一次,因此访问的小时应该在此表中。

创建一个将访问者分配到组的表。我们可以把它叫做VisitGroup。它将有两个重要的列,TourGroupId和UniqueId。

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

再提一条建议。在每个表中,将id作为主键和表中的第一列。它应该自动递增。另外,在表的末尾包括两列: CreatedBy和CreatedAt。它们应该有默认值,即谁和创建每行的时间。这将占用数据库中的一些额外空间,但在未来将非常有助于解决问题。

票数 3
EN

Stack Overflow用户

发布于 2012-07-22 06:50:27

你通常在一个1:N的entity relationship前面

  • 由于每个小时都有多名访问者访问画廊,因此它是唯一的id。

这个问题可以通过使用一个两列的表来解决

  • 访问时间(例如,将小时和日期存储在DATETIME列中)
  • 唯一id (将访问者的唯一id存储为无符号整数或其他数据类型,具体取决于唯一id的构成方式)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11596403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档