根据相似性在数据库中创建行集群

问题描述 投票:0回答:1

我正在设计一个系统,该系统采用学生的模块,并根据他们选择的部门和科目将他们分组到班级中。

我们以下表为例:

学生证 部门 选择1 选择2 选择3 选择4
1 语言 英语 文学 西班牙语 意大利语
2 语言 英语 文学 西班牙语 意大利语
3 语言 英语 文学 西班牙语 德语
4 语言 英语 文学 西班牙语 法语
5 科学 数学 物理 化学 生物学
6 科学 数学 物理 化学 计算

假设每个班级可以有 2 名学生。

在上面的示例中,需要创建 3 个类(1,2)、(3,4)和(5,6)。 (注:分组的学生必须是同一系的)

您能给我一些如何设计数据库的提示,以便它可以允许创建多个组/集群吗?该应用程序会非常大,有很多条目。

我想为此使用矢量数据库,但我不确定它是否是最好的选择

如果有任何有用的提示、链接或书籍,我将不胜感激

database cluster-analysis vector-database
1个回答
0
投票

正如您所说,您将拥有大量数据并且可能需要矢量功能,那么 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
类型属性添加到表中以对其执行相似性搜索。 (查看这个视频

© www.soinside.com 2019 - 2024. All rights reserved.