【问题标题】:MySql table design : Use lots of rows or store the information formatted in one text field per row?MySql 表设计:使用大量行或将格式化的信息存储在每行一个文本字段中?
【发布时间】:2010-08-24 10:36:41
【问题描述】:

我正在尝试寻找设计数据库以组织与事件相关的信息的最佳方式。

我有一个事件表,其中包含有关事件的所有信息,例如唯一 ID、事件标题、地点等。

现在每个活动可以有多种门票类型,门票的数量和类型会随着每个活动而变化。

最好有一个 events_tickets 表,其中每个票类型都有一个单独的行,例如

event_id    ticket_type    price
1           standard       20
1           deluxe         40
1           cheap          10

或者将表格格式化以便信息在一行中更好?

event_id    ticket_information
1           standard:20,deluxe:40,cheap:10

如果我使用第一种方法,我最终可能会得到每个事件 10 行,当乘以大量事件时可能会变得非常大,而第二种方法可能会出现数据完整性问题。

【问题讨论】:

    标签: php mysql database-design


    【解决方案1】:

    第一个……肯定的。 :) 尽可能多地分离数据始终是最好的方法......它使它更有用,并且以后更容易更改/升级/扩展代码。

    实际上我会有 3 个表:events、event_options 和 ticket_types

    event_options 实际上只是事件和ticket_types 之间的链接表,并且可以包含您需要为每个事件保留的其他信息。这样一来,a) 按票证类型搜索和 b) 添加更多票证类型会更容易,因为当您向现有活动(或类似事件)添加新票证类型时,您将遇到更多问题方式。

    【讨论】:

    • 我不知道在这种情况下是否值得拥有第三张桌子。据推测,一个活动的“标准”门票可能与另一场活动的标准门票价格不同,那么它们在多大程度上可以真正被称为“相同的门票类型”(除了名称)是值得怀疑的。
    • 感谢您的建议,我一定会选择第一种方式。只是为了在每种情况下都清楚,对于具有潜在数千行的表没有真正的性能影响“父”对象也引用它(在这种情况下,“父”对象将是事件) 还是只有在我们谈论 Facebook 等大型网站时才有意义。
    • 它只对大型网站很重要。
    • 我什至不会认为像 facebook 这样的大型网站会在出现带宽或服务器速度问题之前出现 mysql 问题。
    • @Hammerite,您可能是对的,但这只是一个示例 - 如果您将所有内容分开并仅加入查询,从长远来看,您会让自己变得更容易。
    【解决方案2】:

    官方的回答是第一种方式。如果您只有完全相同的三种类型的门票,那么您可以继续拥有三个“门票价格”字段。但除此之外,关系纯粹主义会告诉你选择第一个。

    我假设无论如何您都有一个“事件”表。告诉你什么:在你最喜欢的搜索引擎上搜索“第三范式”,你会学到很多关于设计数据库的知识。

    【讨论】:

    • 感谢您的回答,我会选择第一种方式。
    【解决方案3】:

    第一种方法更好。它更加规范化。为什么这很重要?这意味着查询数据要容易得多。您不想使用第二种方式,因为以后检索数据会非常复杂且耗时。

    【讨论】:

    • 感谢您的回答,我会选择第一种方式。
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2023-03-27
    • 2017-04-09
    • 2012-09-12
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多