Database Tutorials SQLAlchemy তে Custom Data Types এবং Validators গাইড ও নোট

284

SQLAlchemy-তে Custom Data Types এবং Validators তৈরি করা একটি অত্যন্ত শক্তিশালী পদ্ধতি যা আপনাকে ডেটাবেসের ক্ষেত্রগুলোর জন্য বিশেষ ধরনের ডেটা প্রক্রিয়াকরণ এবং যাচাইকরণ (validation) যুক্ত করতে সাহায্য করে। এতে ডেটাবেসের ডেটার ধরন, সঠিকতা, এবং নির্দিষ্ট শর্ত অনুযায়ী প্রক্রিয়া করতে পারেন।


Custom Data Types তৈরি করা

SQLAlchemy আপনাকে নিজের ডেটা টাইপ তৈরি করার সুযোগ দেয়। আপনি যখন একটি নতুন ডেটা টাইপ তৈরি করেন, তখন সেটা SQLAlchemy-র TypeDecorator ক্লাস থেকে উত্তরাধিকারী হয়। এটি আপনার নতুন ডেটা টাইপকে SQLAlchemy-র অন্যান্য ডেটা টাইপের মত আচরণ করতে সক্ষম করে।

Custom Data Type তৈরি করার উদাহরণ:

ধরা যাক, আমরা একটি নতুন JSON ডেটা টাইপ তৈরি করতে চাই যা ডেটাবেসে JSON ডেটা সংরক্ষণ করবে।

from sqlalchemy.types import TypeDecorator, String
import json

class JsonType(TypeDecorator):
    """ Custom JSON Type for SQLAlchemy """
    impl = String  # The underlying implementation of the data type

    def process_bind_param(self, value, dialect):
        """ This method is used to convert the value before inserting it into the database """
        if value is not None:
            return json.dumps(value)  # Convert Python object to JSON string
        return value

    def process_result_value(self, value, dialect):
        """ This method is used to convert the value when retrieving it from the database """
        if value is not None:
            return json.loads(value)  # Convert JSON string back to Python object
        return value

এই JsonType ক্লাসটি SQLAlchemy-র String টাইপের উপর ভিত্তি করে কাজ করে, তবে এটি JSON ডেটার সাথে কাজ করে। process_bind_param এবং process_result_value পদ্ধতিগুলোর মাধ্যমে ডেটা এক্সট্র্যাকশন এবং ইনসার্ট করার সময় কাস্টম প্রক্রিয়া করা হয়।

Validators তৈরি করা

SQLAlchemy-তে কাস্টম ভ্যালিডেটর তৈরি করা খুব সহজ, এবং আপনি আপনার মডেল ফিল্ডে কাস্টম ভ্যালিডেশন যুক্ত করতে পারেন। সাধারণত, আপনি মডেলের __init__ পদ্ধতিতে বা @validates ডেকোরেটর ব্যবহার করে ভ্যালিডেটর যুক্ত করতে পারেন।

@validates ডেকোরেটর ব্যবহার করে ভ্যালিডেশন:

SQLAlchemy-তে আপনি @validates ডেকোরেটর ব্যবহার করে মডেল ফিল্ডের জন্য কাস্টম ভ্যালিডেশন তৈরি করতে পারেন।

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import validates

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

    @validates('age')
    def validate_age(self, key, value):
        if value < 18:
            raise ValueError("Age must be 18 or older")
        return value

    @validates('name')
    def validate_name(self, key, value):
        if not value:
            raise ValueError("Name cannot be empty")
        return value

এখানে, User মডেলের age এবং name ফিল্ডে কাস্টম ভ্যালিডেটর যুক্ত করা হয়েছে। validate_age পদ্ধতি নিশ্চিত করে যে, বয়স ১৮ বছরের কম নয়, এবং validate_name পদ্ধতি নিশ্চিত করে যে, নামটি খালি নয়।

validates ডেকোরেটরের কাজের পদ্ধতি

  • @validates ডেকোরেটর একটি মডেল ফিল্ডের জন্য কাস্টম ভ্যালিডেটর যুক্ত করতে ব্যবহৃত হয়।
  • এটি ভ্যালিডেশন চালানোর সময় ফিল্ডের মানটি ইনপুট হিসেবে গ্রহণ করে এবং আপনাকে সেই মানটি ফেরত দিতে হয়।
  • যদি আপনি ভ্যালিডেশন সফলভাবে না করতে পারেন, তবে ValueError বা আপনার প্রয়োজন অনুযায়ী অন্য কোনো ত্রুটি উত্থাপন করতে পারেন।

SQLAlchemy তে Custom Data Types এবং Validators-এর সুবিধা

  1. ডেটা সংরক্ষণ এবং প্রক্রিয়া: কাস্টম ডেটা টাইপগুলি ডেটাবেসে ডেটা সংরক্ষণ এবং প্রক্রিয়া করার সময় অত্যন্ত সুবিধাজনক। আপনি নিজের প্রক্রিয়া (যেমন JSON বা অন্য কোনো ফর্ম্যাট) কাস্টমাইজ করতে পারেন।
  2. ভ্যালিডেশন: কাস্টম ভ্যালিডেটর ব্যবহার করে, আপনি ডেটার সঠিকতা নিশ্চিত করতে পারেন এবং আপনার মডেল ফিল্ডগুলোর জন্য বিশেষ শর্ত সেট করতে পারেন।
  3. কাস্টম টাইপের উপর নিয়ন্ত্রণ: আপনি যদি ডেটা টাইপে বিশেষ কোনো কাজ করতে চান (যেমন, সময় বা ভ্যালিডেশন), তবে কাস্টম টাইপ এবং ভ্যালিডেটর দিয়ে সেটা সহজেই সম্ভব।

সারাংশ

SQLAlchemy-তে কাস্টম ডেটা টাইপ এবং ভ্যালিডেটর তৈরি করা ডেটাবেস পরিচালনার জন্য একটি শক্তিশালী পদ্ধতি। এটি আপনাকে আপনার ডেটার ধরন এবং সঠিকতা আরও ভালোভাবে নিয়ন্ত্রণ করতে দেয়, যা অ্যাপ্লিকেশনের স্থিতিশীলতা এবং কার্যকারিতাকে বাড়িয়ে তোলে।

Content added By

Custom Data Types তৈরি করা

211

Custom Data Types কী?

Custom Data Types (কাস্টম ডেটা টাইপ) হল এমন ডেটা টাইপ যা প্রোগ্রামারদের বিশেষ প্রয়োজনীয়তা পূরণ করতে নিজস্বভাবে সংজ্ঞায়িত করা হয়। অনেক সময় প্রোগ্রামারদের এমন ডেটা টাইপ প্রয়োজন হয় যা পূর্বনির্ধারিত ডেটা টাইপগুলোর মধ্যে অন্তর্ভুক্ত নয়। এমন ক্ষেত্রে Custom Data Types ব্যবহার করা হয়, যা প্রোগ্রামারের নিজস্ব ডেটার কাঠামো তৈরি করতে সহায়তা করে।


কাস্টম ডেটা টাইপ তৈরি করার উপকারিতা

  • কাস্টমাইজেশন: বিশেষ প্রয়োজনীয়তা পূরণের জন্য কাস্টম ডেটা টাইপ তৈরি করা যেতে পারে।
  • পুনঃব্যবহারযোগ্যতা: একবার কাস্টম ডেটা টাইপ তৈরি করলে, তা পুনঃব্যবহারযোগ্য হয় এবং কোডের পুনরাবৃত্তি কমে যায়।
  • বোধগম্যতা: একাধিক ভ্যালু বা বৈশিষ্ট্য থাকা ডেটা সংরক্ষণ করার জন্য কাস্টম ডেটা টাইপ ব্যবহারের মাধ্যমে কোড আরও বোধগম্য ও পরিষ্কার হয়।

কাস্টম ডেটা টাইপ তৈরি করার প্রক্রিয়া

কাস্টম ডেটা টাইপ তৈরি করার জন্য বিভিন্ন প্রোগ্রামিং ভাষায় আলাদা পদ্ধতি রয়েছে। এখানে কয়েকটি জনপ্রিয় প্রোগ্রামিং ভাষায় কাস্টম ডেটা টাইপ তৈরি করার প্রক্রিয়া তুলে ধরা হলো:

C/C++ তে কাস্টম ডেটা টাইপ তৈরি করা

C এবং C++ তে কাস্টম ডেটা টাইপ তৈরি করার জন্য struct বা class ব্যবহার করা হয়।

উদাহরণ:

#include <stdio.h>

// Struct ব্যবহার করে কাস্টম ডেটা টাইপ তৈরি করা
struct Student {
    char name[50];
    int age;
    float marks;
};

int main() {
    struct Student s1 = {"Ali", 20, 85.5};
    printf("Name: %s\n", s1.name);
    printf("Age: %d\n", s1.age);
    printf("Marks: %.2f\n", s1.marks);
    
    return 0;
}

এখানে Student নামে একটি কাস্টম ডেটা টাইপ তৈরি করা হয়েছে যা তিনটি সদস্য ধারণ করে: নাম (string), বয়স (integer) এবং মার্কস (float)।

Python এ কাস্টম ডেটা টাইপ তৈরি করা

Python এ কাস্টম ডেটা টাইপ তৈরি করতে আমরা class ব্যবহার করি।

উদাহরণ:

class Student:
    def __init__(self, name, age, marks):
        self.name = name
        self.age = age
        self.marks = marks

    def display(self):
        print(f"Name: {self.name}")
        print(f"Age: {self.age}")
        print(f"Marks: {self.marks}")

# কাস্টম ডেটা টাইপ ব্যবহার
s1 = Student("Ali", 20, 85.5)
s1.display()

এখানে Student ক্লাসটি কাস্টম ডেটা টাইপ হিসেবে কাজ করছে, এবং __init__() মেথডের মাধ্যমে এটি ইনিশিয়ালাইজ করা হচ্ছে।

Java তে কাস্টম ডেটা টাইপ তৈরি করা

Java তে কাস্টম ডেটা টাইপ তৈরি করার জন্য আমরা class ব্যবহার করি, যেটি সাধারণত অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর একটি মৌলিক ধারণা।

উদাহরণ:

public class Student {
    String name;
    int age;
    float marks;

    // Constructor
    public Student(String name, int age, float marks) {
        this.name = name;
        this.age = age;
        this.marks = marks;
    }

    // Method to display student details
    public void display() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("Marks: " + marks);
    }

    public static void main(String[] args) {
        Student s1 = new Student("Ali", 20, 85.5f);
        s1.display();
    }
}

এখানে Student ক্লাসটি একটি কাস্টম ডেটা টাইপ হিসেবে ব্যবহৃত হচ্ছে, যেখানে নাম, বয়স এবং মার্কস সম্বলিত একটি অবজেক্ট তৈরি করা হচ্ছে।

C# এ কাস্টম ডেটা টাইপ তৈরি করা

C# তে কাস্টম ডেটা টাইপ তৈরি করতে class বা struct ব্যবহার করা হয়।

উদাহরণ:

using System;

public class Student {
    public string Name;
    public int Age;
    public float Marks;

    public Student(string name, int age, float marks) {
        Name = name;
        Age = age;
        Marks = marks;
    }

    public void Display() {
        Console.WriteLine("Name: " + Name);
        Console.WriteLine("Age: " + Age);
        Console.WriteLine("Marks: " + Marks);
    }
}

public class Program {
    public static void Main() {
        Student s1 = new Student("Ali", 20, 85.5f);
        s1.Display();
    }
}

এখানে Student ক্লাসটি কাস্টম ডেটা টাইপ তৈরি করার জন্য ব্যবহৃত হচ্ছে, যা তিনটি প্রোপার্টি ধারণ করে: Name, Age, এবং Marks


সারাংশ

কাস্টম ডেটা টাইপ (Custom Data Type) তৈরি করার মাধ্যমে আপনি আপনার প্রোগ্রামে প্রয়োজনীয় ডেটা কাঠামো তৈরি করতে পারবেন। এটি ডেটা প্রক্রিয়াকরণকে আরও সহজ এবং পরিষ্কার করে তোলে। বিভিন্ন প্রোগ্রামিং ভাষায় এটি বিভিন্নভাবে তৈরি করা যায় যেমন struct, class, ইত্যাদি।

Content added By

Column Validation এবং Data Integrity Enforcements

314

ArangoDB-তে Column Validation এবং Data Integrity নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ বিষয়। এগুলোর মাধ্যমে ডেটা সঠিকভাবে সংরক্ষণ এবং প্রক্রিয়া করা নিশ্চিত হয়। যদিও ArangoDB একটি NoSQL ডাটাবেস এবং relational database এর মতো strict constraints প্রদান করে না, তবে কিছু বৈশিষ্ট্য এবং কৌশল রয়েছে যা ডেটার সঠিকতা বজায় রাখতে সাহায্য করতে পারে।


Column Validation

ArangoDB তে Column Validation মূলত Collection Schema এর মাধ্যমে করা হয়, যা ডেটাবেসের জন্য একটি ডিফাইন করা কাঠামো (structure) তৈরি করে। আপনি কনফিগার করতে পারেন কী ধরণের ডেটা একটি collection এর মধ্যে থাকতে পারবে। এর মাধ্যমে আপনি প্রকারভেদ, মানের সীমা এবং অন্যান্য গুরুত্বপূর্ণ শর্তাবলী চেক করতে পারেন।

ArangoDB তে validation ব্যবহার করার জন্য Foxx framework বা AQL (ArangoDB Query Language) ব্যবহার করা যেতে পারে।


Column Validation Setup

ArangoDB তে column validation করতে হলে আপনাকে Collection Schema সেটআপ করতে হবে:

  1. Schema Definition: Collection Schema তৈরির সময় আপনি ডেটার ধরন এবং বৈশিষ্ট্য নির্ধারণ করতে পারেন।
const db = require('@arangodb').db;
const collection = db._create('example_collection', {
  schema: {
    rule: {
      type: 'object',
      properties: {
        name: { type: 'string' },
        age: { type: 'integer', minimum: 18 },
        email: { type: 'string', format: 'email' }
      },
      required: [ 'name', 'age', 'email' ],
      additionalProperties: false
    }
  }
});

এখানে:

  • name: string ধরনের কলাম।
  • age: integer ধরনের কলাম, যার মান ১৮ বা তার বেশি হতে হবে।
  • email: string ধরনের কলাম যা অবশ্যই একটি বৈধ ইমেল হতে হবে।
  1. Data Validation: এখানে required এবং additionalProperties ব্যবহার করা হয়েছে যা ডেটার সঠিকতা এবং নির্দিষ্ট কাঠামো অনুসরণ করার নিশ্চয়তা দেয়।

Data Integrity Enforcements

ArangoDB তে Data Integrity মূলত ডেটার সঠিকতা, পূর্ণতা এবং সর্বোচ্চ নির্ভরযোগ্যতা নিশ্চিত করার জন্য কিছু সিস্টেম ইনপুট এবং কাস্টম লজিক ব্যবহার করে। ArangoDB নিজে কোনো সশক্ত Foreign Key বা Primary Key কনস্ট্রেইন্ট প্রদান না করলেও, Foxx Services বা AQL এর মাধ্যমে কিছু নির্দিষ্ট কাস্টম যাচাই (validation) এবং অটোমেটেড ইন্টিগ্রিটি চেকিং করা যায়।


Data Integrity With AQL
  1. Referential Integrity: ArangoDB তে আপনি একটি document এর মধ্যে সম্পর্কযুক্ত ডেটা সংরক্ষণ করার জন্য AQL-এ JOIN এর মতো অপারেশন ব্যবহার করতে পারেন। এটি একটি সম্পর্কের ডেটা ধরে রাখতে সহায়ক।

    উদাহরণস্বরূপ, আপনি একটি User এবং Order ডকুমেন্টের মধ্যে রেফারেন্স তৈরি করতে পারেন, যেখানে Order ডকুমেন্টে user_id থাকবে।

    FOR user IN users
      FOR order IN orders
        FILTER order.user_id == user._id
        RETURN { user: user.name, order: order.total }
    

    এই কুয়েরির মাধ্যমে users এবং orders টেবিলের মধ্যে সম্পর্ক খোঁজা হয়, এবং নিশ্চিত করা হয় যে সঠিকভাবে রেফারেন্স করা হচ্ছে।

  2. Custom Validation: যদি আপনাকে অতিরিক্ত integrity constraints প্রয়োগ করতে হয়, তবে Foxx services ব্যবহার করে কাস্টম ভ্যালিডেশন যুক্ত করা যেতে পারে। উদাহরণস্বরূপ, আপনি যদি চান যে কোনো "user" ডকুমেন্ট তৈরি হওয়ার আগে এটি পরীক্ষা করে দেখবে যে তার উপর নির্ভরশীল কোনো সম্পর্ক ডকুমেন্টের সাথে ইন্টিগ্রিটি বজায় রয়েছে কিনা।
const db = require('@arangodb').db;
const users = db._collection('users');

function createUser(user) {
  // Check if a user already exists with the same email
  const existingUser = users.firstExample({ email: user.email });
  if (existingUser) {
    throw new Error('User with this email already exists');
  }

  // If validation passes, insert user
  users.save(user);
}

এই কোডটি একটি কাস্টম ফাংশন তৈরি করেছে যা নিশ্চিত করে যে একে অপরের সাথে সম্পর্কিত ডেটা ঠিকঠাক আছে।


Best Practices for Data Integrity in ArangoDB

  1. Use Consistent Naming Conventions: সঠিক এবং স্বীকৃত নামকরণ নিয়ম মেনে চলা ডেটার নির্ভরযোগ্যতা বজায় রাখতে সহায়তা করে।
  2. Indexing: ArangoDB তে দ্রুত অনুসন্ধান নিশ্চিত করতে ইন্ডেক্স তৈরি করা খুবই গুরুত্বপূর্ণ।

    উদাহরণস্বরূপ:

    db.users.ensureIndex({ type: 'hash', fields: ['email'], unique: true });
    
  3. Backup and Recovery: সঠিকভাবে Backup এবং Recovery পদ্ধতি নিশ্চিত করুন। ArangoDB-এর snapshot ফিচারটি ব্যাবহার করে ডেটার নিরাপত্তা নিশ্চিত করতে পারেন।
  4. Use of Transactions: ArangoDB তে Transactions ব্যবহার করে আপনি একাধিক ডকুমেন্ট বা কলেকশনের সাথে কাজ করতে পারেন যা ডেটা ইন্টিগ্রিটি বজায় রাখে।

    উদাহরণ:

    const db = require('@arangodb').db;
    const trx = db.transaction();
    
    trx.step(() => {
      // Insert into first collection
      db._collection('orders').save(orderData);
    });
    
    trx.step(() => {
      // Insert into second collection
      db._collection('payments').save(paymentData);
    });
    
    trx.commit();
    

সারাংশ

ArangoDB তে Column Validation এবং Data Integrity বজায় রাখতে Schema Validation এবং Custom Integrity Checks ব্যবহার করা হয়। আপনি Foxx বা AQL এর মাধ্যমে কাস্টম ডেটা যাচাই ব্যবস্থা তৈরি করতে পারেন এবং transactions এর মাধ্যমে ডেটার সঠিকতা নিশ্চিত করতে পারেন। এই ব্যবস্থা ডেটার সুরক্ষা এবং নির্ভরযোগ্যতা বৃদ্ধি করে, যা একটি সুশৃঙ্খল ডেটাবেস পরিবেশে গুরুত্বপূর্ণ।

Content added By

Validators এর মাধ্যমে Custom Rules প্রয়োগ করা

319

Laravel এ validators ব্যবহার করা হয় ব্যবহারকারীর ইনপুট ভ্যালিডেশন নিশ্চিত করার জন্য। কখনো কখনো আপনাকে কাস্টম ভ্যালিডেশন রুলস তৈরি করতে হতে পারে, যা Laravel এর ডিফল্ট ভ্যালিডেশন রুলস থেকে ভিন্ন। Laravel এ কাস্টম ভ্যালিডেশন রুল তৈরি করতে Validator ক্লাস বা কাস্টম রুল ক্লাস ব্যবহার করা যেতে পারে। এখানে দেখানো হবে কীভাবে কাস্টম ভ্যালিডেশন রুল তৈরি এবং প্রয়োগ করা যায়।


কাস্টম ভ্যালিডেশন রুল তৈরি করার পদ্ধতি

১. কাস্টম ভ্যালিডেশন রুল ক্লাস তৈরি করা

Laravel এ কাস্টম ভ্যালিডেশন রুল তৈরি করার জন্য একটি নতুন রুল ক্লাস তৈরি করা যায়। এই ক্লাসে passes() এবং message() মেথড দুটি থাকতে হবে। passes() মেথডটি যাচাই করবে যে ইনপুটটি বৈধ কিনা এবং message() মেথডটি যখন ভ্যালিডেশন ব্যর্থ হয়, তখন ব্যবহারকারীকে কী বার্তা দেখানো হবে তা নির্ধারণ করবে।

উদাহরণ:
php artisan make:rule Uppercase

এটি app/Rules/Uppercase.php ফাইলটি তৈরি করবে। এখন, এই ফাইলের মধ্যে কাস্টম রুল কোড যোগ করা যাবে:

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Uppercase implements Rule
{
    /**
     * প্রাপ্ত ইনপুটটি বৈধ কিনা তা চেক করুন।
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // চেক করুন যে ইনপুটটি uppercase কিনা
        return strtoupper($value) === $value;
    }

    /**
     * যদি ভ্যালিডেশন ব্যর্থ হয়, তবে প্রদর্শনযোগ্য বার্তা।
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be uppercase.';
    }
}

এই কোডে, passes() মেথডে চেক করা হচ্ছে যে ইনপুটটি সম্পূর্ণ uppercase কি না। যদি না হয়, তাহলে message() মেথডটি ব্যবহারকারীকে একটা সঠিক বার্তা পাঠাবে।


২. কাস্টম রুল ব্যবহার করা

এখন, কাস্টম রুলটি ব্যবহার করা যেতে পারে ফর্ম ভ্যালিডেশনের মধ্যে। উদাহরণস্বরূপ, যদি আপনি নিশ্চিত করতে চান যে একটি ফিল্ডের মান uppercase, তাহলে আপনি কাস্টম রুলটি ভ্যালিডেশনে ব্যবহার করবেন।

use App\Rules\Uppercase;

$request->validate([
    'name' => ['required', new Uppercase],
]);

এখানে name ফিল্ডের জন্য কাস্টম Uppercase রুল প্রয়োগ করা হয়েছে।


৩. কাস্টম রুল এর জন্য অ্যারে সিনট্যাক্স ব্যবহার করা

Laravel তে একাধিক কাস্টম রুল একত্রে ব্যবহার করা সম্ভব। আপনি যদি একাধিক রুল ব্যবহার করতে চান, তবে এগুলো একটি অ্যারেতে সংজ্ঞায়িত করতে পারেন:

use App\Rules\Uppercase;

$request->validate([
    'name' => ['required', 'string', new Uppercase],
]);

এখানে name ফিল্ডের জন্য required, string, এবং Uppercase কাস্টম রুল একত্রে প্রয়োগ করা হয়েছে।


কাস্টম মেসেজ কাস্টমাইজ করা

Laravel এর ডিফল্ট ভ্যালিডেশন মেসেজ পরিবর্তন করার জন্য, আপনি lang ফোল্ডারে ভ্যালিডেশন মেসেজ কাস্টমাইজ করতে পারেন। resources/lang/en/validation.php ফাইলটি খুলুন এবং সেখানে আপনার কাস্টম মেসেজ যুক্ত করুন।

return [
    'custom' => [
        'name' => [
            'uppercase' => 'The name field must be all uppercase letters.',
        ],
    ],
];

এটি আপনার কাস্টম ভ্যালিডেশন রুলের বার্তা কাস্টমাইজ করতে সহায়তা করবে।


কাস্টম রুল ব্যবহার করে অন্যান্য উদাহরণ

১. ইমেইল ডোমেইন ভ্যালিডেশন:

ধরা যাক, আপনি চান যে ব্যবহারকারীর ইমেইল ঠিকানায় একটি নির্দিষ্ট ডোমেইন থাকতে হবে, যেমন @example.com:

php artisan make:rule EmailDomain
namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class EmailDomain implements Rule
{
    public function passes($attribute, $value)
    {
        return str_ends_with($value, '@example.com');
    }

    public function message()
    {
        return 'The :attribute must be a valid email address with @example.com domain.';
    }
}

এখন এই রুল ব্যবহার করুন:

use App\Rules\EmailDomain;

$request->validate([
    'email' => ['required', 'email', new EmailDomain],
]);

সারাংশ

Laravel এ কাস্টম ভ্যালিডেশন রুল তৈরি এবং প্রয়োগ করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনে নির্দিষ্ট চাহিদা অনুসারে ইনপুট ভ্যালিডেশন পরিচালনা করতে পারেন। কাস্টম রুলের মাধ্যমে আপনি যেকোনো ধরনের জটিল লজিক প্রয়োগ করতে পারেন যা ডিফল্ট ভ্যালিডেশন রুলগুলো দিয়ে করা সম্ভব নয়।

Content added By

Data Type এবং Validation Best Practices

237

ডেটাবেস ডিজাইন করার সময় সঠিক ডেটা টাইপ নির্বাচন এবং ডেটা ভ্যালিডেশন অত্যন্ত গুরুত্বপূর্ণ। সঠিক ডেটা টাইপ নির্বাচন করার মাধ্যমে আমরা পারফরম্যান্স উন্নত করতে পারি এবং ডেটার সঠিকতা নিশ্চিত করতে পারি। নিচে ডেটা টাইপ এবং ভ্যালিডেশন এর কিছু গুরুত্বপূর্ণ সেরা প্র্যাকটিস তুলে ধরা হলো।


Data Type নির্বাচন:

  1. সঠিক ডেটা টাইপ নির্বাচন করা:
    • ডেটা টাইপের সঠিক নির্বাচন কর্মক্ষমতা এবং ডেটার সঠিকতা নিশ্চিত করতে সহায়ক। যেমন, VARCHAR টাইপের পরিবর্তে CHAR টাইপ ব্যবহার করা, যদি জানা যায় যে একটি নির্দিষ্ট কলামে সর্বদা একই দৈর্ঘ্যের স্ট্রিং থাকবে।
    • এবং যখন প্রয়োজন হয়:
      • যদি সংখ্যা বড় হতে পারে তবে BIGINT ব্যবহার করুন, ছোট সংখ্যা জন্য INT বা SMALLINT ব্যবহার করুন।
      • DateTime বা Timestamp এর ক্ষেত্রে, শুধুমাত্র সঠিক সময় এবং তারিখের জন্য যথাযথ ডেটা টাইপ নির্বাচন করুন, যেমন DATETIME বা DATE
  2. ডেটা টাইপের আকার ঠিক রাখা:
    • যখনই সম্ভব, সঠিক আকারের জন্য টাইপ নির্বাচন করুন। যেমন, যখন একটি কলামে শুধুমাত্র ২ ডিজিটের সংখ্যা থাকবে, তখন TINYINT ব্যবহার করতে পারেন, INT না।
  3. Boolean ডেটা জন্য BOOLEAN ব্যবহার করা:
    • যদি কোন কলাম শুধুমাত্র True বা False মান ধারণ করে, তাহলে BOOLEAN টাইপ ব্যবহার করা উচিত। এটি স্টোরেজ এবং পারফরম্যান্সের জন্য ভালো।
  4. Floating Point Numbers এর জন্য নির্দিষ্ট সঠিক প্রিসিশন নির্বাচন:
    • যখন ফ্লোটিং পয়েন্ট সংখ্যা যেমন মূল্য বা হিসাবের জন্য ব্যবহার করা হয়, তখন DECIMAL বা NUMERIC টাইপ ব্যবহার করা উচিত, FLOAT টাইপ এর পরিবর্তে। কারণ DECIMAL সঠিক নির্ভুলতা সরবরাহ করে।

Data Validation Best Practices:

  1. প্রাথমিক তথ্য যাচাই:
    • সঠিক রেঞ্জ এবং ফরম্যাট এর জন্য ইনপুট যাচাই করা অত্যন্ত গুরুত্বপূর্ণ। উদাহরণস্বরূপ:
      • email এর ক্ষেত্রে ইমেইল ফরম্যাটটি নিশ্চিত করতে একটি নিয়ম (যেমন, ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$) ব্যবহার করুন।
      • phone number যাচাই করার জন্য কাস্টম নিয়ম প্রয়োগ করা, যেমন: +8801xxxxxxxxx বা নির্দিষ্ট সংখ্যার দৈর্ঘ্য।
  2. Null Values Validation:
    • ডেটাবেসে যদি কোন কলাম NULL গ্রহণ করতে পারে, তবে এটি নিশ্চিত করুন যে শুধুমাত্র যখন অপরিহার্য নয় তখনই NULL মান গ্রহণ করবে। অন্যথায়, এটি ডেটার পূর্ণতা এবং সঠিকতা ক্ষতিগ্রস্ত করতে পারে।
  3. ডেটা রেঞ্জ চেক করা:
    • এন্ট্রি ভ্যালিডেশন প্রক্রিয়া হওয়া উচিত, যেন ইনপুট ফিল্ডের মান নির্ধারিত রেঞ্জ এর মধ্যে থাকে। যেমন, age ফিল্ডে 0 থেকে 120 এর মধ্যে মান থাকতে হবে।
  4. ডেটার ফরম্যাট যাচাই:
    • যে ডেটা একটি নির্দিষ্ট ফরম্যাটে আসবে তা নিশ্চিত করুন। যেমন, ডেটা টাইপ যদি YYYY-MM-DD হয়, তবে তা নিশ্চিত করার জন্য একটি ফরম্যাট যাচাই যোগ করুন।
  5. Regular Expression (Regex) ব্যবহার:
    • ইনপুট ভ্যালিডেশন এবং সঠিক ডেটা ফরম্যাট নিশ্চিত করার জন্য Regex (Regular Expressions) ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, একটি ফোন নাম্বার বা ইমেইল ঠিকানা যাচাই করতে রেগুলার এক্সপ্রেশন ব্যবহার করা।
  6. Unique Constraints প্রয়োগ করা:
    • কিছু ফিল্ডে যেমন username, email বা user_id, এটির ইউনিক (অদ্বিতীয়) হওয়া উচিত। এই ক্ষেত্রে UNIQUE constraint ব্যবহার করা উচিত।
  7. Foreign Key Constraints:
    • যেখানে সম্পর্কিত ডেটা থাকতে পারে, সেখানে Foreign Key Constraints প্রয়োগ করে সম্পর্ক বজায় রাখুন, যাতে অনুপস্থিত বা ভুল ডেটা সন্নিবেশিত না হয়।
  8. Constraint Check:
    • CHECK কন্ডিশন ব্যবহার করুন যে একটি কলাম শুধুমাত্র একটি নির্দিষ্ট মানের মধ্যে থাকতে পারে। যেমন, CHECK (age >= 18) দিয়ে নিশ্চিত করতে পারেন যে age ১৮ এর কম নয়।

সারাংশ

সঠিক ডেটা টাইপ নির্বাচন এবং ভ্যালিডেশন নিশ্চিত করার মাধ্যমে ডেটাবেসে ডেটার গুণগত মান এবং কার্যকারিতা বৃদ্ধি পায়। ডেটা টাইপের আকার, ফরম্যাট এবং রেঞ্জ সঠিকভাবে নির্বাচন করার মাধ্যমে মেমরি ব্যবহারের দক্ষতা বৃদ্ধি পায় এবং ডেটার সঠিকতা নিশ্চিত হয়। ডেটা ভ্যালিডেশন সঠিকভাবে প্রয়োগ করলে ডেটার গুণগত মান বজায় থাকে এবং ভুল ইনপুট থেকে সিস্টেম রক্ষা পায়।

Content added By
Promotion

Are you sure to start over?

Loading...