【发布时间】:2011-03-19 08:32:19
【问题描述】:
我正在设计一个游戏,其中一个角色有很多物品,而这些物品可以有多种类型。有一个字符表,以及按类型(例如武器、盔甲和各种其他项目类型)细分的十二个不同的可能项目表。
我想创建一个表来保存这些项目类型的实例(基本上是一个角色的项目表),每一行都会有一个来自角色表的外键来指示哪个角色拥有该项目的所有权。
起初我想我会在角色的项目表中创建外键——十二个项目表中的每一个都有一个键。但由于每个项目只能是一种“类型”,这将导致每行中有 11 个空字段,这似乎是错误的。
什么是更好的方法?我还没有建立数据库,所以我可以考虑不使用十二个项目表的其他库存想法,但知道这一点:管理界面将允许用户根据需要添加/删除/修改每种类型的项目。
另外,我想坚持最好的规范化做法,所以我会忽略不可避免的“谁在乎?只做有效的事情并使用可为空的字段。”
【问题讨论】:
-
最佳规范化实践并不总是最佳编程实践。特别是,当您可以保证只从其中 1 个表中返回行时,任何需要您查询 12 个表的操作都不是最佳编程实践,无论您的数据集多么紧凑和非冗余。您对该系统的优先事项是什么?
-
@Kylotan +1 - 应该始终应用归一化,但这是一种平衡行为,理论上你可以归一化到第 N 度,但此时你将有很多表,速度变慢您的查询性能。
标签: database-design normalization