gpt4 book ai didi

database - 具有提交 ID、用户 ID 和提交顺序的表的主键

转载 作者:搜寻专家 更新时间:2023-10-30 22:18:27 24 4
gpt4 key购买 nike

我正在为用户可以提交数据的 Web 应用程序构建数据库。每个数据都是唯一的,多个用户可以提交相同的数据。

从应用程序的角度来看,了解用户提交数据的顺序很重要。

我专门为此制作了一个表格。它具有以下字段:

SubmissionID
UserID
SubmissionOrder
... # and other non-important ones

我的问题是,我应该将哪些属性作为主键?

SubmissionIDUserID 将允许 (SubmissionID, UserID) 对有重复的 SubmissionOrder

SubmissionIDSubmissionOrder 将允许同一用户提交相同的内容两次。

UserIDSubmissionOrder... 会大大限制用户可以提交的内容 :P

对于不同的 UserID,这三个都允许重复的 SubmissionOrder

是否还有其他我没有考虑的解决方案?

这个问题是不是在应用层面更好解决?有触发器?

感谢您的宝贵时间!

PS:我怀疑您会发现一些有用的技术细节:

  • 应用程序是用 PHP 编写的
  • 数据库运行在sqlite3

最佳答案

在大多数 SQL 平台上,事情发生的顺序有点模糊。据我所知,没有一个 SQL 平台可以同时保证这两个要求。

  • 不能有领带。
  • 较早的提交必须始终看起来比较晚的提交早。

使用时间戳列,较早的提交看起来总是比较晚的提交早。但是,无论您的 dbms 时间戳的分辨率有多好,都有两个具有相同时间戳值的“提交”很容易。

有了序列号(或自动递增的数字),就没有关系了。但是 SQL 平台不保证序列号为 2 的行在序列号为 3 的行之前提交。这意味着,如果您同时记录序列号和时间戳,您很可能会找到行对具有较低序列号的也具有较晚时间戳。

但 SQLite 不完全是 SQL,所以它可能是这个一般规则的一个异常(exception)。

在 SQLite 中,任何写入数据库的进程 locks the whole database .我认为锁定数据库意味着您可以依赖 rowid()随时间增加。

所以我认为您正在查看 {SubmissionID, UserID} 的主键,其中 rowid() 确定提交顺序。但我可能是错的。

关于database - 具有提交 ID、用户 ID 和提交顺序的表的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732853/

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