Oracle SQL Developer - l'Ajout de Contraintes de Clé Étrangère
Je suis nouveau sur Oracle SQL et je vais avoir un moment difficile de l'ajout d'une contrainte. Je suis en train d'ajouter des contraintes sur ma table, pour faire appliquer les règles métiers spécifiques qui permet seulement aux étudiants de prendre 4 cours et un maximum de 25 élèves par classe.
S'il vous plaît laissez-moi savoir ce que des informations supplémentaires vous avez besoin de moi pour l'aider à répondre à cette question. Je suis à une perte de...
CREATE TABLE GRADES
(STU_ID int NOT NULL ENABLE,
CRSE_ID CHAR(9) NOT NULL ENABLE,
STU_CRSE_GRADE VARCHAR2(20)
check(STU_CRSE_GRADE='A' or
STU_CRSE_GRADE='B' or
STU_CRSE_GRADE='C' or
STU_CRSE_GRADE ='D' or
STU_CRSE_GRADE= 'F'),
CONSTRAINT GRADES_PK PRIMARY KEY (STU_ID, CRSE_ID),
constraint fk_Grades Foreign key(Stu_ID)
REFERENCES Students,
constraint fk_Grades_Crse_ID foreign key(Crse_ID)
REFERENCES Courses
);
Pas de problème! Voir les tableaux ci-dessous:
CREATE TABLE Students
(Stu_ID int Constraint pk_Stu_ID Primary Key,
Stu_name VARCHAR(255) NOT NULL, Stu_Add varchar(255),
Stu_Maj CHAR(6)
);
CREATE TABLE Instructors
(Instr_ID char(3) Constraint pk_Instr_ID Primary Key,
Instr_Name VARCHAR(255) NOT NULL, Instr_Office varchar(8)
);
CREATE TABLE Courses
(Crse_ID char(9) Constraint pk_Crse_ID Primary Key,
Crse_Title VARCHAR(255) NOT NULL,
Student’s name: Lai Xia
Instr_ID CHAR(3) not null,
constraint fk_Courses_Instr_ID Foreign key(Instr_ID) REFERENCES Instructors
);
- Sans doute, vous avez quelques tables ne sont pas listés ici qui montrent ce que les classes d'un étudiant prend et ce que les élèves sont en classe. Le
grades
tableau ne semble pas être pertinents à votre question-- est-ce que vous auriez besoin de poster les tables. Les règles que vous avez énumérés ici ne semble pas être le genre de chose que vous pouvez appliquer avec les contraintes, ils sont probablement le genre de chose que vous feriez appliquer avec des déclencheurs si c'est un devoir à la maison. Les déclencheurs permettrait de créer d'autres problèmes dans le monde réel. - Cela sonne comme vous avez besoin d'un déclencheur d'insertion
- Comme @JustinCave dit, il serait difficile d'aider sans voir les Étudiants et Stages de tables.
Vous devez vous connecter pour publier un commentaire.
La clé étrangère seul ne peut que représente un-à-plusieurs relations. Si vous souhaitez limiter le "beaucoup" partie à un numéro spécifique, vous aurez besoin de:
L' (1) est facile à mettre en œuvre, mais facile de se tromper: vous aurez soigneusement d'employer de verrouillage pour éviter des conditions de course dans le simultanées environnement:
Pour éviter cela, vous aurez besoin de sérialiser ces opérations, probablement par le verrouillage de l'étudiant par l'
SELECT ... FOR UPDATE
.L' (2) pourrait être mis en œuvre par la modification de la clé de la conception, puis de limiter les valeurs d'une clé peut avoir. Par exemple, l'application de cette un étudiant peut prendre au maximum 4 cours peut être fait comme ceci:
La combinaison de contraintes CHECK et UNIQUE signifie que le SGBD lui-même refuse de se connecter au même élève à plus de 4 cours de.
Ceci vous permettra de réussir:
Mais, ce faisant, évidemment, ne va pas (violation de contrainte de VÉRIFICATION):
BTW, lorsque l'étudiant est déjà connecté à certains cours et que vous voulez trouver le reste de "slots", vous pouvez le faire comme ceci:
[SQL Violon]
Ressemble, vous avez appris à propos de contraintes de base dans oracle (comme vérifier et de clé étrangère). Pour le plus compliqué scenarious vous pouvez utiliser des déclencheurs.
Les déclencheurs sont exécutées sur l'ensemble des événements (lorsque vous essayez d'insérer, mettre à jour ou supprimer un enregistrement dans la table).
Je suppose que l'étudiant ne prend que 4 cours signifie que chaque élève pourrait avoir seulement 4 enregistrements dans le tableau des notes. Dans le déclencheur, vous pouvez faire exactement cela.
Si vous créez un déclencheur avant (il y a aussi après ) insérer ou de mettre à jour, à l'intérieur d'un déclencheur vous de vérifier le nombre de dossiers d'étudiants à partir de l'insertion de la ligne ont déjà et de les accepter ou de refuser particulier insertion/mise à jour de l'opération.
Que vous pouvez écrire similaire déclencheur pour 25 étudiants dans un cours. Ce sera un autre déclencheur sur le même insérer/mettre à jour dans les grilles de table.
Pour la syntaxe exacte essayer documnentation d'abord, les déclencheurs sont le fun 🙂
Aussi, plus tard, vous pouvez envisager d'écrire des procédures stockées comme une méthode plus avancée de la mise en œuvre de la logique métier dans la base de données. bonne chance!