我怀疑这是其中一个问题,不会有一个明确的答案。但我希望能够在大多数情况下获得一些通常被认为是最佳实践的洞察力。所以,提前感谢那些对此负责的人。
我有两种类型的文件夹用于存储记录。个人文件夹和团队文件夹。
我可以通过两种方式在数据库中表示这一点......
选项1:两个独立且无关的文件夹表。
personalFolders( id, userId, title )
teamFolders( id, teamId, title )
records( id, folderId, folderType, title )
选项2:具有两个连接表的公用文件夹表
folders( id, title )
personalFolders( folderId->folders.id, userId )
teamFolders( folderId->folders.id, teamId )
records( id, folderId->folders.id, title )
我的问题是:一般来说,什么模式被认为是最佳实践?
(我的直觉告诉我使用选项2,因为那时我可以在记录表中保留外键约束。但是,是否有可能更好地使用选项1?)
答案 0 :(得分:0)
我实际上会为文件夹创建一个表,其中包含userId和teamId的列:
folders (id, title, userId, teamId)
records (id, folder.id, title)
您可以通过检查userId
或teamId
列是NULL
还是有值来确定该文件夹是个人文件夹还是团队文件夹。
这样做的好处是,文件夹既可以是个人文件夹,也可以是团队文件夹,而无需将相同的文件夹存储在两个表中。您还可以在记录表中使用FK约束。这将允许您轻松选择所有文件夹(包括个人和团队),无需任何联接或联合。
这与您的选项2基本相同,但它通过消除对额外连接表的需要而简化了它。
我个人认为选项1没有任何优势,除非你有一个荒谬的数据量并将它们分成单独的表可以提高性能。