Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Δεν εχω ξεκαθαρισει τα primary key και τα foreign key.

Βασικά έχω καταλάβει ότι primary key βαζουμε όταν είναι κατι μοναδικο...όπως ένας κωδικος.

Foreign key ποτε βαζουμε?Όταν αυτόν τον κωδικο τον συνδεουμε σε έναν δευτερο πινακα?

Πχ εχουμε έναν πινακα με εναν μαθητη (κωδικος,ονομα,επιθετο) που του αντιστοιχει ενας μοναδικος κωδικος και έναν άλλο πινακα με τα μαθηματα (κωδικος,ονομα_μαθηματος και τους βαθμούς μεσα) ξερω γω.

Τον κωδικο στον πρωτο πινακα τον βαζουμε ως primary ενώ στον δεύτερο ως foreign?

 

Επισης κατι άλλο...εστω το παρακατω:

column_name int primary key NOT NULL identity(1,2)

Είναι ένα μοναδικο κλειδι που δεν είναι null, ωραια...το identity (1,2) τι σημαίνει?

 

 

Ευχαριστώ πολύ!

Δημοσ.

Θα έλεγα ότι τo foreign key είναι σ'ενα πίνακα είναι μια αναφορά σε ένα πρωτεύον κλειδί άλλου πίνακα

Το παρακάτω ερώτημα κάνει join(σύνδεση) μεταξύ των πινάκων που ανέφερες

 

Select S.Kodikos,S.Onoma,S.Epitheto,M.Mathima,V,Vathmos From Students S,Mathimata M,Vathmoi V Where

S.Kodikos=V.Kodikos AND M.KodikosMathimatos=V.KodikosMathimatos

 

Πίνακας Student : Kodikos πρωτεύον κλειδί

Πίνακας Vathmoi : Kodikos δευτερεύον  κλειδί που αναφέρεται στο Student.Kodikos ,KodikosMathimatos δευτερεύον  κλειδί που αναφέρεται στο Mathimata.KodikosMathimatos

Πίνακας Mathimata : KodikosMathimatos πρωτεύον κλειδί

Δημοσ.

Αχα το επιασα τωρα καπως!

Σε ευχαριστω για την γρηγορα απαντηση σου!!

 

Το identity που ειπα παραπανω (identity(1,2)) τι σημαινει?

 

Επισης και κατι ακομα :P

Το constraint τι ακριβως κάνει?

Το έχω δει και σε 'alter table pinakas drop constraint (pinakas)' αλλά και σε φαση μονο του

 constraint foreignkey1 pinakas1 primary key mathima references pinakas2 (kodikosm)

 

Αυτα.

Σας ευχαριστω πολυ και καλο βραδυ!!!

Δημοσ.

Το identity είναι η έκφραση του MSSQL για να δηλώσεις ότι το πεδίο θα είναι auto increment. Με άλλα λόγια, όταν θα εισάγεις μία νέα γραμμή στον πίνακα, το πεδίο θα πάρει από μόνο του τιμή.

Οι παράμετροι (1,2) σημαίνουν ότι οι τιμές θα ξεκινούν από το 1 και θα αυξάνονται κάθε φορά κατά 2. Δηλαδή, η πρώτη γραμμή που θα εισάγεις θα έχει column_name=1, η δεύτερη column_name=3 κ.ο.κ.

 

Το constraint είναι ένας περιορισμός. Περιορίζει την εισαγωγή δεδομένων για μία στήλη σε ένα συγκεκριμένο υποσύνολο.

Επειδή νομίζω ότι αναφέρεσαι σε foreign key constraints, κάποτε είχα απαντήσει σε μια σχετική ερώτηση. Μπορεί να σε βοηθήσει.

Δημοσ.
  Στις 26/3/2014 στις 8:05 ΜΜ, steliosss94 είπε

 

Πχ εχουμε έναν πινακα με εναν μαθητη (κωδικος,ονομα,επιθετο) που του αντιστοιχει ενας μοναδικος κωδικος και έναν άλλο πινακα με τα μαθηματα (κωδικος,ονομα_μαθηματος και τους βαθμούς μεσα) ξερω γω.

Τον κωδικο στον πρωτο πινακα τον βαζουμε ως primary ενώ στον δεύτερο ως foreign?

 

Ευχαριστώ πολύ!

 

 

H σωστή ερώτηση που πρέπει να κάνεις είναι πως θα συνδέσεις τους δύο πίνακες εφόσον η σχέση είναι πολλά προς πολλά. 

 

Δηλαδή ένας μαθητής μπορεί να παρακολουθεί πολλά μαθήματα αλλά το ίδιο μάθημα μπορούν να το παρακολουθούν πολλοί μαθητές. Πως θα το λύσεις το πρόβλημα ? πως θα συνδέσεις του δύο πίνακες ?

Δημοσ.
  Στις 27/3/2014 στις 9:22 ΠΜ, Aztec είπε

H σωστή ερώτηση που πρέπει να κάνεις είναι πως θα συνδέσεις τους δύο πίνακες εφόσον η σχέση είναι πολλά προς πολλά. 

 

Δηλαδή ένας μαθητής μπορεί να παρακολουθεί πολλά μαθήματα αλλά το ίδιο μάθημα μπορούν να το παρακολουθούν πολλοί μαθητές. Πως θα το λύσεις το πρόβλημα ? πως θα συνδέσεις του δύο πίνακες ?

 

Δεν ξερω...

Εχω μπερδευτεί απιστευτα με αυτά...

 

Αν μπορεί κάποιος να με βοηθήσει...

 

Ποια η διαφορα να συσχετίσουμε ένα προς πολλα και ποια η διαφορα πολλα προς πολλα?

Στην πρωτη φτιαχνουμε έναν νέο πινακα με ένα ξενο κλειδι ενώ στην δευτερη έναν νέο πινακα με δυο ξενα κλειδιά?

Δε ξερω...

 

Αν και κατι μου λεει ότι είναι αυτό που εκανε ο zynif...

Δημοσ.
  Στις 28/3/2014 στις 5:22 ΜΜ, steliosss94 είπε

Ποια η διαφορα να συσχετίσουμε ένα προς πολλα και ποια η διαφορα πολλα προς πολλα?

Στην πρωτη φτιαχνουμε έναν νέο πινακα με ένα ξενο κλειδι ενώ στην δευτερη έναν νέο πινακα με δυο ξενα κλειδιά?

Δε ξερω...

 

Παράδειγμα 1ο: Παιδιά και πατέρας

Ένα παιδί μπορεί να έχει μόνο 1 πατέρα.

Ένας πατέρας μπορεί να έχει Ν παιδιά.

Σχέση 1:Ν. Για την υλοποίηση στο σχήμα, ο πίνακας με την πληθικότητα Ν απορροφά τη συσχέτιση ως ένα έξτρα πεδίο (FK στον πίνακα που δείχνει η πληθικότητα 1).

 

Παράδειγμα 2ο: Άτομο και δεξιότητες

Ένα άτομο μπορεί να έχει Μ δεξιότητες.

Μία δεξιότητα μπορεί να την έχουν Ν άτομα.

Σχέση Μ:Ν. Υλοποιείται με ξεχωριστό πίνακα, όπου υπάρχει ένα πεδίο (FK) για κάθε πίνακα της συσχέτισης.

 

Πρόσεξε ότι, για να αποφασίσουμε το είδος της συσχέτισης, οι προτάσεις ξεκινούν πάντα από τη λέξη ένας/μία/ένα.

 

  Στις 28/3/2014 στις 5:22 ΜΜ, steliosss94 είπε

Αν και κατι μου λεει ότι είναι αυτό που εκανε ο zynif...

Ναι είναι. Αν προσθέσεις και το (Kodikos,KodikosMathimatos) σαν κύριο κλειδί του Vathmoi (δεν βλέπω σε πρώτη φάση γιατί όχι).

  • Like 1
Δημοσ.
  Στις 28/3/2014 στις 5:49 ΜΜ, geomagas είπε

Παράδειγμα 1ο: Παιδιά και πατέρας

Ένα παιδί μπορεί να έχει μόνο 1 πατέρα.

Ένας πατέρας μπορεί να έχει Ν παιδιά.

Σχέση 1:Ν. Για την υλοποίηση στο σχήμα, ο πίνακας με την πληθικότητα Ν απορροφά τη συσχέτιση ως ένα έξτρα πεδίο (FK στον πίνακα που δείχνει η πληθικότητα 1).

 

Παράδειγμα 2ο: Άτομο και δεξιότητες

Ένα άτομο μπορεί να έχει Μ δεξιότητες.

Μία δεξιότητα μπορεί να την έχουν Ν άτομα.

Σχέση Μ:Ν. Υλοποιείται με ξεχωριστό πίνακα, όπου υπάρχει ένα πεδίο (FK) για κάθε πίνακα της συσχέτισης.

 

Πρόσεξε ότι, για να αποφασίσουμε το είδος της συσχέτισης, οι προτάσεις ξεκινούν πάντα από τη λέξη ένας/μία/ένα.

 

Ναι είναι. Αν προσθέσεις και το (Kodikos,KodikosMathimatos) σαν κύριο κλειδί του Vathmoi (δεν βλέπω σε πρώτη φάση γιατί όχι).

 

Σε ευχαριστω πολυ!!!Πολυ επεξηγηματικος!!

Το πιανω σιγα σιγα

 

Το μονο που δεν καταλαβα ειναι η λεξη ''απορροφα'', στο πρωτο παράδειγμα

Με την εννοια οτι θα μπει στον πινακα παιδι ενα εξτρα πεδιο που θα ειναι το Foreign key του πατερα?

 

Επισης πως δηλωνουμε το Foreign key?

kodikos_patera Foreign key references patera(kodikos_patera)?

Εχω δει να το κανουν με constraint on delete cascade....

Αυτο σημαινει οτι αμα διαγραφει το primary key στον πινακα να μην επηρεασει το Foreign key στον αλλο πινακα?

Δημοσ.
  Στις 30/3/2014 στις 12:41 ΜΜ, steliosss94 είπε

Το μονο που δεν καταλαβα ειναι η λεξη ''απορροφα'', στο πρωτο παράδειγμα

Με την εννοια οτι θα μπει στον πινακα παιδι ενα εξτρα πεδιο που θα ειναι το Foreign key του πατερα?

Το τσάκωσες.

 

  Στις 30/3/2014 στις 12:41 ΜΜ, steliosss94 είπε

Επισης πως δηλωνουμε το Foreign key?

kodikos_patera Foreign key references patera(kodikos_patera)?

Ακριβώς.

Σημείωσε ότι, αν το kodikos_patera είναι το PK του άλλου πίνακα, μπορείς να το παραλείψεις, καθώς εννοείται.

 

  Στις 30/3/2014 στις 12:41 ΜΜ, steliosss94 είπε

Εχω δει να το κανουν με constraint on delete cascade....

Αυτο σημαινει οτι αμα διαγραφει το primary key στον πινακα να μην επηρεασει το Foreign key στον αλλο πινακα?

Τα on delete/on update είναι ιδιότητες του foreign key constraint και ορίζουν τι θα γίνει αν το target primary key διαγραφεί ή αλλάξει τιμή αντίστοιχα.

Η συγκεκριμένη έκφραση που αναφέρεις (on delete cascade) σημαίνει ότι, αν διαγραφεί το PK στον άλλο πίνακα, θέλουμε να διαγραφούν και όλες οι γραμμές του πίνακα που αναφερόταν σε αυτό.

Δημοσ.

Εδώ με μπερδεψες λιγο...

 

  Στις 30/3/2014 στις 1:09 ΜΜ, geomagas είπε

Σημείωσε ότι, αν το kodikos_patera είναι το PK του άλλου πίνακα, μπορείς να το παραλείψεις, καθώς εννοείται.

 

Εννοεις να παραλειψω το πρωτο ''kodikos_patera'' , οχι το δευτερο ετσι?

Edit:Μαλλον το δευτερο εννοεις τωρα που το βλεπω καλυτερα...αυτό που είναι σε παρενθεση...αλλα για ποιο λογο?

Και γιατι να το παραλειψω, δεν καταλαβα...

 

Μηπως μπορεις να μου πεις πως συντασσεται περιπου η Foreign key constraint μαζι με τον on delete cascade?

Δημοσ.
  Στις 30/3/2014 στις 1:30 ΜΜ, steliosss94 είπε

Εδώ με μπερδεψες λιγο...

 

 

Εννοεις να παραλειψω το πρωτο ''kodikos_patera'' , οχι το δευτερο ετσι?

Edit:Μαλλον το δευτερο εννοεις τωρα που το βλεπω καλυτερα...αυτό που είναι σε παρενθεση...αλλα για ποιο λογο?

Και γιατι να το παραλειψω, δεν καταλαβα...

 

Δεν πρότεινα να το παραλείψεις, απλά είπα ότι αν θέλεις, μπορείς.

 

Αν πεις:

... references patera(kodikos_patera)
...εννοείς "στο πεδίο kodikos_patera του πίνακα patera".

 

Αν πεις:

... references patera
...εννοείς "στο primary key του πίνακα patera".

Έμμεσα δηλαδή, αναφέροντας μόνο το όνομα του πίνακα, υπονοείς το PK του.

 

  Στις 30/3/2014 στις 1:30 ΜΜ, steliosss94 είπε

Μηπως μπορεις να μου πεις πως συντασσεται περιπου η Foreign key constraint μαζι με τον on delete cascade?

Τα on delete/on update ακολουθούν τον ορισμό του FK. Π.χ:

kodikos_patera int not null references patera on delete cascade on update cascade
  • Like 1
Δημοσ.
  Στις 30/3/2014 στις 2:05 ΜΜ, steliosss94 είπε

Μπορει ενας πινακας να εχει 2 pk?

Όχι.

Μπορεί όμως να έχει πολλά UNIQUE. ;)

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...