在数据库中保存动态列表的首选方法是什么?

Muh*_*han 5 sql database database-design

在我们的应用程序中,用户可以创建不同的列表(例如sharepoint),例如用户可以创建汽车列表(名称,型号,品牌)和学生列表(姓名,dob,地址,国籍)等.

我们的应用程序应该能够查询列表的不同列,因此我们不能只序列化每一行并将其保存在一行中.

我应该在运行时为每个新创建的列表创建一个新表吗?如果这是最好的解决方案,那么我认为可能Microsoft SharePoint也会做到这一点?

我应该使用以下架构吗?

Lists (Id, Name)
ListColumns (Id, ListId, Name)
ListRows (Id, ListId)
ListData(RowId, ColumnId, Value)
Run Code Online (Sandbox Code Playgroud)

虽然单行会在列表数据表中创建与列表中的列一样多的行,但这感觉不对.

你有没有处理过这种情况?你是怎么在数据库中处理它的?

p.c*_*ell 1

也许一个潜在的解决方案是创建列表可以涉及CREATE TABLE这些实体/列表的语句?

听起来数据库结构或模式可以在运行时或用户的命令下更改,所以也许这样的东西可能有帮助?

  • 用户想要创建一个以前从未见过的实体的新列表。称之为计算机。
  • 用户定义属性(屏幕尺寸、CpuSpeed、AmountRAM、NumberOfCores)
  • 系统允许用户在UI中创建
  • 系统通常让它们全部是字符串,除非能够判断所有提供的值何时确实是日期或数字。
  • 构建 CREATE 脚本,针对数据库执行它们。
  • 将用户定义的数据插入到该新表中。

正确编码后,我们正在满足给定的要求:让用户创建新实体。这里没有提到规模。当然,这需要清理所有输入、参数化查询、记录操作等。

下面的负面评论实际上并没有给出任何充分的理由,而是造成了一些 FUD。我有兴趣解决有关此潜在解决方案的任何问题。我们还没有听说过规模、安全性、性能或使用情况(内部 LAN 与互联网)。

  • 真的吗?对我来说,这听起来是一个可怕的想法——从很多方面来说。 (6认同)
  • 拜托,请不要这样做。我从未见过以编程方式创建表的好案例,这当然不会让我信服。如果两个用户想要创建具有相同名称的列表,会发生什么情况?你想要的是一张桌子。称之为“列表”。从那里继续。 (5认同)