たとえば、次のような登録テーブルをプログラムする必要があります。
- enrolment_id
- Academic_period
- 結果
- 学生証
- 主題
学生が特定の学期に2回以上科目に登録できないようにすることを強制したいと思います。したがって、制約には、student_id、subject、およびAcademicPeriodの列が含まれます。
どうすればこれを実現できるのか、まだわかりません。何か助けはありますか?
テーブルに一意の制約を追加します。
ALTER TABLE yourtable ADD CONSTRAINT constraintname UNIQUE (student_id, subject, academic_period)
一意の制約を作成しますacademic_period, student_id, subject
I'll let you work out the actual SQL
注: これは正しく自然なキーです:enrolment_id
は、データベース アーキテクチャのために実装時に追加されたサロゲートです。設計やモデリングのプロセスでは必須ではありません
ユニーク制約を追加します。ここから:
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)
)
(一意として設定する必要がある列について上記を変更します)
この例のクエリから返される行の量を取得するだけです。
SELECT COUNT(*) FROM enrollment WHERE student_id = 'XYZ' AND subject = 'ABC' AND academic_period = 'DEF'
返された行数が 0 より大きい場合、それらはアカデミック期間にその科目にすでに登録されています。