# Tables आणि योग्य data types

Source: https://ravindrabagale.com/mr/cyber/part-05/ch10-mysql-part-1-install-create-insert-and-select/10-3-creating-tables-and-choosing-data-types.html
Language: mr (Marathi with English technical terms)

Table मध्ये rows आणि columns असतात. Column चा type data च्या अर्थाशी जुळला पाहिजे. पैसे, तारीख आणि नाव यांना एकच text type देणं पुढे validation/calculation मध्ये अडचण आणू शकतं.

 | Type
 | Stores
 | Example

 | INT / BIGINT
 | Whole numbers
 | id, age

 | DECIMAL(10,2)
 | Exact money values
 | fees

 | VARCHAR(n)
 | Text up to n characters
 | name VARCHAR(100)

 | TEXT
 | Long text
 | caption

 | DATE / DATETIME / TIMESTAMP
 | Dates and times
 | joined_on DATE

 | BOOLEAN (TINYINT(1))
 | True/false
 | is_active

 | ENUM('a','b')
 | One of a fixed list
 | mode ENUM('online','offline')

INT/BIGINT पूर्णांक; DECIMAL(10,2) exact decimal amount; VARCHAR(n) मर्यादित text; TEXT मोठा text; DATE/DATETIME/TIMESTAMP तारखा-वेळा. BOOLEAN हा MySQL मध्ये TINYINT(1) alias आहे—फक्त 0/1 values enforce होण्यासाठी अतिरिक्त validation लागू शकते. ENUM ठराविक choices साठी.

USE cybercourse;
CREATE TABLE students (
  student_id INT AUTO_INCREMENT PRIMARY KEY,
  name       VARCHAR(100) NOT NULL,
  email      VARCHAR(150) UNIQUE,
  city       VARCHAR(50)  NOT NULL,
  age        INT,
  fees_paid  DECIMAL(10,2) DEFAULT 0,
  joined_on  DATE
);

CREATE TABLE courses (
  course_id   INT AUTO_INCREMENT PRIMARY KEY,
  course_name VARCHAR(100) NOT NULL,
  duration_wk INT
);

CREATE TABLE enrollments (
  enroll_id  INT AUTO_INCREMENT PRIMARY KEY,
  student_id INT,
  course_id  INT,
  score      INT,
  FOREIGN KEY (student_id) REFERENCES students(student_id),
  FOREIGN KEY (course_id)  REFERENCES courses(course_id)
);

SHOW TABLES;
DESCRIBE students;             -- or: DESC students;
SHOW CREATE TABLE students\G   -- full definition

students: auto-increment primary key, आवश्यक name/city, unique email, fees default 0. courses: course names आणि duration. enrollments: student/course foreign keys आणि score. Foreign keys संबंधित parent rows चा संदर्भ जपतात.

DESCRIBE columns दाखवतो. SHOW CREATE TABLE ...\G पूर्ण definition vertical format मध्ये दाखवतो. आधी tables तयार असतील तर पुन्हा CREATE करताना existing-table error येऊ शकतो; data जपून पुढे जा.

Practice

स्वतःच्या cybercourse lab database मध्ये तिन्ही tables तयार करा आणि DESCRIBE पाहा. AUTO_INCREMENT PRIMARY KEY व FOREIGN KEY काय करतात ते उदाहरणासह सांगा.

रवींद्र बागले यांची tip

Passwords plain text मध्ये store करू नका. PHP मध्ये password_hash() सारखी योग्य password-hashing API वापरून hash साठी पुरेसा column, उदा. VARCHAR(255), ठेवा. Password column लहान आहे म्हणून नेहमी plain textच आहे असा निष्कर्ष नाही; actual design तपासा.
