我正在为一个小应用程序在mysql上创建一个数据库。 问题是在
等不同的表上有太多相同的字段表1:市政问题: ID, 用户身份, 标题, 地点, 描述, IMAGEURL,
表2:Harrasement问题: ID , 用户身份, 标题, 地点, 描述, IMAGEURL
表3与上述相同
两张桌子都有相同的图案。 我想询问是否最好使用关系并创建一个表来处理ID并将其与其他详细信息链接起来,或者最好创建一个表格,为这些问题添加额外的库存。
一方面会有太多具有相同列的表。 另一方面,很少有表中包含太多行。
对于表现更多行或更多表格的最佳选择。
我正在使用Mysql。
答案 0 :(得分:1)
首先,除非您预计数百万条记录不关心性能,但更关心数据结构以及访问数据的容易程度。直接写下您计划在应用中提取的数据列表,例如“今天找到所有问题”,“查找超过6个月的所有未解决的问题”,然后尝试在您的预期结构上构建真正的SQL查询。如果他们努力了就试着改变结构。
回答你的问题:取决于。目前的结构有以下好处:
以及以下缺点:
UNION
- s。此外,这个UNIONS
将需要创建具有问题类型的虚拟字段,否则您无法判断某个ID是从哪个表中来的。经典数据库方法建议将一个表用于公共字段,并为不同字段创建派生表。所以:
issues
表应包含所有公共字段,并由PK issue_id
municipal_issues
使用外键issues.issue_id
并且只有特定字段harassment_issues
使用外键issues.issue_id
并且只有特定字段issues
表还有issue_type
字段,其中包含“骚扰”,“市政”等值,并帮助查找存储其他数据的表格。此模式称为“Class Table inheritance”,您可以查看SQL antipatterns演示文稿以获取更多信息和其他方法。这解决了灵活性问题,并且仍然允许使用一个非常快的简单JOIN重新创建每个原始表。
另外作为旁注,你可以查看像Mantis这样的bug跟踪器的db模式,因为它看起来像是同一个域。