【问题标题】:how can I create students marks database?如何创建学生成绩数据库?
【发布时间】:2014-11-11 18:28:57
【问题描述】:

我正在尝试为学生的分数建立一个数据库(访问)。每个学生都有许多课程和每门课程的不同分数。 例子 约翰:

数学 Q1 = 80, Q2= 90, Q3=77

艺术 Q1=75, Q2=85, Q3=80

等等 我建立了3个关系如下的表 学生(id-name-grade) 课程(课程ID-课程名称) 分数(id-courseid-Q1-Q2-Q3)

我的工作正确吗?因为我将它升级到SQL,所以我需要知道报表和表单的表和关系是否相同?

【问题讨论】:

    标签: sql-server-2008 ms-access-2007


    【解决方案1】:

    好的,但是您应该重命名一些字段:课程(id,名称),标记(stu_id,course_id,Q1,Q2,Q3)

    SQL(我用的是PostgreSQL,但我觉得其他DBMS类似)

    CREATE TABLE students
    (
    id integer NOT NULL,
    fname varchar(20),
    lname varchar(20),
    grade integer,
    PRIMARY KEY (id)
    );
    
    CREATE TABLE courses
    (
    id integer NOT NULL,
    name varchar(20),
    PRIMARY KEY (id)
    );
    
    CREATE TABLE marks
    (
    stu_id integer REFERENCES students(id),
    course_id integer REFERENCES courses(id),
    Q1 double,
    Q2 double,
    Q3 double,
    PRIMARY KEY (stu_id, course_id)
    );
    

    CREATE TABLE marks
    (
    id integer NOT NULL,
    stu_id integer REFERENCES students(id),
    course_id integer REFERENCES courses(id),
    Q1 double,
    Q2 double,
    Q3 double,
    PRIMARY KEY (id)
    );
    

    希望你的帮助

    【讨论】:

      【解决方案2】:

      您应该在标记表中使用复合键。这不会限制你只有 3 个问题。

      用于创建表的 Ms Sql Query 将如下所示-

      /****** Object:  Table [dbo].[students]    Script Date: 11/11/2014 16:20:05 ******/
      SET ANSI_NULLS ON
      GO
      
      SET QUOTED_IDENTIFIER ON
      GO
      
      SET ANSI_PADDING ON
      GO
      
      CREATE TABLE [dbo].[students](
          [id] [int] NOT NULL,
          [fname] [varchar](20) NULL,
          [lname] [varchar](20) NULL,
          [grade] [int] NULL,
      PRIMARY KEY CLUSTERED 
      (
          [id] ASC
      )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,  ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
      ) ON [PRIMARY]
      
      GO
      
      SET ANSI_PADDING OFF
      GO
      
      
      
      
      /****** Object:  Table [dbo].[courses]    Script Date: 11/11/2014 16:19:59 ******/
      SET ANSI_NULLS ON
      GO
      
      SET QUOTED_IDENTIFIER ON
      GO
      
      SET ANSI_PADDING ON
      GO
      
      CREATE TABLE [dbo].[courses](
          [id] [int] NOT NULL,
          [name] [varchar](20) NULL,
      PRIMARY KEY CLUSTERED 
      (
          [id] ASC
      )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,  ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
      ) ON [PRIMARY]
      
      GO
      
      SET ANSI_PADDING OFF
      GO
      
      
      
      /****** Object:  Table [dbo].[marks]    Script Date: 11/11/2014 16:19:37 ******/
      SET ANSI_NULLS ON
      GO
      
      SET QUOTED_IDENTIFIER ON
      GO
      
      CREATE TABLE [dbo].[marks](
          [stu_id] [int] NOT NULL,
          [course_id] [int] NOT NULL,
          [q_id] [int] NOT NULL,
          [mark] [numeric](18, 0) NOT NULL,
       CONSTRAINT [PK_marks] PRIMARY KEY CLUSTERED 
      (
          [stu_id] ASC,
          [course_id] ASC,
          [q_id] ASC
      )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,     ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
      ) ON [PRIMARY]
      
      GO
      
      ALTER TABLE [dbo].[marks]  WITH CHECK ADD  CONSTRAINT [FK_marks_courses] FOREIGN     KEY([course_id])
      REFERENCES [dbo].[courses] ([id])
      GO
      
      ALTER TABLE [dbo].[marks] CHECK CONSTRAINT [FK_marks_courses]
      GO
      
      ALTER TABLE [dbo].[marks]  WITH CHECK ADD  CONSTRAINT [FK_marks_students] FOREIGN     KEY([stu_id])
      REFERENCES [dbo].[students] ([id])
      GO
      
      ALTER TABLE [dbo].[marks] CHECK CONSTRAINT [FK_marks_students]
      GO
      

      【讨论】:

        猜你喜欢
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多