You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache Cassandra中建模多对多关系(附示例数据)

在Apache Cassandra中建模多对多关系(学生-课程选课场景)

我是Cassandra新手,想借助示例数据学习在Apache Cassandra中建模多对多关系。目前已创建名为assignment3的Keyspace,以及存储课程、学生、选课信息的三张表,具体操作和数据如下:

1. classes表(课程详情)

cqlsh> CREATE KEYSPACE Assignment3 WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

cqlsh> use Assignment3;

cqlsh:assignment3> CREATE TABLE classes(className text, creditHours int, classID int, PRIMARY KEY(classID));

cqlsh:assignment3> SELECT * FROM classes;

cqlsh:assignment3> INSERT INTO classes (classID,classname,credithours) VALUES(101,'Introduction to Jazz',4);

cqlsh:assignment3> INSERT INTO classes (classID,classname,credithours) VALUES(102,'Introduction to Guitar',5);

cqlsh:assignment3> INSERT INTO classes (classID,classname,credithours) VALUES(103,'Advanced Guitar',4);

cqlsh:assignment3> INSERT INTO classes (classID,classname,credithours) VALUES(104,'Jazz Band',4);

cqlsh:assignment3> SELECT * FROM classes;

 classid | classname              | credithours
---------+------------------------+-------------
     104 |              Jazz Band |           4
     102 | Introduction to Guitar |           5
     101 |   Introduction to Jazz |           4
     103 |        Advanced Guitar |           4

(4 rows)

2. students表(学生信息)

cqlsh:assignment3> CREATE TABLE students(studentid int, studentname text, dob text, PRIMARY KEY(studentid));

cqlsh:assignment3> INSERT INTO students(studentid,dob,studentname) VALUES(1001,'3/5/2005','Wayne Gentry');

cqlsh:assignment3> INSERT INTO students(studentid,dob,studentname) VALUES(1002,'10/2/2005','Cathy Baker');

cqlsh:assignment3> INSERT INTO students(studentid,dob,studentname) VALUES(1003,'12/3/2004','Zayan Dean');

cqlsh:assignment3> INSERT INTO students(studentid,dob,studentname) VALUES(1004,'4/18/2005','Isa Mcleod');

cqlsh:assignment3> INSERT INTO students(studentid,dob,studentname) VALUES(1005,'6/4/2005','Jud Wiks');

cqlsh:assignment3> INSERT INTO students(studentid,dob,studentname) VALUES(1006,'10/3/2004','Sally Driscoll');

cqlsh:assignment3> SELECT * FROM students;

 studentid | dob       | studentname
-----------+-----------+----------------
      1006 | 10/3/2004 | Sally Driscoll
      1004 | 4/18/2005 |     Isa Mcleod
      1005 |  6/4/2005 |       Jud Wiks
      1001 |  3/5/2005 |   Wayne Gentry
      1003 | 12/3/2004 |     Zayan Dean
      1002 | 10/2/2005 |    Cathy Baker

(6 rows)

3. enrollments表(选课关系)

cqlsh:assignment3> CREATE TABLE enrollments(classid int, studentid int, classgrade text, enrollmentid int, PRIMARY KEY (enrollmentid,classid,studentid));

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (101,1001,'B+',100001);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (101,1003,'A-',100002);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (101,1004,'B',100003);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (101,1006,'A+',100004);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (102,1001,'C+',100005);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (102,1004,'A+',100006);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (102,1005,'C',100003);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (103,1002,'B',100004);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (103,1006,'B-',100005);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (104,1002,'A',100006);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (104,1005,'A-',100006);

cqlsh:assignment3> INSERT INTO enrollments(classid,studentid,classgrade,enrollmentid) VALUES (104,1006,'B+',100006);

cqlsh:assignment3> SELECT * FROM enrollments;

 enrollmentid | classid | studentid | classgrade
--------------+---------+-----------+------------
       100004 |     101 |      1006 |         A+
       100004 |     103 |      1002 |          B
       100005 |     102 |      1001 |         C+
       100005 |     103 |      1006 |         B-
       100003 |     101 |      1004 |          B
       100003 |     102 |      1005 |          C
       100001 |     101 |      1001 |         B+
       100006 |     102 |      1004 |         A+
       100006 |     104 |      1002 |          A
       100006 |     104 |      1005 |         A-
       100006 |     104 |      1006 |         B+
       100002 |     101 |      1003 |         A-

(12 rows)

后续会补充所有访问模式(即SELECT/UPDATE/INSERT查询),以便获取更合适的数据模型建议。

内容的提问来源于stack exchange,提问作者Hilton Daniels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:25:03