Θα απαντήσω πρώτα στην τελευταία ερώτηση. Μπορείς να πάρεις το σχήμα της βάσης σε script αλλά μην περιμένεις να τρέξει σε MySQL χωρίς τροποποιήσεις. Καμμία βάση δεν έχει την ίδια διάλεκτο της SQL με μια άλλη, ενώ η διάλεκτος που χρησιμοποιεί η MySQL έχει και αρκετές ιδιομορφίες, καθώς δεν υποστηρίζουν όλες οι εκδόσεις της Foreign Keys και Constraints. Σχεδόν σίγουρα θα διαφέρουν οι εντολές CREATE DATABASE, οι τύπου που χρησιμοποιούν οι δύο βάσεις και οι εντολές που χρησιμοποιεί η T-SQL για να ελέγξει αν υπάρχει ήδη κάποιος πίνακας. Το καλύτερο θα ήταν να φτιάξεις τα scripts και μετά να σβήσεις τις εντολές εκτός από CREATE TABLE, ALTER TABLE (μέσω αυτής δημιουργούνται τα relations, constraints), CREATE INDEX.
Για να δημιουργήσεις το script ενός αντικειμένου στον SQL Server κάνεις δεξί κλικ επάνω του από τον Enterprise Manager και επιλέγεις "Generate Script" (ή κάτι τέτοιο, έχω SQL Server 2005 και διαφέρει από τον 2000 σε αυτό).
Τώρα για τις άλλες ερωτήσεις: Πρώτα η εύκολη. Προσθέτωντας relations δεν κερδίζεις σε ταχύτητα. Γλυτώνεις όμως μεγάλους μπελάδες καθώς τα relations δεν επιτρέπουν να μπουν τιμές σε ένα πεδίο που δεν υπάρχουν και στον parent πίνακα. Π.χ. αν έχεις ένα πίνακα με παραγγελίες Orders και ένα πίνακα με προμηθευτές Suppliers και ορίσεις ένα foreign key από το πεδίο SupplierID του Orders στο SupplierID του Suppliers, δεν μπορείς να βάλεις στον πίνακα Orders μια τιμή SupplierID η οποία δεν υπάρχει και στον πίνακα Suppliers. Διαφορετικά θα ήσουν υποχρεωμένος να κάνεις τον έλεγχο εσύ ο ίδιος.
Άσε που αν πας να καταλάβεις το σχήμα μιας βάσης χωρίς relations έχεις χάσει από χέρι.
Τέλος, indexes μπορείς να δημιουργήσεις με διάφορους τρόπους. Μπορείς να το κάνεις με γραφικό τρόπο από τα properties ενός πίνακα στον Enterprise Manager ή από το διάγραμμα της βάσης, ή χρησιμοποιώντας την εντολή CREATE INDEX. Το πως να σχεδιάσεις τα σωστά indexes υπάρχει στο κεφάλαιο Indexes του Books Online ενώ στο Creating an Index περιγράφει πως να τα δημιουργήσεις είτε μέσω Enterprise Manager είτε με SQL εντολές.
Πρόσεχε μόνο να ορίσεις τα indexes που χρειάζεσαι και όχι περισσότερα. Indexes χρειάζονται στα πεδία που χρησιμοποιείς για αναζητήσεις και στα πεδία που χρησιμοποιείς για να συνδέσεις δύο πίνακες σε ένα join. Ένας τρόπος να βρεις τα σωστά indexes είναι να γράψεις τα query που θέλεις να τρέξουν πιο γρήγορα στον Query Analyzer, να τα επιλέξεις και μετά να εκτελέσεις τον Index Tuning Advisor. Αυτό το εργαλειάκι εντοπίζει ποιά indexes θα βοηθούσαν την γρηγορότερη εκτέλεση των queries, σου τα προτείνει και αν θέλεις, τα δημιουργεί κιόλας.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos