【问题标题】:Database structure for a list of items ( very different )项目列表的数据库结构(非常不同)
【发布时间】:2012-01-31 07:58:18
【问题描述】:

我遇到了以下问题: 我有一个可以创建列表的用户列表 我有包含以下实体的表: - 电影 - 具有不同的属性 - 图片 - 具有不同的属性 - 人物资料 - 具有不同的属性 - X 类型 - 具有不同的属性(待办事项列表)。

用户可以创建一个包含上述所有类型的列表(其他用户可以在其中添加元素)。 (例如包含电影、演员和图片库的列表)。

我怎样才能有效地存储该列表并且没有很多问题:)

提前致谢

【问题讨论】:

  • 不同的类型是有限的(例如,只有电影、图片、人物、待办事项)?或者它是无限的,用户可以定义新的类型?
  • 有限(我将手动定义列表中使用的所有类型)

标签: mysql database list structure normalization


【解决方案1】:

您正在寻找的解决方案(以及 Mkaz 开始描述的)是一种称为不相交子类型的数据库模式。

前段时间我遇到了同样的问题,这是我发现的:

Object-oriented-like structures in relational databases

Polymorphism in SQL database tables?

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您应该创建一个单独的表 Entity,它将作为您所有电影、图片等的基本类型。以及一个单独的表 ListsItems 将包含以下列:(list_identity_id)和表UsersListsuser_idlist_id)。

    UsersLists 将包含用户到列表的映射(每个用户可能有很多列表),ListsItems 将包含列表到实体的映射(每个列表可能有很多实体),并且Entity 将包含实体类型(电影、图片等)和指向其原生表的特定实体 ID(MoviePicture 等)。

    Aufziehvogel 向您询问了类型的数量,因为在设计中解析此实体类型字段很重要。如果您有有限的预定义类型数量,您可以将列 entity_type 设为枚举,但如果用户应该能够创建自己的类型,这是一个更复杂的问题,并且应该替换表 SpecifiedEntity特定表格(电影图片等)。

    您可以阅读有关关系数据库规范化的内容,以从所有现有细节中了解此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2014-02-03
      • 2012-03-09
      • 2014-10-18
      • 1970-01-01
      相关资源
      最近更新 更多