gpt4 book ai didi

mysql - 什么更好,许多重复的行或增加表格?

转载 作者:行者123 更新时间:2023-11-29 05:29:31 26 4
gpt4 key购买 nike

我有一个文件共享应用程序。我没有将文件存储在数据库中。它只是在文件夹中。这些是用户上传的文件。现在每个文件都可以与多个用户共享,比如 1 个文件与数千人共享。我想以最简单的方式实现这一点,同时牢记性能。现在我脑子里有两个选择。

1) 包含 id、所有者、文件名、文件路径、shared_with 等列的表

2) 每个用户都有一个表,其中包含列 - id、所有者、文件名、文件路径。

我认为 1 个选项更可取,但很难了解与特定用户共享了多少文件。无论如何,我问是因为可能会有更好的答案,谢谢我正在考虑选择这些选项。感谢和问候

最佳答案

您的两个解决方案都有问题。

使用第一个选项,您会看到文件共享的用户的逗号分隔字段。这样就几乎不可能有效地搜索用户共享的文件。

在 2nd 中,您会遇到大量表格。如果你想知道与你共享文件的所有用户,你需要检查每个表。这会很慢。

解决方案是有一个文件表,以及一个谁与他们共享文件的表。在第二张表中,每个文件和与之共享的人都有一行(即,如果一个文件与 3 个人共享,则该文件在该表上将有 3 行)。

如下所示。

文件表。每个文件一行

--
-- Table structure for table `filestable`
--

CREATE TABLE IF NOT EXISTS `filestable` (
`FileId` int(11) NOT NULL AUTO_INCREMENT,
`FileName` varchar(255) NOT NULL,
`Owner` int(11) NOT NULL,
`FilePath` varchar(255) NOT NULL,
PRIMARY KEY (`FileId`),
KEY `Owner` (`Owner`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

用户表。每个用户一行

--
-- Table structure for table `filesusers`
--

CREATE TABLE IF NOT EXISTS `filesusers` (
`UserId` int(11) NOT NULL AUTO_INCREMENT,
`UserName` varchar(255) NOT NULL,
PRIMARY KEY (`UserId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

文件共享表。每个文件在这里都有一对多的行,每个用户也是如此。用户有权访问的每个文件 2 将有一行

--
-- Table structure for table `filesshares`
--

CREATE TABLE IF NOT EXISTS `filesshares` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`FileId` int(11) NOT NULL,
`UserId` int(11) NOT NULL,
PRIMARY KEY (`Id`),
KEY `FileId` (`FileId`),
KEY `UserId` (`UserId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

通过这种方式,您可以轻松地加入表以查找用户有权访问的任何文件,或文件可以被访问的任何用户。

关于mysql - 什么更好,许多重复的行或增加表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16187048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com