多少个字段对于主键来说太多了?

Rog*_*ith 6 schema database-design primary-key

我正在创建一个表来存储有关对象在网格(游戏地图)中的位置的信息。

例如,我有一个 10x10 的网格,我想在数据库中存储单元格 (5,5) 有一个蓝色框,(3,3) 有一把红色椅子等等。

任何一个方格中可以有多个项目,但同一个项目不应该在同一个方格中出现两次。

这种结构可以接受吗?(主键中的所有列)

 (room_id (FK), room_object_id (FK), x_cell, y_cell)(PK)
Run Code Online (Sandbox Code Playgroud)

还是有这个会更好

id(PK), room_id (FK), room_object_id (FK), x_cell, y_cell
Run Code Online (Sandbox Code Playgroud)

我认为第一种方法更有意义,但我担心在输入内容时增加完整性检查可能会产生大量不必要的开销。

Joe*_*own 6

首先,在确定存在性能问题之前不要担心性能,尤其是对于少量行。

其次,无论您使用主键的唯一索引还是非主键的唯一索引来强制执行四列组合的唯一性,该索引的性能都将相同。

是否将该唯一索引设为主键应取决于您的架构中发生的其他情况。如果您有另一个表(或多个表)引用该表,那么您的复合主键将作为外键传播到其他表。如果那会发生,他们你有更多的考虑。

如果您不需要担心传播复合外键,那么您可能应该将复合唯一索引设为表的主键。这将是实现您执行业务规则目标的最少努力。