我试图将音乐风格的列添加到事件表中,并且从我收集的内容中可以通过为每个音乐风格添加一列或通过执行多对多表格关系来完成,因为我希望每个事件在表中只返回一次。你认为连续有很多布尔列,我会面临相当大的数据库减速? (数据只会被用户读取)。 谢谢:)由于40个布尔列造成相当大的减速?
回答
列不会减慢数据库本身,但请记住,为每种音乐风格添加布尔列是非常糟糕的设计。随着时间的推移,应用程序中可能的音乐风格可能会发生变化:可能会添加新的音乐,多余的或无用的音乐必须删除,无论如何。使用您提出的设计,您必须修改数据库结构以将新列添加到表中。这通常是痛苦的,容易出错的,你还必须仔细检查所有的查询,以确保它们不会因为新的结构而中断。
您应该设计数据库模式,以便它足够灵活,以便随时间推移应用程序内容。例如,您可以为每个音乐风格设置一行主表,定义其ID和名称,说明等。然后,包含实体(如果我正确理解您的问题,则为事件)和来自主表的音乐风格。通过放置外键来保证数据的一致性,确保数据始终清洁(例如,您不能引用不在主表中的音乐风格)。这样,您可以修改音乐风格而不用触摸数据库结构中的任何内容。
读一下database normalization会帮助你很多;您不必一路走到完全规范化的数据库,但了解背后的原则将允许您设计高效且清晰的数据库结构。
虽然这种方法无法动态地添加新的音乐风格*,但运行“ALTER”脚本几乎没有痛苦或容易出错......一个更大的痛点非常规的表格难以编写基于连接的请求。 –
好吧,我会重新读一切。然而,是否有可能搜索 - 比如说90年代+爵士乐。在这种情况下,一个事件会具有这两种音乐风格。这可能会返回两行,但是可以让显示给用户的“表格列表”只显示一次特定的事件,而在一列中显示90s +爵士乐? 编辑:我现在seee:“Group by” – pufAmuf
@pufAmuf:当然可以,例如使用GROUP BY子句或GROUP_CONCAT(http://dev.mysql.com/doc/refman/5.0/en/group-by- functions.html#function_group-concat),它将返回所有行中列的值,并以逗号分隔。 –
的可能的答案是没有
有一排不应该显著下跌DB的性能减慢多个布尔列;假设您的指数设置得当。
编辑:话虽这么说,这可能是最佳的一个细节表和JOIN
分配给它来获得此数据...但你说你不想这样做。
我假设你想要做这样的事情有一个事件行与一群像“isCountry”,“isMetal”,“isPunk”栏,你会查询所有的事件标记为
isPunk = 1 OR isMetal = 1
或类似的东西。
这种设计的弱点在于要添加/删除音乐风格,您需要更改数据库模式。
另一种方法是一个TBLMusicalStyles
与ID
和Name
,然后TBLEventStyles
这将只包含EventID
和StyleID
然后,你可以加入他们的行列,只是搜索的样式表...添加和移除风格会比较简单。
感谢马修,我会继续尝试:) – pufAmuf
不涉及音乐风格的请求的表现不会受到影响。
如果您的列正确编入索引,那么涉及查找与客户端提供的音乐风格匹配的行的请求实际上应该更快。
但是,所有涉及音乐风格的其他请求都会显着变慢,而且写起来也更困难。例如,“获取与当前行共享至少一种样式的所有行”对于编写和执行将是一个更加困难的要求。
- 1. 由于JFrame造成的队列问题
- 2. 使用@ font-face为2种字体造成大的减速
- 3. 由AdMob Ios造成的帧速下降
- 4. activerecord相当于SQL'减'
- 5. 使一个依赖于另外两个布尔列的熊猫布尔列
- 6. 大熊猫据帧减法造成南
- 7. Android HttpPost.setEntity()相当于改造
- 8. Android:ImageView由于某些布局属性造成的高度界限
- 9. Webpack - 由于FullCalendar造成的巨大的bundle.js文件
- 10. 基于列表中的第i个元素快速创建布尔数组
- 11. 高阶减速机应用于多个减速机
- 12. 由于libdispatch-manager造成的崩溃
- 13. 由于onClickListener造成的崩溃
- 14. 由于HashMap造成的内存泄漏
- 15. 蟒蛇大熊猫 - 列变化值布尔基于另一列
- 16. 边界框布尔减法?
- 17. 德尔福相当于C#的DataGridView
- 18. 速度相比于列表
- 19. 由布尔字段
- 20. Python中极大的布尔值列表
- 21. xarray相当于熊猫减/加
- 22. 大熊猫相当于data.table
- 23. 由于Arm64和Armv7造成失败?
- 24. ASP.NET C#布尔型铸造
- 25. 铸造布尔在Java
- 26. Javascript速记布尔类型
- 27. 德尔福相当于从C
- 28. 德尔福#IF(调试)相当于?
- 29. 哈斯克尔相当于Boost.Fusion
- 30. cocos2dx相当于Android的画布的BitmapShader
40布尔风格是一个糟糕的设计。请阅读数据库规范化。当你必须添加一个新的风格时会发生什么?模式改变!不是一个好计划。 – RedFilter
如果通过数据规范化你的意思是关系数据库,我不认为这就是我想要的:/ 假设一个人搜索一个具有拉丁和雷鬼音乐的事件,并且一个事件同时存在,那么同一事件列表中两次返回列表中?从我读过的和问过的,是的。 – pufAmuf
'NO' ...使用'GROUP BY' – ajreal