iphone核心数据模型

iphone核心数据模型,iphone,database-design,core-data,Iphone,Database Design,Core Data,我不熟悉核心数据。我正在努力理解如何为这个应用程序设计数据模型 我必须为书籍建立一个数据库 Books have the following characteristics: .englishName .italianName .frenchName .spanishName .number 书籍可以有两种:免费或非免费。 书籍可以单独出售,也可以捆绑出售。 一个包可以代表一堆书。 一本书可以是一捆或多捆 我需要的是: 标记为付费的能力 捆绑或/和书本 能够检索所有非自由或所有自由 书,所有的

我不熟悉核心数据。我正在努力理解如何为这个应用程序设计数据模型

我必须为书籍建立一个数据库

Books have the following characteristics:
.englishName
.italianName
.frenchName
.spanishName
.number
书籍可以有两种:免费或非免费。 书籍可以单独出售,也可以捆绑出售。 一个包可以代表一堆书。 一本书可以是一捆或多捆

我需要的是:

  • 标记为付费的能力 捆绑或/和书本
  • 能够检索所有非自由或所有自由 书,所有的书,从一个包,所有的 买的书
  • 我的设想是:我将创建3个实体:Bundle、Product和Type,并生成所有产品Bundle,我的意思是,包含1个产品或多个产品的Bundle

    Bundle
    .Number
    .Paid
    -relation to product (fromBundle) to-many
    
    
    Product
    .nameEN
    .nameIT
    .nameFR
    .nameSP
    .Number
    -fromBundle (relation to Bundle) to-many
    -fromType (relation to Type)
    
    
    Type
    .kind
    -relation to Product... to-many
    
    但我不确定这不是正确的方法,因为无法用所有4种语言定义捆绑包名称,如果我将这些属性添加到捆绑包中,我将以大量冗余结束


    请帮帮我!谢谢。

    通过介绍产品和类型,您可能会使这一点变得过于复杂-您真正需要的只是书籍和捆绑包实体,它们之间存在多对多关系。然后,要处理您介绍的用例:

  • 标记已付款的书包或书:对于一本书,只需标记已付款的书;对于一个捆绑包,标记其所有书籍已付款
  • 对于数据检索:
    • 要检索所有非免费或所有免费图书,只需将
      免费
      属性设置为适当值的图书实体实例(或
      价格
      值为零或非零,具体取决于存储此属性的方式)
    • 要从给定的捆绑包中检索所有书籍,只需调用
      [bundle books]
      ——多对多关系直接提供了这一点
    • 要检索所有购买的图书,只需查找标有
      付费的图书

  • 这样,您就可以将四个名称属性保留在书本身上,而不用担心它们(除非您必须命名包,但这些包无论如何都应该是不同的名称)。此外,它在概念上很简单—您不必担心产品或语义的确切构成方式。

    通过引入产品和类型,您可能会使其过于复杂—您真正需要的只是书籍和捆绑包实体,它们之间有多对多的关系。然后,要处理您介绍的用例:

  • 标记已付款的书包或书:对于一本书,只需标记已付款的书;对于一个捆绑包,标记其所有书籍已付款
  • 对于数据检索:
    • 要检索所有非免费或所有免费图书,只需将
      免费
      属性设置为适当值的图书实体实例(或
      价格
      值为零或非零,具体取决于存储此属性的方式)
    • 要从给定的捆绑包中检索所有书籍,只需调用
      [bundle books]
      ——多对多关系直接提供了这一点
    • 要检索所有购买的图书,只需查找标有
      付费的图书

  • 这样,您就可以将四个名称属性保留在书本身上,而不用担心它们(除非您必须命名包,但这些包无论如何都应该是不同的名称)。此外,它在概念上很简单——您不必担心产品的确切构成或这种方式的语义。

    但这就是问题所在。如果我有捆绑包和书籍,每个捆绑包和书籍都必须具有相同的2个属性(价格和付费),因为用户可以购买其中一个或另一个,例如,如果购买了一个捆绑包,我以付费方式支付捆绑包,我不确定如何知道是否购买了上述书籍,除非我在购买捆绑包后将书籍标记为已购买。保持这样的工作状态并不能让我相信这是一条正确的道路。请记住,书籍和书包的价格不同,在我的头脑中,它们是不同的东西。如果你仍然看到我在使事情复杂化,我感谢你。。。。。。(继续)。。。可以更具体地说明它应该如何设计。。。谢谢(继续)。。。啊,再澄清一点。产品和捆绑包有相同的数字系统,我的意思是,想象一下五本书:第1、2、3、4和5本。现在想象数字6是一个包,它等于书1,2和3。。。7是一个由第3册和第4册组成的包。我这样想是因为如果我用不同的系统对bundle和book进行编号,当用户点击它们都列出的表视图时,我必须检查该索引是否是bundle的book。如果两者都有相同的编号,我只需将编号转发给实体,它会告诉我它是什么。我在设计中保留图书的
    paid
    属性的原因是(我想)你可以在捆绑之外购买一本书,甚至可以单独购买捆绑中的所有书籍,而不必购买捆绑本身。因此,是的,如果你标记一个bundle
    paid
    ,你也应该标记它的所有书籍
    paid
    。如果我有捆绑包和书籍,每个捆绑包和书籍都必须具有相同的2个属性(价格和付费),因为用户可以购买其中一个或另一个,例如,如果购买了一个捆绑包,我以付费方式支付捆绑包,我不确定如何知道是否购买了上述书籍,除非我在购买捆绑包后将书籍标记为已购买。保持这样的工作状态并不能让我相信这是一条正确的道路。请记住,书籍和书包的价格不同,在我的头脑中,它们是不同的东西。如果你仍然看到我在使事情复杂化,我感谢你。。。。。。(继续)。。。可以更具体地说明它应该如何设计。。。谢谢(继续)。。。啊,再澄清一点。产品和捆绑包有相同的数字系统,我的意思是,想象一下五本书:第1、2、3、4和5本。现在想象数字6是一个包,它等于书1,2和3。。。7是一个由第3册和第4册组成的包。我想象这个