我正在设计一个系统,该系统采用学生的模块,并根据他们选择的部门和科目将他们分组到班级中。
我们以下表为例:
学生证 | 部门 | 选择1 | 选择2 | 选择3 | 选择4 |
---|---|---|---|---|---|
1 | 语言 | 英语 | 文学 | 西班牙语 | 意大利语 |
2 | 语言 | 英语 | 文学 | 西班牙语 | 意大利语 |
3 | 语言 | 英语 | 文学 | 西班牙语 | 德语 |
4 | 语言 | 英语 | 文学 | 西班牙语 | 法语 |
5 | 科学 | 数学 | 物理 | 化学 | 生物学 |
6 | 科学 | 数学 | 物理 | 化学 | 计算 |
假设每个班级可以有 2 名学生。
在上面的示例中,需要创建 3 个类(1,2)、(3,4)和(5,6)。 (注:分组的学生必须是同一系的)
您能给我一些如何设计数据库的提示,以便它可以允许创建多个组/集群吗?该应用程序会非常大,有很多条目。
我想为此使用矢量数据库,但我不确定它是否是最好的选择
如果有任何有用的提示、链接或书籍,我将不胜感激
正如您所说,您将拥有大量数据并且可能需要矢量功能,那么 Cassandra 就有意义。您现在可以开始使用 AstraDB 的免费层,这是一项托管 cassandra 服务。
非规范化数据模型将有 3 个表,如下所示:
第一个读取学生信息的表
CREATE TABLE IF NOT EXISTS student_by_ID (
Student_ID UUID PRIMARY KEY,
Department TEXT,
Choices LIST<TEXT>
);
请注意,如果选择数始终为 4,则创建 4 列(选择 1、选择 2...)
第二个表将允许您检索每个 id 的类。添加
student_ID
作为聚类列可让您轻松检索给定班级的所有学生。
CREATE TABLE IF NOT EXISTS classe_by_ID (
Class_ID UUID,
Student_ID UUID,
Department TEXT,
...
PRIMARY KEY (Class_ID, Student_ID)
);
然后我们就可以为部门准备最后一张桌子了
CREATE TABLE IF NOT EXISTS Department_by_ID (
Department_Name TEXT,
Class_ID UUID,
PRIMARY KEY (Department_Name, Class_ID)
);
Astra 具有矢量搜索功能(将在 Cassandra 5.0 中提供),因此您可以将
vector
类型属性添加到表中以对其执行相似性搜索。 (查看这个视频)