我有一个表,其中存储所有项目信息及其 ID。现在我想创建一个包含所有客户的表并记录购买了哪些商品。对此最好的解决方案是什么?我想如果像这样存储它的话效率不是很高:
|customer_id | username | password | boughtproducts |
| 1 | herbert |123 |productid1,pid2...|
Run Code Online (Sandbox Code Playgroud)
你会怎么做?
我是网络编程的新手,需要一些专家建议。我正在为我的网站项目之一使用 SQL 数据库。我的网站将显示一个带有“喜欢”和“不喜欢”按钮的主题列表。已登录的用户将能够单击每个主题的“喜欢”或“不喜欢”按钮。我能够为每个主题记录喜欢和不喜欢的数量。因此,如果用户单击某个主题,它将显示该特定主题的喜欢和不喜欢的数量,但是我想要实现的是,当有人单击特定用户个人资料时,它应该显示用户喜欢或不喜欢的所有主题. 例如,当我们点击 Facebook 中的用户个人资料时,它会显示该特定用户的所有评论或喜欢,我该如何做类似的事情。我想知道实现这个的数据结构并查询数据谢谢大家。
我最近一直在复习 Codd 的关系代数和关系数据库。我记得关系是一组有序元组,函数是满足域中每个点必须映射到共域中单个点的附加属性的关系。从这个意义上说,每个表都定义了一个从主键到由所有其他列定义的余域空间的有限点函数。这是关系的意义吗?如果是这样,为什么关系代数不是函数代数,为什么不称其为函数数据库呢?
谢谢。顺便说一句,抱歉,如果这不是 stackoverflow 的正常形式(哈,一个数据库笑话!),但我查看了所有论坛,这似乎是最好的。
我试图向同事解释连接表的好处,下面是一个解释。我对么?
目前他有两张表的图片和标签之间的关系。一个图片表和一个标签表。pic 表有一个tag_id这是标记表中条目的 FK。这是我的回应:
首先让我们看看pics和tags表。因此,在您当前的架构中,让我们想象两张图片(a 和 b)。我们用#wtf标签标记图片a和b。我们现在在 outtags表中有两个条目:
pic_id title
------ -----
a wtf
b wtf
Run Code Online (Sandbox Code Playgroud)
你看到问题了吗?所以想象一下,我们在 1000 张不同的图片上有 1000 个 wtf 标签。使用相同的架构,我们现在有一个臃肿的标签表,其中包含所有这些重复数据(和浪费的空间)。当我们有多对多关系时,就会出现这个问题。在这种情况下,很多图片可以有很多标签,很多标签可以有很多图片。我们将如何解决这个问题?答案是连接表。所以我们创建了一个新表。让我们称之为pic_tag。该表将包含列pic_id& tag_id。所以现在新表看起来像:
图片标签
pic_id tag_id
------ ------
a 1
b 1
Run Code Online (Sandbox Code Playgroud)
标签
id name
-- ----
1 wtf
Run Code Online (Sandbox Code Playgroud)
图片
id name
-- ----
a pic1
b pic2
Run Code Online (Sandbox Code Playgroud)
所以这对我们做了几件事。首先它节省空间。我们只存储字符串 'wtf' 一次。其次,要找到所有带有标签“wtf”的图片,我们首先转到标签表并找到“wtf”的 id,然后转到 pic_tag 表并搜索该 id,这比搜索臃肿的“标签”要高效得多' 给定文本的表格。换句话说,搜索整数比搜索文本快得多。
题
主键是否在功能上决定了表中的所有其他属性?
我的想法
当然必须不是吗?这不是主键的重点吗?
假设我有两个表表 A 和表 B
表A
id name remarks
4 X XXX
6 Y YYY
7 Z ZZZ
Run Code Online (Sandbox Code Playgroud)
表B
id Aid remarks edit_flag
1 4 NULL 0
2 6 YY changes 1
3 7 Z cahnged 1
Run Code Online (Sandbox Code Playgroud)
所以,我想检索如下数据:
如果 edit_flag 为 1(即已编辑),则从表 B 中获取备注列否则(edit_flag 为 0)从表 A 中获取备注列,因为它没有被编辑
我在看这样的东西
if(edit_flag == 0)
then get remarks from table A
else get remarks from table B
Run Code Online (Sandbox Code Playgroud)
所以我的结果表应该看起来像
Row_Counter remarks
1 XXX
2 YY changes
3 Z changed
Run Code Online (Sandbox Code Playgroud) @OneToMany默认情况下,注释会创建一个连接表,除非mappedBy指定了元素。
这种行为的原因是什么?例如,对于以下实体:
@Entity
public class User {
// ...
@OneToMany
private List<UserDocument> documents;
// ...
}
@Entity
public class UserDocument {
// ...
@ManyToOne
private User user;
// ...
}
Run Code Online (Sandbox Code Playgroud)
对于User实体,为什么不简单地休眠:
Userin的字段。UserDocumentUserDocumentmappedBy为@OneToMany自身的注释?不这样做并生成连接表作为默认行为的原因是什么?为什么 Hibernate(或 JPA)是这样设计的?
我正在为工作流程复杂的销售公司设计数据库。流程从销售官开始,然后是团队主管,最后是经理。在批准提案之前,经理会将其发送给部门业务分析师。在得到 dba 的评论后,他可以将提案发回给销售人员修改提案。经理也可以拒绝该提议。如果满意,经理会将其转发给销售总监。到目前为止设计的表格如下:-
Table: ProposalBasicData
Id, Title, ProposalDate, Scope, Objective
Table: ProposalState
Id, Name
(Values - Forwarded , Approved , Returned , Rejected)
Table: UserType
Id, Name
(Values - SalesOfficer, TeamLead, Manager , DBA, DirectorSales)
Table: WorkFlow
Id, StartUserType, NextUserType, StateId, IsActive
Table: RequestAction
Id, ProposalId, WorkFlowId, UserId, ActionDate
Run Code Online (Sandbox Code Playgroud)
请就设计提出建议。
这些天我面临着存储一些时间序列数据的问题。
该数据取自一台工业机器:对于每个作业(大约每小时 3 个,24/24h),一个软件记录:
振动数据以非常高的频率 (> 10 kHz) 获取,并导致非常大的内存需求。这个问题让我的公司评估了一些有效存储这些数据的可能性。
插入不会很频繁(可能每天 1 或 2 次,当机器不工作时)。读取可能非常频繁(另一个软件将检索数据以进行绘图和分析)。
目前,将使用单个节点来存储数据,所以我不想(目前)考虑分区和并行化问题。
我应该更喜欢哪种解决方案?关系型 DBMS(例如 MySQL 或 PostgreSQL),还是通用的 NoSQL DB(例如面向列的数据库 - 考虑到所有时间序列都是单变量的 - 像 Cassandra,或面向文档的数据库,像 MongoDB)?
除了我的特定用例之外,何时通常更喜欢 RDMBS 而不是 NoSQL 进行时间序列存储?什么时候更喜欢 NoSQL 而不是 RDBMS?
sql ×5
database ×4
postgresql ×2
sql-server ×2
bigdata ×1
hibernate ×1
java ×1
jpa ×1
libraries ×1
math ×1
nosql ×1
primary-key ×1
time-series ×1
where ×1