उपयुक्त टाइप और NOT NULL, UNIQUE तथा PRIMARY KEY कंस्ट्रेंट के साथ अपनी खुद की टेबल डिज़ाइन करें, जो आपके डेटा की रक्षा करते हैं।
इस पाठ को Kodokon में खोलेंअब तक आप पहले से बनी टेबल को क्वेरी कर रहे थे; एक पेशेवर डेवलपर उन्हें डिज़ाइन करता है। एक अच्छा स्कीमा अमान्य डेटा को इंसर्शन के समय ही अस्वीकार कर देता है: यह किसी भी एप्लिकेशन कोड से पहले, आपकी बचाव की पहली पंक्ति है। sqliteonline.com या sqlite3 में, यह टेबल बनाएँ:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
username TEXT NOT NULL UNIQUE,
created_at TEXT NOT NULL
DEFAULT (datetime('now'))
);SQLite केवल पाँच स्टोरेज टाइप जानता है: INTEGER, REAL, TEXT, BLOB और NULL। तारीखें वहाँ ISO फ़ॉर्मेट (2026-07-04) में TEXT के रूप में संग्रहीत होती हैं। अन्य जगहों (PostgreSQL, MySQL) पर, आप इसके बजाय VARCHAR(255), TIMESTAMP या BOOLEAN घोषित करते: सिद्धांत वही रहता है, केवल टाइप के नाम बदलते हैं। अब अपने कंस्ट्रेंट की जाँच करें:
INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice');
INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice2');प्राइमरी की हर पंक्ति की पहचान करती है: कभी NULL नहीं, कभी दोहराई नहीं जाती, प्रति टेबल केवल एक। SQLite में, INTEGER PRIMARY KEY की एक बहुमूल्य विशेषता है: जब आप इसकी वैल्यू छोड़ देते हैं, तो कॉलम अपने आप बढ़ जाता है, जैसा कि ऊपर के इंसर्शन में है। PostgreSQL पर आप GENERATED ALWAYS AS IDENTITY लिखते, MySQL पर AUTO_INCREMENT। अंत में, CHECK के साथ एक व्यावसायिक नियम जोड़ें:
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
sku TEXT NOT NULL UNIQUE,
price REAL NOT NULL CHECK (price >= 0)
);
INSERT INTO products (name, sku, price)
VALUES ('Keyboard', 'KB-01', -5);