提问者:小点点

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


我想为一个文件存储未知成员数(介于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个答案

匿名用户

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

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在主键上是多余的,并且主键声明可以是内联的。