当前位置: 首页 > 知识库问答 >
问题:

MySQL-如何存储未知数量的数据列表?[副本]

亢仰岳
2023-03-14

我想为一个文件存储未知成员数(介于0到5000之间)的数据。就像Instagram为用户的朋友所做的那样。

到现在为止,我存储了9个成员,为此,我创建了单独的列。通过这样做,我可以连接不同的表。

CREATE TABLE file (
    file_id INT NOT NULL AUTO_INCREMENT,
    file_name VARCHAR(50) NOT NULL,
    file_admin INT NOT NULL,
    member1 INT,
    member2 INT,
    member3 INT,
    member4 INT,
    member5 INT,
    member6 INT,
    member7 INT,
    member8 INT,
    member9 INT,
    PRIMARY KEY (file_id),
    FOREIGN KEY (file_admin) REFERENCES users(user_id),
    FOREIGN KEY (member1) REFERENCES users(user_id),
    FOREIGN KEY (member2) REFERENCES users(user_id),
    FOREIGN KEY (member3) REFERENCES users(user_id),
    FOREIGN KEY (member4) REFERENCES users(user_id),
    FOREIGN KEY (member5) REFERENCES users(user_id),
    FOREIGN KEY (member6) REFERENCES users(user_id),
    FOREIGN KEY (member7) REFERENCES users(user_id),
    FOREIGN KEY (member8) REFERENCES users(user_id),
    FOREIGN KEY (member9) REFERENCES users(user_id)
);

你可以清楚地看到这里有很多值是空的。如果一个文件有5000个成员,那么创建这样数量的列可能会很困难,而且许多值将为空。

我知道Instagram使用SQL,我如何将这些数据存储在MYSQl中,而且我应该能够基于这些数据的外键连接表。

共有1个答案

朱伯寅
2023-03-14

正确的存储方式是使用不同的表:

CREATE TABLE files (
    file_id INT AUTO_INCREMENT PRIMARY KEY,
    file_name VARCHAR(50) NOT NULL,
    file_admin INT NOT NULL
);

CREATE TABLE file_members (
    file_member_id INT AUTO_INCREMENT PRIMARY KEY,
    file_id INT NOT NULL
    member_id INT NOT NULL,
    FOREIGN KEY (file_id) REFERENCES files(file_id),
    FOREIGN KEY (member_id) REFERENCES users(user_id),
    UNIQUE (file_id, member_id)
);

请注意,not null在主键上是多余的,并且主键声明可以是内联的。

 类似资料:
  • 我是的初学者。现在,我正在尝试开发一个移动应用程序,但在将数据存储到数组列表中时遇到了一些问题。例如,数据如下所示 现在我使用的是一个名为的第三方库。要使用此库,必须以这种方式存储数据, 在这个中,id的道具是一个字符串,标签也是一个字符串。那么我如何像这样单独存储我的数据呢?例如,像这样 我已经尝试用地图的方法做到这一点。代码将是 但还是不行。 代码如下:

  • 问题内容: 我让我的用户以HTML形式添加数字输入,并用值填充它们。该表单在提交时被序列化,并发送到一个PHP文件,该文件使用PDO将数据插入到MySQL数据库中。数据库表中有一堆列,用于存储表单中的其他值,但是用于存储用户添加的输入的列的设置如下: 这些列允许使用,因为我根本不知道用户是否会添加任何数字输入。 有没有更好的方法来存储这些数字? 以下是我的JS的一部分,用于获取表单数据并将其发送到

  • 我正在开发一个测验应用程序。我需要将问题和答案(选项)存储在应用程序的某些位置,以便可以动态地将的填充到中。我如何存储这样的数据并访问它来填充我的。 我不太清楚这个概念。请建议这样做的最佳方法。

  • 在前面提到,MySQL 的核心就是存储引擎。MySQL 存储引擎主要有 InnoDB、MyISAM、Memory、BDB、Merge、Archive、Federated、CSV、BLACKHOLE 等。 MySQL 中修改数据表的存储引擎的语法格式如下: ALTER TABLE <表名> ENGINE=<存储引擎名>; ENGINE 关键字用来指明新的存储引擎。 实例演示 下面将数据表 stude

  • 假设我有一个数组[10][10][10][10][10]。由于一种方法,我让程序用随机数填充它们。现在我想“保存”那些值以备以后使用。我今天关闭了电脑,明天继续。我要怎么做?我不知道那个案子的密码。由于我必须与选定的启动解决方案工作几个月,我不能简单地让我的PC运行不停。 感谢任何帮助,谢谢:) 编辑:我现在有一些代码,但我得到一个错误:“outputfile不能被解决”我无法修复它到目前为止。但

  • 问题内容: 我得到了一些“ 锻炼程序” 内容,这些内容将按顺序显示给用户。下面显示了最简单形式的示例。 通常,这些表至少要包含100行/练习,并且大约有300个表(针对不同标准的不同练习)。我们没有任何前端,可以直接使用 _dbForge Studio_数据库编辑器更新数据库。 以前的开发人员已经设计了表格,以便唯一ID列也可用作序列号。它也构成url的一部分。例如xxx / exercise /