我对核心数据有疑问。我的实体看起来像这样:
在桌上游戏我想存储这个游戏中的所有玩家。问题是它们可能是2个或更多,所以我必须存储一个数组......我想到了两个解决方案..
我的第一个解决方案是将字符串存储到成员中,如下所示:
3,4,5,6,11
然后将其拆分为数组
let members = fetchedData.Players.characters.split{$0 == ","}.map(String.init)
第二个:(我认为这是“更清洁”的版本)
我会让我的实体看起来像这样:
游戏(GameID,GameName,时间戳)
并添加另一个实体:
玩家(GameID,UserID)
你怎么看?如果我创建另一个实体,我有什么优势? (我想我会有更好的表现,但我也认为我需要更多的数据)答案 0 :(得分:5)
如果要存储一组简单数据,如整数,那么使用可转换属性是合理的(参见Bartlomiej Semanczyk的回答)。但请注意,从核心数据的角度来看,该属性只是一个字节包,没有任何意义,也没有搜索。此外,更改数组的一个条目会更改整个属性。
最好建议使用其他实体。不要担心额外的存储开销。根据您拥有的玩家数量,您可能会或可能没有更好的表现,但这不是重点。
它更干净,为您提供更多选择,并且更适合核心数据模型。
具体来说,通过该实体,您现在可以轻松地知道诸如“哪个游戏是玩家X玩?”之类的内容。 “有多少玩家在玩所有游戏?” “列出所有玩家”等等。
现在,当您建立关系时,无需将“gameid”添加到玩家实体。
此外,当你建立关系时,你可能想要做多对多的观看,因为游戏可以有很多玩家,并且玩家可以参与很多游戏。
答案 1 :(得分:2)
但是您可以使用以下方法将数组转换为String
let arrayAsString = [1, 2, 3].description //[1, 2, 3]