如何在MySQL中存储未定义数量的内容?

如何在MySQL中存储未定义数量的内容?,mysql,database-design,Mysql,Database Design,比如说,我们有一些拥有财产的人的数据。人可以什么都没有,也可以什么都没有。这样存储数据的正确方法是什么 据我所知,MySQL没有提供将数组存储为数据类型的方法。如果是的话,也许会是这样: CREATE TABLE person ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, possessions ARRAY NOT NULL ); 我相信你要找的是三张

比如说,我们有一些拥有财产的人的数据。人可以什么都没有,也可以什么都没有。这样存储数据的正确方法是什么

据我所知,MySQL没有提供将数组存储为数据类型的方法。如果是的话,也许会是这样:

CREATE TABLE person (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    possessions ARRAY NOT NULL
);

我相信你要找的是三张桌子(或者两张,如果每张桌子只能由一个人拥有)

  • 表Person有PersonId(INT-PK标识符)和PersonName(以及 与任何其他人(属性)
  • 表拥有者具有OccessionID (INT PK标识符)和占有名称(以及任何其他 (拥有属性)
  • 表personOwnage有PersonId和 OccessionId表示该人拥有该财产
  • 这是一个非常简单的m:n关系设计(即一个人拥有一定数量(可能为0)的财产,而财产拥有一定数量的“所有者”)


    如果每件物品只能由一个人拥有,你可以通过删除table person Occession并将PersonId作为物品表的一列,下到两张表中

    我相信你会寻找三张表(如果每件物品只能由一个人拥有,则两张表)

  • 表Person有PersonId(INT-PK标识符)和PersonName(以及 与任何其他人(属性)
  • 表拥有者具有OccessionID (INT PK标识符)和占有名称(以及任何其他 (拥有属性)
  • 表personOwnage有PersonId和 OccessionId表示该人拥有该财产
  • 这是一个非常简单的m:n关系设计(即一个人拥有一定数量(可能为0)的财产,而财产拥有一定数量的“所有者”)


    如果每件物品只能由一个人拥有,你可以通过删除table person Occession并将PersonId作为物品表的一列,下到两张表中

    我相信你会寻找三张表(如果每件物品只能由一个人拥有,则两张表)

  • 表Person有PersonId(INT-PK标识符)和PersonName(以及 与任何其他人(属性)
  • 表拥有者具有OccessionID (INT PK标识符)和占有名称(以及任何其他 (拥有属性)
  • 表personOwnage有PersonId和 OccessionId表示该人拥有该财产
  • 这是一个非常简单的m:n关系设计(即一个人拥有一定数量(可能为0)的财产,而财产拥有一定数量的“所有者”)


    如果每件物品只能由一个人拥有,你可以通过删除table person Occession并将PersonId作为物品表的一列,下到两张表中

    我相信你会寻找三张表(如果每件物品只能由一个人拥有,则两张表)

  • 表Person有PersonId(INT-PK标识符)和PersonName(以及 与任何其他人(属性)
  • 表拥有者具有OccessionID (INT PK标识符)和占有名称(以及任何其他 (拥有属性)
  • 表personOwnage有PersonId和 OccessionId表示该人拥有该财产
  • 这是一个非常简单的m:n关系设计(即一个人拥有一定数量(可能为0)的财产,而财产拥有一定数量的“所有者”)



    如果每个财产只能由一个人拥有,您可以通过删除表PersonOwnage并将PersonId作为财产表的一列来进入两个表

    创建一个链接表,并将该人的每个财产存储到与
    id
    链接的表中,这是否意味着我必须定义多少用于存储数据的表(或列)?但是,我的问题是关于创建表,我们不知道要插入多少列。您使用EAV设计来存储未定义数量的未定义“东西”。用谷歌搜索它来查看它是什么,你不需要开箱即用。最好的标准方法是使用另一个表,它将通过ID链接到主表。但是如果你不确定需要在链接表中创建的列的数量,你可以将Occessions列指定为
    VARCHAR
    ,将用逗号分隔或使用其他字符分隔财产。@Saagar,“逗号分隔”。不,很糟糕。OP澄清其他人的建议:两张桌子,人和财产。person只需要id和name,哪些财产需要id(这将允许您链接到person表,可能是一个类型varchar(或者enum,如果您有一组财产类型)列(进一步定义财产类型),以及thing列,也可以是varchar(财产-车、笔,等等)。每个插入到物品表中都会列出id、类型和财产,一行。因此,从id=10125的物品中选择*将列出所有。创建一个链接表,并将每个人的财产存储到与
    id
    链接的表中。这是否意味着我必须定义有多少表(或列)存储数据?但是,我的问题是关于创建表,我们不知道要插入多少列。您使用EAV设计来存储未定义数量的未定义“东西”。用谷歌搜索它来查看它是什么,你不必开箱即取。最好的标准方法是使用另一个表,它将通过ID链接到主表。但是如果你不确定需要在链接表中创建的列数,你可以将Occessions列指定为
    VARCHAR
    ,这将用逗号分隔或使用其他字符分隔财产。@Saagar,“逗号分隔”。不好。请用OP澄清其他建议:两个表,person和properties。person只需