Mission Carthage

الرئيسية › الدروس › قواعد البيانات: نصنعو الـ tables

قواعد البيانات MySQL: إنشاء الجداول والمفاتيح والقيود

الفصل 27 · 3 علوم الإعلامية, باك علوم الإعلامية

نظّم المعطيات في tables مربوطين ببعضهم: champs، types، clé primaire، clé étrangère، contraintes، وبعد عمّر وبدّل الـ tables بالـ SQL.

دروس هذا الفصل

  1. الـ tables، الـ champs والـ types
  2. الـ clés étrangères والـ contraintes
  3. نعمّرو ونبدّلو table

الدرس 27.1 : الـ tables، الـ champs والـ types

10 دقيقة

الـ base de données ترتّب المعلومات في tables. الـ table تشبه لجدول: كل عمود هو champ (اللقب، الاسم، المعدّل…) وكل سطر هو enregistrement (تلميذ واحد).

الـ clé primaire

الـ clé primaire هي الـ champ اللي يعرّف كل سطر: زوز أسطر عمرهم ما عندهم نفس القيمة، وعمرها ما تكون فارغة. في الـ schéma متاع الـ table نحطّو تحتها خط (هوني بالـ gras): eleve (id, nom, prenom, moyenne).

الـ types متاع MySQL

نصنعو الـ base و table

CREATE DATABASE ecole;
USE ecole;
CREATE TABLE eleve (
  id INT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  prenom VARCHAR(30) NOT NULL,
  moyenne DECIMAL(4,2)
);

NOT NULL يفرض إنّو الـ champ يتعمّر. الأمر DESCRIBE eleve; يورّي هيكل الـ table: الـ champs متاعها، الـ types، والمفتاح.

انتبه : فاصلة تفرّق بين الـ champs، أما ما فماش بعد الأخير. والـ VARCHAR ديما معاه الطول متاعو: VARCHAR(30)، عمرو ما يكون VARCHAR وحدو.

بـ SQL

خدّم السكريبت واقرا النتيجة متاع DESCRIBE. وبعد زيد champ ville VARCHAR(20) للـ table وعاود خدّم.

CREATE DATABASE ecole;
USE ecole;
CREATE TABLE eleve (
  id INT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  prenom VARCHAR(30) NOT NULL,
  moyenne DECIMAL(4,2)
);
DESCRIBE eleve;

الدرس 27.2 : الـ clés étrangères والـ contraintes

12 دقيقة

الـ tables متاع base مربوطين ببعضهم. القسم فيه برشا تلامذة، والتلميذ في قسم واحد برك: هذي علاقة واحد لبرشا (1:n). نمثّلوها بـ clé étrangère: الـ table eleve تخبّي الـ code متاع القسم متاعو.

في الـ schéma، الـ clé étrangère قدّامها #: classe (code, niveau) و eleve (id, nom, #code_classe).

CREATE TABLE classe (
  code VARCHAR(5) PRIMARY KEY,
  niveau VARCHAR(20) NOT NULL
);
CREATE TABLE eleve (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  code_classe VARCHAR(5),
  FOREIGN KEY (code_classe) REFERENCES classe(code)
);

الـ contraintes d'intégrité

نصيحة : AUTO_INCREMENT يعطي الأرقام وحدو: كي تزيد سطر ما تعطيش الـ id، MySQL يحطّ 1، 2، 3…

علاقة برشا لبرشا (n:m)، مثلاً تلامذة مسجّلين في برشا clubs، تتعمل بـ table زايدة فيها الزوز clés étrangères؛ والـ clé primaire متاعها مصنوعة من الزوز champs: PRIMARY KEY (id_eleve, code_club).

بـ SQL

خدّم السكريبت. وبعد نحّي الـ -- اللي قدّام السطر الأخير وعاود خدّم: الـ INSERT هذا يترفض (غلطة #1452)، خاطر القسم 9Z موش موجود.

CREATE TABLE classe (
  code VARCHAR(5) PRIMARY KEY,
  niveau VARCHAR(20) NOT NULL
);
CREATE TABLE eleve (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  code_classe VARCHAR(5),
  FOREIGN KEY (code_classe) REFERENCES classe(code)
);
INSERT INTO classe VALUES ('3SI1', '3ème SI');
INSERT INTO eleve (nom, code_classe) VALUES ('Trabelsi', '3SI1');
SELECT * FROM eleve;
-- INSERT INTO eleve (nom, code_classe) VALUES ('Jaziri', '9Z');

الدرس 27.3 : نعمّرو ونبدّلو table

10 دقيقة

نزيدو أسطر: INSERT INTO

INSERT INTO eleve VALUES (1, 'Ben Salah', 'Amine', 12.50);
INSERT INTO eleve (id, nom, prenom) VALUES (2, 'Trabelsi', 'Sarra');
INSERT INTO eleve (id, nom, prenom, moyenne) VALUES
  (3, 'Jaziri', 'Yassine', 9.75),
  (4, 'Mansour', 'Rim', 14.00);

نبدّلو الهيكل: ALTER TABLE

ALTER TABLE eleve ADD tel VARCHAR(8);
ALTER TABLE eleve MODIFY nom VARCHAR(40) NOT NULL;
ALTER TABLE eleve DROP COLUMN tel;

ADD يزيد champ، MODIFY يبدّل الـ type ولا القواعد متاعو، DROP COLUMN يفسخو. DROP TABLE eleve; يفسخ الـ table الكل، بالأسطر متاعها.

انتبه : التاريخ ديما يتكتب 'AAAA-MM-JJ': '15/06/2009' يترفض (غلطة #1292).

بـ SQL

خدّم، وبعد زيد تلميذ خامس بـ INSERT واحد وشوف النتيجة متاع الـ SELECT.

CREATE TABLE eleve (
  id INT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  prenom VARCHAR(30) NOT NULL,
  moyenne DECIMAL(4,2)
);
INSERT INTO eleve VALUES (1, 'Ben Salah', 'Amine', 12.50);
INSERT INTO eleve (id, nom, prenom) VALUES (2, 'Trabelsi', 'Sarra');
ALTER TABLE eleve ADD ville VARCHAR(20) DEFAULT 'Tunis';
SELECT * FROM eleve;

تدرّب مجانًا

كل درس فيه 3 تمارين مجانية مع تلميحات باش تطبّق الفصل هذا مع هنّيبوت.

افتح الفصل في Mission Carthage جرّب في الكومبيلاتور أونلاين

← الفصل اللي قبل : JavaScript والصفحة · الفصل اللي بعد : استعلامات SQL بسيطة →

كل الفصول · شوف فروض 2 تكنولوجيا المصلّحة

الدروس كتبناها لـ Mission Carthage على أساس البرنامج الرسمي. الأستاذ متاعك يبقى المرجع.