在数据库中存储数据的最佳和最佳方式

best and optimal way of storing data in DB

我有一种情况,我必须在数据库中存储一些标志和数据。内容如

is_read ---> 检查用户是否阅读过案例研究,标记 0 或 1

is_submitted ---> 检查用户是否提交了案例研究标志 0 或 1

用户上传文件的

url_file--->url,数据类型varchar(100)

每个案例研究都可以被许多用户访问。

那么两者中哪一个是最佳的和最佳的实现方式?

1) 将所有东西存储在一个 table 中,这里没有重复
id | user-id | case_id | is_submitted | is_read | file_url

2) 每个约束分解为 table,因为它们彼此不相关

id | user-id | case_id
<fk>

id | is_submitted
id | is_read
id | file_url

我需要所有数据,所以在 2 种情况下它会有更多的连接。

而且这些列彼此不相关。

评论太长了。

对我来说,案例研究似乎是由单个用户提交的。如果是这样,CastStudies table 应该有一个名为 SubmittedBy.

的列

同样,我认为一个案例研究只有一个 URL。如果是这样,它应该有一个名为 FileURL 的列。如果有多个 URL,那么您需要另一个 table、CasestudyFiles 来存储它们。

至于阅读标志,这似乎是案例研究和用户之间的多对多关系。因此,您需要一个连接点 table,其中的列如下:

  • CasestudyId
  • 用户名
  • 阅读日期

但是,这些都是我想象出来的,因为你的问题并没有真正解释实体以及它们之间的关系。

编辑:

根据您的评论,我设想 table 是这样的:

create table UserCasestudies (
    UserCasestudiesId int not null auto_increment primary key,
    CastStudiesId int not null references Casestudies(CaseStudiesId),
    UserId int not null references Users(UserId),
    ReadDatetime datetime,
    SubmittedDatetime datetime,
    UploadDatetime datetime,
    URL varchar(100)
) ;

您可以根据需要添加标志,但我认为查看 date/time 的操作可能更有用。

这取决于你想优化什么。

读取性能?
写入性能?
人类思维模式的反映?

但是您必须 test/benchmark 两种型号的那些才能找到最适合您需求的。

此外,您声称这些标志 "are not related to each other",这在技术上是不正确的,因为它们都指的是同一个案例研究。
因此,我建议您使用版本 1,因为它是一个更简单的模型,没有必要使其复杂化。
但实际上,这已经是一个意见了。