在数据库中存储数据的最佳和最佳方式
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,因为它是一个更简单的模型,没有必要使其复杂化。
但实际上,这已经是一个意见了。
我有一种情况,我必须在数据库中存储一些标志和数据。内容如
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,因为它是一个更简单的模型,没有必要使其复杂化。
但实际上,这已经是一个意见了。