2

たとえば、次のような登録テーブルをプログラムする必要があります。

  1. enrolment_id
  2. Academic_period
  3. 結果
  4. 学生証
  5. 主題

学生が特定の学期に2回以上科目に登録できないようにすることを強制したいと思います。したがって、制約には、student_id、subject、およびAcademicPeriodの列が含まれます。

どうすればこれを実現できるのか、まだわかりません。何か助けはありますか?

4

4 に答える 4

14

テーブルに一意の制約を追加します。

ALTER TABLE yourtable ADD CONSTRAINT constraintname UNIQUE (student_id, subject, academic_period)
于 2012-05-03T13:55:26.967 に答える
3

一意の制約を作成しますacademic_period, student_id, subject
I'll let you work out the actual SQL

注: これは正しく自然なキーです:enrolment_idは、データベース アーキテクチャのために実装時に追加されたサロゲートです。設計やモデリングのプロセスでは必須ではありません

于 2012-05-03T13:55:44.333 に答える
1

ユニーク制約を追加します。ここから:

UNIQUE 制約の命名を許可し、複数の列で UNIQUE 制約を定義するには、次の SQL 構文を使用します。

MySQL / SQL サーバー / オラクル / MS アクセス:

CREATE TABLE Persons
 (
 P_Id int NOT NULL,
 LastName varchar(255) NOT NULL,
 FirstName varchar(255),
 Address varchar(255),
 City varchar(255),
 CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
 )

(一意として設定する必要がある列について上記を変更します)

于 2012-05-03T13:55:52.363 に答える
0

この例のクエリから返される行の量を取得するだけです。

SELECT COUNT(*) FROM enrollment WHERE student_id = 'XYZ' AND subject = 'ABC' AND academic_period = 'DEF'

返された行数が 0 より大きい場合、それらはアカデミック期間にその科目にすでに登録されています。

于 2012-05-03T13:54:16.640 に答える