我正在尝试将音乐样式列添加到事件表中,从我收集的信息来看,这可以通过为每种音乐样式添加一列来完成,也可以通过执行多对多表关系来完成,因为我希望每个事件在表中只返回一次。你认为在一行中有那么多布尔列,我会面临相当大的数据库速度减慢吗?(数据将仅由用户读取)。谢谢您:)
发布于 2011-09-01 23:28:39
列本身不会减慢数据库的速度,但请记住,为每种音乐风格添加一个布尔列是非常糟糕的设计。随着时间的推移,应用程序中可能的音乐风格可能会发生变化:也许必须添加新的音乐风格,必须删除多余或无用的音乐风格等等。使用您提出的设计,您必须修改数据库结构以将新列添加到表中。这通常是痛苦的,容易出错,而且您还必须检查所有的查询,以确保它们不会因为新的结构而中断。
您应该设计数据库模式,使其足够灵活,以允许应用程序内容随时间的变化。例如,您可以有一个主表,每种音乐风格都有一行,定义它的ID及其名称、描述等。然后,一个包含实体(事件,如果我正确理解您的问题)和来自主表的音乐风格之间关系的关系表。您通过将外键放在适当的位置来加强一致性,以确保数据始终是干净的(例如,您不能引用不在主表中的音乐风格)。这样,您可以在不接触数据库结构中的任何内容的情况下修改音乐风格。
稍微阅读一下database normalization将会对您有很大帮助;您不必一直走到拥有一个完全规范化的数据库,但理解其背后的原理将使您能够设计出高效、整洁的数据库结构。
发布于 2011-09-01 23:18:33
可能的答案是no
假设索引设置得当,一行中有多个布尔列应该不会显着降低数据库性能。
EDIT:说最好是分配一个详细信息表和JOIN
来获取这些数据……但你说过你不想这么做。
我假设您想要做一些事情,比如有一个事件行,其中包含一堆列,如"isCountry“、"isMetal”、"isPunk“,然后查询所有标记为
isPunk = 1 OR isMetal = 1
或者类似的东西。
这种设计的缺点是,要添加/删除音乐风格,您需要更改DB模式。
另一种方法是使用具有ID
和Name
的TBLMusicalStyles
,然后使用仅包含EventID
和StyleID
的TBLEventStyles
然后你可以加入他们,只需在样式表上搜索...添加和删除样式将相对简单。
发布于 2011-09-01 23:28:10
不涉及音乐风格的请求的性能不会受到影响。
如果您的列被正确地索引,那么涉及查找与客户端提供的音乐风格匹配的行的请求实际上应该更快。
然而,所有其他涉及音乐风格的请求都将明显变慢,并且更难编写。例如,“获取与当前行至少有一种样式的所有行”将是一个很难编写和执行的请求。
https://stackoverflow.com/questions/7272432
复制相似问题