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

时间:2015-04-14 12:27:27

标签: mysql sql database rdbms

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

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

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

url_file --->用户上传的文件的网址,数据类型varchar(100)

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

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

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

2)为每个约束分解为表格,因为它们彼此无关

id | user-id | case_id
<fk>

id | is_submitted
id | is_read
id | file_url

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

而且列也彼此无关。

2 个答案:

答案 0 :(得分:0)

评论太长了。

对我而言,似乎单个用户提交了一个案例研究。如果是这样,CastStudies表应该有一个名为SubmittedBy的列。

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

至于阅读标志,这似乎是案例研究和用户之间的多对多关系。因此,您需要一个包含以下列的联结表:

  • CasestudyId
  • 用户ID
  • ReadDate

然而,我想象所有这些事情,因为你的问题并没有真正解释实体及其间的关系。

编辑:

根据你的评论,我会设想一个这样的表格:

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)
) ;

如果您愿意,可以添加标记,但我认为查看操作的日期/时间可能更有用。

答案 1 :(得分:0)

这取决于您想要优化的内容。

读性能?
写性能?
反思人类思维模式?

但是你必须对这两种型号进行测试/基准测试,以找到最适合你需求的产品。

此外,您声称这些标记&#34;彼此无关&#34;,这在技术上是不正确的,因为它们都引用相同的案例研究。
因此,我建议您使用版本1,因为它是一个更简单的模型,并且不需要使其复杂化。
但实际上,这已经是一种意见了。