2010-08-24 59 views
2

我想发现设计我的数据库来组织有关事件的信息的最佳方式。MySql表格设计:使用大量行或将信息格式化为每行一个文本字段?

我有一个事件表,其中包含所有有关该事件,如,一个独特的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行,当乘以很多事件会变得非常大,而第二个版本也可能和数据完整性问题的第一种方式。

回答

10

第一个......绝对。 :)让尽可能多的数据尽可能单独是最好的方式......它使得它更加可用,并且以后更容易更改/升级/扩展代码。

其实我有3个表:事件,event_options和ticket_types

event_options也只是事件和ticket_types之间名副其实的联系表,可以包括你需要每个事件举行的其他信息。通过这种方式,它可以更容易地通过票据类型进行搜索,并且b)添加更多票据类型,因为当您将新的票证类型添加到现有事件(或类似的事件)时,您将会遇到更多问题办法。

+0

+1为正确的建议 – 2010-08-24 10:41:08

+1

我不知道在这种情况下是否有第三张桌子值得。据推测,对于一个事件的“标准”票证可能与另一个事件的标准票证的价格不同,然后可能真的被称为“同一票据类型”(除了名称之外的任何票据)。 – Hammerite 2010-08-24 10:44:43

+0

感谢您的宝贵意见,我一定会用第一种方式。为了在每一个案例中都清楚我的想法,对于拥有一张可能有数千和数千行数据的表格,其“父”对象的引用也没有真正的性能影响(在这种情况下,“父”对象将是事件)或者只有当我们正在讨论像Facebook这样的大型网站时才重要。 – Kevin 2010-08-24 10:48:31

0

正式答案是做第一种方法。如果你只有完全相同的三种类型的门票,那么你可以拥有三个“门票价格”字段。但除此之外,关系纯化主义会告诉你去找第一个。

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

+0

感谢您的回答,我会以第一种方式行事。 – Kevin 2010-08-24 10:50:23

0

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

+0

感谢您的回答,我将以第一种方式行事。 – Kevin 2010-08-24 10:49:27

相关问题