Postgresql - 复合键和两个 table,还是只有 1 个宽 table?
Postgresql - Composite Key and two tables, or just 1 wide table?
我正在构建一个赛马数据库,但我正在努力寻找最佳设计。
选项 1)
2 Tables,1 个代表“种族”,另一个代表“马匹”
这看起来像这样
Table 1: 身份证 |日期 |时间 |种族名称 |工作日 |课程 |距离 |去 | Class |价格|启动器数量 |完成时间 |种族类型
Table 2:
比赛编号 |完成编号 1 |马名|骑师 |培训师 |重量 |年龄 |截面速度 | 等等
比赛编号 |完成第 2 名 | .....
此设计的问题:如何在日期、时间、课程和比赛名称上定义复合主键并将其作为外键链接到 [=56] 中的比赛 ID =] 2?我使用 Postgresql (via.pgadmin4)
选项 2:
一宽 table,有比赛数据,然后马匹排成一排(完成编号 1 | 2 | 3 .... 在极少数情况下直到 30)
此设计的问题在于并非每场比赛都有相同数量的首发,因此从 8 号马到 30 号马的行中会有很多 null 条目。
优点是,我不必加入 table 进行查询,大多数查询都需要完整的联接,因为每个 table 中的几乎所有数据都需要查询。
table 将包含大约 360-400 列(宽)和最多 20.000(可能更多)行。
问题:这会是性能方面的问题吗?我一天只会查询几次
非常感谢
广泛的 table 是数据仓库方法。这在处理数十亿行时可能是合适的。但是数据仓库往往从纯关系型数据库中获取数据,所以保证了数据的一致性。
联接是 RDBMS 的用途。他们通常很快。别担心这个。我的建议是:建立一个合适的规范化数据库。
有赛马有马。一场比赛有多匹马,一匹马可以参加多场比赛。这是一个 m:n 关系,您需要一个桥梁 table。
table组:
- 马(horse_id、horse_name、birth_date、驯马师、...)
- 种族(race_id、date_time、race_name、路线、距离、price_money、...)
- 参与(horse_id、race_id、骑师、重量、位置、...)
我正在构建一个赛马数据库,但我正在努力寻找最佳设计。
选项 1)
2 Tables,1 个代表“种族”,另一个代表“马匹”
这看起来像这样
Table 1: 身份证 |日期 |时间 |种族名称 |工作日 |课程 |距离 |去 | Class |价格|启动器数量 |完成时间 |种族类型
Table 2:
比赛编号 |完成编号 1 |马名|骑师 |培训师 |重量 |年龄 |截面速度 | 等等 比赛编号 |完成第 2 名 | .....
此设计的问题:如何在日期、时间、课程和比赛名称上定义复合主键并将其作为外键链接到 [=56] 中的比赛 ID =] 2?我使用 Postgresql (via.pgadmin4)
选项 2:
一宽 table,有比赛数据,然后马匹排成一排(完成编号 1 | 2 | 3 .... 在极少数情况下直到 30)
此设计的问题在于并非每场比赛都有相同数量的首发,因此从 8 号马到 30 号马的行中会有很多 null 条目。
优点是,我不必加入 table 进行查询,大多数查询都需要完整的联接,因为每个 table 中的几乎所有数据都需要查询。
table 将包含大约 360-400 列(宽)和最多 20.000(可能更多)行。
问题:这会是性能方面的问题吗?我一天只会查询几次
非常感谢
广泛的 table 是数据仓库方法。这在处理数十亿行时可能是合适的。但是数据仓库往往从纯关系型数据库中获取数据,所以保证了数据的一致性。
联接是 RDBMS 的用途。他们通常很快。别担心这个。我的建议是:建立一个合适的规范化数据库。
有赛马有马。一场比赛有多匹马,一匹马可以参加多场比赛。这是一个 m:n 关系,您需要一个桥梁 table。
table组:
- 马(horse_id、horse_name、birth_date、驯马师、...)
- 种族(race_id、date_time、race_name、路线、距离、price_money、...)
- 参与(horse_id、race_id、骑师、重量、位置、...)