如何在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
相关产品推荐
相关产品推荐

