|9. Constraints & Indexes
Chapter 9SQL Tutorial~1 min read

Constraints & Indexes

Data Integrity आणि Performance

Constraints data integrity ensure करतात — wrong data database मध्ये जाणार नाही. Indexes queries fast करतात — database ला प्रत्येक वेळी सगळ्या rows scan नाही करावे लागत.

FOREIGN KEY — Tables मधले Relationship

FOREIGN KEY constraint

sql
CREATE TABLE courses (
    id    INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(200) NOT NULL
);

CREATE TABLE enrollments (
    id         INT PRIMARY KEY AUTO_INCREMENT,
    student_id INT NOT NULL,
    course_id  INT NOT NULL,
    enrolled_on DATE DEFAULT (CURRENT_DATE),

    -- FOREIGN KEY — referential integrity
    FOREIGN KEY (student_id) REFERENCES students(id)
        ON DELETE CASCADE,    -- student delete → enrollments delete
    FOREIGN KEY (course_id) REFERENCES courses(id)
        ON DELETE RESTRICT    -- course delete — enrolled असेल तर error
);

-- student_id = 999 नाही students table मध्ये
-- INSERT INTO enrollments (student_id, ...) VALUES (999, ...);
-- ❌ Error: Cannot add or update a child row

INDEX — Query Performance

Creating and using indexes

sql
-- Index म्हणजे book च्या शेवटी index सारखे
-- Frequently searched columns वर index बनवा

-- Single column index
CREATE INDEX idx_city ON students(city);

-- Composite index — multiple columns
CREATE INDEX idx_city_marks ON students(city, marks);

-- Unique index
CREATE UNIQUE INDEX idx_email ON students(email);

-- Index वापरून query automatically fast होते
SELECT * FROM students WHERE city = 'Pune';
-- आता city = 'Pune' शोधणे खूप fast!

-- Index पाहणे
SHOW INDEX FROM students;

-- Index काढणे
DROP INDEX idx_city ON students;

Views — Virtual Tables

CREATE VIEW

sql
-- View म्हणजे saved query — virtual table
-- Complex query एकदा define करा, नंतर table सारखे वापरा

CREATE VIEW pune_toppers AS
SELECT name, marks, city
FROM students
WHERE city = 'Pune' AND marks >= 80
ORDER BY marks DESC;

-- View वापरणे — table सारखेच!
SELECT * FROM pune_toppers;
SELECT name FROM pune_toppers WHERE marks > 85;

-- View update करणे
CREATE OR REPLACE VIEW pune_toppers AS
SELECT name, marks, city
FROM students
WHERE city = 'Pune' AND marks >= 75;

-- View काढणे
DROP VIEW pune_toppers;

Key Points — लक्षात ठेवा

  • FOREIGN KEY — दोन tables मधला relationship, referential integrity
  • ON DELETE CASCADE — parent delete → child delete
  • ON DELETE RESTRICT — parent delete block if child exists
  • INDEX — frequently searched columns वर, queries fast
  • VIEW — saved query, virtual table, complex queries simple
0/10 chapters पूर्ण