აირჩიეთ უმცირესი ტიპი, რომელიც კორექტულად იტევს ყველა მნიშვნელობას, რომელსაც ოდესმე შეინახავთ. სწორი ტიპი ზოგავს დისკს, ამცირებს index-ებს და თავიდან აცილებს მონაცემთა ჩუმ დაზიანებას.
აირჩიეთ უმცირესი ტიპი, რომელიც კორექტულად იტევს ყველა მნიშვნელობას, რომელსაც ოდესმე შეინახავთ. სწორი ტიპი ზოგავს დისკს, ამცირებს index-ებს და თავიდან აცილებს მონაცემთა ჩუმ დაზიანებას.
INT (4 ბაიტი) უმეტესი id-ებისთვის; BIGINT (8 ბაიტი) მხოლოდ მაშინ, როცა ნამდვილად გადააჭარბებთ ~2.1 მილიარდს.DECIMAL(10,2) ფულისთვის — არასდროს FLOAT/DOUBLE, რომლებიც ბინარულად ამრგვალებენ და კარგავენ ცენტებს.VARCHAR(n) შემოსაზღვრული ტექსტისთვის (სახელები, ელფოსტა); n არის ზედა ზღვარი, საცავი მხოლოდ იმას იკავებს, რასაც იყენებთ.TEXT დიდი blob-ებისთვის (სტატიები) — ინახება off-page და არ შეიძლება ჰქონდეს default; ნუ გამოიყენებთ მას მოკლე მნიშვნელობებისთვის, რომლებზეც ფილტრავთ.DATETIME (timezone-ის გარეშე, 8 ბაიტი) vs TIMESTAMP (UTC-ში კონვერტირებული, 4 ბაიტი, ~2038 ლიმიტი).CREATE TABLE payments (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
amount DECIMAL(10,2) NOT NULL, -- ზუსტი ფული, არა FLOAT
currency CHAR(3) NOT NULL, -- ყოველთვის 3 სიმბოლო -> ფიქსირებული CHAR
note VARCHAR(255), -- შემოსაზღვრული, index-ებადი
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
-- ხაფანგი: ნაგულისხმევი SQL mode უარყოფს ცუდ მნიშვნელობებს (კარგია) --
INSERT INTO payments (amount) VALUES ('abc'); -- ERROR 1366, არა ჩუმად 0
FLOAT-ის გამოყენება ფულისთვის.VARCHAR(255) ყველგან ჩვევის გამო — ზედმეტად დიდი key-ები ბერავს index-ებს.UNSIGNED-ის დავიწყება id-ებზე/მთვლელებზე, რომლებიც არასდროსაა უარყოფითი (აორმაგებს დადებით დიაპაზონს).მონაცემთა ტიპები არის ყველაზე იაფი კორექტულობისა და წარმადობის გადაწყვეტილება, რომელსაც იღებთ და ყველაზე რთული შესაცვლელი მოგვიანებით — ვიწრო, ზუსტი ტიპები ინახავს index-ებს პატარას და აჩერებს ცუდ მონაცემებს კარებთანვე, სანამ ისინი production bug-ად იქცევა.
IT გასაუბრების კითხვების ბიბლიოთეკა დეტალური პასუხებით — Junior-დან Senior-მდე.
შემოწირულობა