рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

SQL рдореЗрдВ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕: рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕рд╣рд┐рдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛

SQL рдореЗрдВ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рд╡реЗ рдирд┐рдпрдо рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓реНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдбреЗрдЯрд╛ рдХреА рд╢реБрджреНрдзрддрд╛, рд╕рдВрдЧрддрд┐ рдФрд░ рд╡реИрдзрддрд╛ рдмрдиреА рд░рд╣реЗ, рдЬреИрд╕реЗ рдХрд┐ рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдФрд░ рд╡реИрдз рдлреЙрд░реЗрди рдХреА рд╕рдВрдмрдВрдз рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ред
┬╖ 15 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

рдПрдХ рдЕрд╕реНрдкрддрд╛рд▓ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рдорд░реАрдЬреЛрдВ рдХреА рдПрд▓рд░реНрдЬреА рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЦрд╛рд▓реА рдирд╣реАрдВ рдЫреЛрдбрд╝реА рдЬрд╛ рд╕рдХрддреА, рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рддреНрддреАрдп рдкреНрд░рдгрд╛рд▓реА рдХреА рдЬрд╣рд╛рдБ рд▓реЗрди-рджреЗрди рдХреА рд░рд╛рд╢рд┐ рд╣рдореЗрд╢рд╛ рдзрдирд╛рддреНрдордХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдФрд░ рдЕрдирдЧрд┐рдирдд рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдЯреАрдХ, рд╕реБрд╕рдВрдЧрдд рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рддреЗ рд╣реИрдВред┬а

SQL рдореЗрдВ, рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рд╡реЗ рдирд┐рдпрдо рд╣реИрдВ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓реНрд╕ рдкрд░ рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо SQL рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╛рдЦреНрдпрд╛рдУрдВ рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдордЭреЗрдВрдЧреЗ, рддрд╛рдХрд┐ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рдо PostgreSQL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рдЕрдиреНрдп SQL рдбрд╛рдпрд▓реИрдХреНрдЯреНрд╕ рдкрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВред

рдпрджрд┐ рдЖрдк SQL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ SQL рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВред

SQL рдореЗрдВ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреНрдпрд╛ рд╣реИрдВ?

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреЗрдмрд▓ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИред рдХреБрдЫ рдбреЗрдЯрд╛, рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрдпреБ, рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рд╣реЗрддреБ рдкрд╛рд╕рд╡рд░реНрдб рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЗрдмрд▓ рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЙрд▓рдо рдкрд░ рдПрдХ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рдХрд┐ рдЗрд╕ рдЯреЗрдмрд▓ рдХреА рд╣рд░ рдПрдВрдЯреНрд░реА рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╣реЛред

рд╕рд╛рд░ рд░реВрдк рдореЗрдВ, рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдЗрди рдмрд╛рддреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ:

  • рдбреЗрдЯрд╛ рдХреЗ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ред
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдорд╛рди рд╕реАрдорд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗред
  • рд╡рд┐рднрд┐рдиреНрди рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдмреАрдЪ рдЙрдЪрд┐рдд рд▓рд┐рдВрдХ рдмрдирд╛рдП рд░рдЦрдирд╛ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо SQL рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ:

  • PRIMARY KEY: рдЯреЗрдмрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред
  • NOT NULL: рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓рдо рдореЗрдВ NULL рдорд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред
  • UNIQUE: рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЙрд▓рдо рдпрд╛ рдХреЙрд▓рдореЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рд╕рднреА рдорд╛рди рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдВред
  • DEFAULT: рдЬрдм рдХреЛрдИ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рддреЛ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  • CHECK: рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЙрд▓рдо рдХреЗ рд╕рднреА рдорд╛рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢рд░реНрдд рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВред
  • FOREIGN KEY: рдХрд┐рд╕реА рдЕрдиреНрдп рдЯреЗрдмрд▓ рдореЗрдВ рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдХреЗ рдЯреЗрдмрд▓реНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕реНрдЯрдбреА рдХреЗрд╕: рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА рдбреЗрдЯрд╛рдмреЗрд╕

рдЖрдЗрдП рдПрдХ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддреАрди рдЯреЗрдмрд▓реНрд╕ рд╣реИрдВ: students, courses, рдФрд░ enrollmentsред

Students рдЯреЗрдмрд▓

students рдЯреЗрдмрд▓ рдореЗрдВ рд╕рднреА рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдЫрд╛рддреНрд░реЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред

  • student_id: рдЫрд╛рддреНрд░ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
  • first_name: рдЫрд╛рддреНрд░ рдХрд╛ рдкрд╣рд▓рд╛ рдирд╛рдоред
  • last_name: рдЫрд╛рддреНрд░ рдХрд╛ рдЕрдВрддрд┐рдо рдирд╛рдоред
  • email: рдЫрд╛рддреНрд░ рдХрд╛ рдИрдореЗрд▓ рдкрддрд╛ред
  • major: рдЫрд╛рддреНрд░ рдХрд╛ рдкреНрд░рдореБрдЦ рд╡рд┐рд╖рдп (рдореЗрдЬрд░)ред
  • enrollment_year: рд╡рд╣ рд╡рд░реНрд╖ рдЬрд┐рд╕рдореЗрдВ рдЫрд╛рддреНрд░ рдиреЗ рдирд╛рдорд╛рдВрдХрди рдХрд┐рдпрд╛ред

Courses рдЯреЗрдмрд▓

courses рдЯреЗрдмрд▓ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред

  • course_id: рдХреЛрд░реНрд╕ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ред
  • course_name: рдХреЛрд░реНрд╕ рдХрд╛ рдирд╛рдоред
  • department: рдХреЛрд░реНрд╕ рдХрд╛ рд╡рд┐рднрд╛рдЧред

Enrollments рдЯреЗрдмрд▓

enrollments рдЯреЗрдмрд▓ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЫрд╛рддреНрд░ рдХрд┐рди рдХреЛрд░реНрд╕реЗрдЬ рдореЗрдВ рдирд╛рдорд╛рдВрдХрд┐рдд рд╣реИрдВред

  • student_id: рдХреЛрд░реНрд╕ рдореЗрдВ рдирд╛рдорд╛рдВрдХрд┐рдд рдЫрд╛рддреНрд░ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ред
  • course_id: рдХреЛрд░реНрд╕ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ред
  • year: рдирд╛рдорд╛рдВрдХрди рд╡рд░реНрд╖ред
  • grade: рдЗрд╕ рдХреЛрд░реНрд╕ рдореЗрдВ рдЫрд╛рддреНрд░ рдХрд╛ рдЧреНрд░реЗрдбред
  • is_passing_grade: рдПрдХ рдмреВрд▓рд┐рдпрди рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░реЗрдб рдкрд╛рд╕рд┐рдВрдЧ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдкреВрд░реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕реА рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рджрд┐рдЦрд╛рдПрдБрдЧреЗред рд╣рдо рдЕрдкрдиреА рдХреНрд╡реЗрд░реАрдЬрд╝ рдореЗрдВ PostgreSQL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рдЕрдиреНрдп SQL рдлреНрд▓реЗрд╡рд░реНрд╕ рдкрд░ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВред

PRIMARY KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ

рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдкреНрд░рддреНрдпреЗрдХ рдЫрд╛рддреНрд░ рдХреА рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдФрд░ рдЕрдВрддрд┐рдо рдирд╛рдо рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЬреИрд╕реЗ рдирд╛рдо рд╡рд╛рд▓реЗ рдЫрд╛рддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕реА рддрд░рд╣, рдИрдореЗрд▓ рдкрддреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдирд╛ рднреА рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЫрд╛рддреНрд░ рдЕрдкрдиреЗ рдИрдореЗрд▓ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреНрдпреЗрдХ рдЫрд╛рддреНрд░ рдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реМрдВрдкрдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо student_id рдХреЙрд▓рдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо student_id рдХреЙрд▓рдо рдкрд░ PRIMARY KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЫрд╛рддреНрд░ рдХрд╛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛред

рдпрд╣ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ CREATE TABLE рдХрдорд╛рдВрдб рдореЗрдВ, рдХреЙрд▓рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    first_name TEXT,
    last_name TEXT,
    email TEXT,
    major TEXT,
    enrollment_year INT
);

рдКрдкрд░ рджреА рдЧрдИ рдХреНрд╡реЗрд░реА рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдЫрд╣ рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде student рдЯреЗрдмрд▓ рдмрдирд╛рддреА рд╣реИред

PRIMARY KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐:

  1. рдкреНрд░рддреНрдпреЗрдХ рдЫрд╛рддреНрд░ рдХрд╛ рдПрдХ student_id рд╣реЛред
  2. рдкреНрд░рддреНрдпреЗрдХ student_id рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛред

рдХрдИ рдХреЙрд▓рдо рдкрд░ PRIMARY KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ

рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдХрдИ рдХреЙрд▓рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, enrollments рдЯреЗрдмрд▓ рдореЗрдВ рдПрдХ рдЫрд╛рддреНрд░ рдХрдИ рдХреЛрд░реНрд╕реЗрдЬ рдореЗрдВ рдирд╛рдорд╛рдВрдХрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рд╣реА student_id рд╡рд╛рд▓реА рдХрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рдПрдХ рдХреЛрд░реНрд╕ рдореЗрдВ рдХрдИ рдЫрд╛рддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рд╣реА course_id рд╡рд╛рд▓реА рдХрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдмрди рд╕рдХрддреА рд╣реИрдВред

рдЪреВрдБрдХрд┐ рдХреЛрдИ рдПрдХрд▓ рдлрд╝реАрд▓реНрдб рдХрд┐рд╕реА рдкрдВрдХреНрддрд┐ рдХреА рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдорд╛рдВрдХрди рд░рд┐рдХреЙрд░реНрдб student_id, course_id рдФрд░ year рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдЬрдм рдХрдИ рдХреЙрд▓рдо рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ PRIMARY KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ CREATE TABLE рдХрдорд╛рдВрдб рдХреЗ рдЕрдВрдд рдореЗрдВ рджреА рдЬрд╛рддреА рд╣реИред

CREATE TABLE enrollments (
    student_id INT,
    course_id INT,
    year INT,
    grade INT,
    is_passing_grade BOOLEAN,
    PRIMARY KEY (student_id, course_id, year)
);

рдЯреЗрдмрд▓ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕

рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рд╣рдордиреЗ рдЕрднреА рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕реЗ рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╕рдордп рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдЯреЗрдмрд▓ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк PRIMARY KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЧрдПред рдЖрдк ALTER TABLE рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:

ALTER TABLE enrollments
ADD CONSTRAINT enroll_pk 
PRIMARY KEY (student_id, course_id, year);

ALTER TABLE рдХреНрд╡реЗрд░реА рдореЗрдВ, рд╣рдордиреЗ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХрд╛ рдирд╛рдо enroll_pk рд░рдЦрд╛ рд╣реИ (enrollment primary key рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк)ред рдпрд╣ рдирд╛рдо рдЖрдкрдХреА рдкрд╕рдВрдж рдХрд╛ рдХреЛрдИ рднреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд▓рд╛рд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╛рдо рдЪреБрдиреЗрдВ рдЬреЛ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░реЗред

рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХрд╛ рдирд╛рдордХрд░рдг рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдХрдИ рд▓рд╛рдн рдорд┐рд▓рддреЗ рд╣реИрдВ:

  • рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рд╕рдВрджрд░реНрдн рджреЗрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреЗ рдкреНрд░рдмрдВрдзрди рдФрд░ рд╕рдВрдЧрдарди рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓рддреА рд╣реИ, рд╡рд┐рд╢реЗрд╖рдХрд░ рдЙрди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬрд╣рд╛рдБ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИред

NOT NULL рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ

рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдЫрд╛рддреНрд░ рдХрд╛ рдирд╛рдо рдФрд░ рдИрдореЗрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рд╣реЛред рд╡реЗ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рд╕реНрдЯрд╛рдл рдЧрд▓рддреА рд╕реЗ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдлрд╝реАрд▓реНрдб рдХреЛ рдЫреЛрдбрд╝ рджреЗред

рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╕рдордп рдЗрди рддреАрди рдХреЙрд▓рдореЛрдВ рдкрд░ NOT NULL рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

CREATE TABLE students (
    student_id INT,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    email TEXT NOT NULL,
    major TEXT,
    enrollment_year INT
);

рдКрдкрд░ рджреА рдЧрдИ рдХреНрд╡реЗрд░реА NOT NULL рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ first_name, last_name рдФрд░ email рдХреЙрд▓рдо рдореЗрдВ NULL (рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) рдорд╛рди рди рд╣реЛ рд╕рдХреЗрдВред

рдореМрдЬреВрджрд╛ рдЯреЗрдмрд▓ рдореЗрдВ NOT NULL рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ ALTER TABLE рдХрдорд╛рдВрдб рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред NOT NULL рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

ALTER TABLE students
ALTER COLUMN first_name SET NOT NULL,
ALTER COLUMN last_name SET NOT NULL,
ALTER COLUMN email SET NOT NULL;

UNIQUE рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ

рдИрдореЗрд▓ рдкрддреЗ рд╕реНрд╡рднрд╛рд╡рддрдГ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрддреЗ рд╣реИрдВред рдЬрд╣рд╛рдБ рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХрднреА рднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╣рд╛рдБ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрддрд░ рдкрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдЗрд╕рд╕реЗ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддреА рд╣реИред

рдпрд╣ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдЕрдиреНрдп рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреА рддрд░рд╣ рд╣реА рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИред

CREATE TABLE students (
    ...
    email TEXT UNIQUE,
    ...
);

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо NOT NULL рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╣реА рдХреЙрд▓рдо рдкрд░ рд╕реНрдкреЗрд╕ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдХреЗ рдХрдИ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:┬а

CREATE TABLE students (
    ...
    email TEXT UNIQUE NOT NULL,
    ...
);

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреНрд░рдо рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛, рд╣рдо NOT NULL UNIQUE рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рдереЗред

рдореМрдЬреВрджрд╛ рдЯреЗрдмрд▓ рдореЗрдВ UNIQUE рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

ALTER TABLE students 
ADD CONSTRAINT unique_emails UNIQUE (email);

рдХрдИ рдХреЙрд▓рдореЛрдВ рдкрд░ UNIQUE рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ courses рдЯреЗрдмрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧ рдХреЗ рднреАрддрд░ рдХреЛрд░реНрд╕ рдХрд╛ рдирд╛рдо рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, course_name рдФрд░ department рдХреЙрд▓рдо рдПрдХ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рдХрдИ рдХреЙрд▓рдо рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ CREATE TABLE рдХрдорд╛рдВрдб рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ:

CREATE TABLE courses (
    course_id INT,
    course_name TEXT,
    department TEXT,
    UNIQUE (course_name, department)
);

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдореМрдЬреВрджрд╛ рдЯреЗрдмрд▓ рдХреЛ рдмрджрд▓рдХрд░ рднреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХреЙрд▓рдореЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЯрдкрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:

ALTER TABLE courses 
ADD CONSTRAINT unique_course_name_department 
UNIQUE (course_name, department);

NOT NULL UNIQUE рдмрдирд╛рдо PRIMARY KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕┬а

рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ PRIMARY KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдЕрджреНрд╡рд┐рддреАрдпрддрд╛ рднреА рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ рдФрд░ рдпрд╣ рднреА рдХрд┐ рдорд╛рди рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рддреЛ рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ:

course_id INT PRIMARY KEY
course_id INT UNIQUE NOT NULL

рдХрд┐рд╕реА рдЯреЗрдмрд▓ рдкрд░ NOT NULL UNIQUE рдФрд░ PRIMARY KEY рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдЙрдирдХреЗ рдкреНрд░рдпреЛрдЬрди рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИред┬а

рд╣рд╛рд▓рд╛рдБрдХрд┐ рджреЛрдиреЛрдВ рдХрд┐рд╕реА рдХреЙрд▓рдо(рдЬрд╝) рдкрд░ рдЕрджреНрд╡рд┐рддреАрдпрддрд╛ рдФрд░ рдиреЙрди-рдирд▓рд╛рдмрд┐рд▓рд┐рдЯреА рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЯреЗрдмрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ PRIMARY KEY рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЯреЗрдмрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, NOT NULL UNIQUE рдХрд╛ рд╕рдВрдпреЛрдЬрди рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓рдореЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдмрд┐рдирд╛ NULL рдорд╛рдиреЛрдВ рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рди рд▓рд╛рдЧреВ рд╣реЛрдВ, рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЯреЗрдмрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ NOT NULL UNIQUE рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рджреЛрдиреЛрдВ рдХреЗ рд╣реЛрдиреЗ рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрджреНрд╡рд┐рддреАрдпрддрд╛ рдФрд░ рдбреЗрдЯрд╛ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╕рдВрднрд╡ рд╣реЛрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдЯреЗрдмрд▓ рдХреЗ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг, рдЕрджреНрд╡рд┐рддреАрдп рдЧреБрдгреЛрдВ рдХреЗ рдмреАрдЪ рднреЗрдж рднреА рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред

DEFAULT рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ

рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдЕрдкрдирд╛ рдореЗрдЬрд░ рдЪреБрдирдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рди рдЫрд╛рддреНрд░реЛрдВ рдиреЗ рдЕрднреА рдЕрдкрдирд╛ рдореЗрдЬрд░ рдирд╣реАрдВ рдЪреБрдирд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП major рдХреЙрд▓рдо рдХрд╛ рдорд╛рди тАЩUndeclaredтАЩ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо DEFAULT рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХреЙрд▓рдо рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо students рдЯреЗрдмрд▓ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

ALTER TABLE students
ALTER COLUMN major SET DEFAULT 'Undeclared';

рдпрджрд┐ рд╣рдо рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╕рдордп рд╣реА DEFAULT рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ, рддреЛ рдЗрд╕реЗ рдХреЙрд▓рдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

CREATE TABLE students (
    ...
    major TEXT DEFAULT 'Undeclared',
    ...
);

CHECK рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ

рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдЧреНрд░реЗрдб 0 рд╕реЗ 100 рддрдХ рд╣реЛрддреЗ рд╣реИрдВред рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХреЗ, enrollment рдЯреЗрдмрд▓ рдХрд╛ grade рдХреЙрд▓рдо рдХреЛрдИ рднреА рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо CHECK рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдорд╛рди 0 рдФрд░ 100 рдХреЗ рдмреАрдЪ рд╕реАрдорд┐рдд рд░рд╣реЗрдВред

ALTER TABLE enrollments
ADD CONSTRAINT grade_range CHECK (grade BETWEEN 0 AND 100);

рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, CHECK рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рд╣рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рд░реНрддреЛрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рджреЗрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдкреВрд░рд╛ рдХрд░реЗред рдпреЗ рдбреЗрдЯрд╛ рдХреА рд╕реБрд╕рдВрдЧрддрд┐ рдФрд░ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред

рдПрдХ CHECK рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреЙрд▓рдо рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ рдХрд┐ grade рдФрд░ is_passing_grade рдХреЗ рдорд╛рди рдЖрдкрд╕ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд╣реЛрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдЧреНрд░реЗрдб рдкрд╛рд╕рд┐рдВрдЧ рд╣реИ рдпрджрд┐ рдЙрд╕рдХрд╛ рдорд╛рди рдХрдо рд╕реЗ рдХрдо 60 рд╣реИред рддрдм рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ is_passing_grade рддрдм рдФрд░ рдХреЗрд╡рд▓ рддрдм TRUE рд╣реЛ рдЬрдм рдЧреНрд░реЗрдб рдХрдо рд╕реЗ рдХрдо 60 рд╣реЛред рдЖрдЗрдП рдЗрд╕реЗ рдЯреЗрдмрд▓ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХрд░реЗрдВ рддрд╛рдХрд┐ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ CHECK рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ CREATE TABLE рдХрдорд╛рдВрдб рдореЗрдВ рдХреИрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

CREATE TABLE enrollments (
    ...
    grade INT,
    is_passing_grade BOOLEAN,
    CONSTRAINT grade_check CHECK (grade BETWEEN 0 AND 100),
    CONSTRAINT is_passing_grade CHECK (
        (grade >= 60 AND is_passing_grade = TRUE) OR
        (grade < 60 AND is_passing_grade = FALSE)
    )
);

рдКрдкрд░ рджрд┐рдП рдЧрдП рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдЫрд╛рддреНрд░ рдХрд┐рд╕реА рдХреЛрд░реНрд╕ рдореЗрдВ рдирд╛рдорд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЕрднреА рдЧреНрд░реЗрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЧреНрд░реЗрдб рдкрд░ NULL рдорд╛рдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдкрд╛рд╕рд┐рдВрдЧ рдЧреНрд░реЗрдб рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЧреНрд░реЗрдб рдЕрднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╡рд╣ рднреА NULL рд╣реЛред рдЗрдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

CREATE TABLE enrollments (
    ...    
    grade INT NULL DEFAULT NULL,
    is_passing_grade BOOLEAN NULL DEFAULT NULL,
    CONSTRAINT grade_check CHECK (grade BETWEEN 0 AND 100),
    CONSTRAINT is_passing_grade CHECK (
        (grade IS NULL AND is_passing_grade IS NULL) OR
        (grade >= 60 AND is_passing_grade = TRUE) OR
        (grade < 60 AND is_passing_grade = FALSE)
    ),
    ...
);

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ grade рдФрд░ is_passing_grade рджреЛрдиреЛрдВ рдХреЙрд▓рдореЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ NULL рдЬреЛрдбрд╝рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рд┐рд░реНрдл рдкрдардиреАрдпрддрд╛ рдмрдврд╝рд╛рдирд╛ рд╣реИред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо CHECK рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рд╕реЗ рдХрд┐рди-рдХрд┐рди рдкреНрд░рдХрд╛рд░ рдХреА рд╢рд░реНрддреЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░реЗрдВрдЬ (рд╕реАрдорд╛) рд╢рд░реНрддреЗрдВ

рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЙрд▓рдо рдХреЗ рдорд╛рди рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╣реЛрдВред

ALTER TABLE table_name
ADD CONSTRAINT constraint_name 
CHECK (column_name BETWEEN min_value AND max_value);

рд╕реВрдЪреА рдЖрдзрд╛рд░рд┐рдд рд╢рд░реНрддреЗрдВ

рд╣рдо рдпрд╣ рд╡реИрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЙрд▓рдо рдХрд╛ рдорд╛рди рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛред

ALTER TABLE table_name
ADD CONSTRAINT constraint_name 
CHECK (column_name IN ('Value1', 'Value2', 'Value3'));

рддреБрд▓рдирд╛рддреНрдордХ рд╢рд░реНрддреЗрдВ

рд╣рдо рдХрд┐рд╕реА рдХреЙрд▓рдо рдХреЗ рдорд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рджреА рдЧрдИ рд╢рд░реНрдд (рдмрдбрд╝рд╛, рдЫреЛрдЯрд╛, рдЖрджрд┐) рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВред

ALTER TABLE table_name
ADD CONSTRAINT constraint_name 
CHECK (column_name > some_value);

рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рд╢рд░реНрддреЗрдВ

рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди (рдЬреИрд╕реЗ LIKE рдпрд╛ SIMILAR TO) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

ALTER TABLE table_name
ADD CONSTRAINT constraint_name 
CHECK (column_name LIKE 'pattern');

рддрд╛рд░реНрдХрд┐рдХ рд╢рд░реНрддреЗрдВ

рд╣рдо рд▓реЙрдЬрд┐рдХрд▓ рдСрдкрд░реЗрдЯрд░ (AND, OR, NOT) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рд╢рд░реНрддреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

ALTER TABLE table_name
ADD CONSTRAINT constraint_name 
CHECK (condition1 AND condition2 OR condition3);

рд╕рдордЧреНрд░ (рдХрдореНрдкреЛрдЬрд╝рд┐рдЯ) рд╢рд░реНрддреЗрдВ

рдХрдИ рдХреЙрд▓рдореЛрдВ рдкрд░ рдПрдХ рд╢рд░реНрдд рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

ALTER TABLE table_name
ADD CONSTRAINT constraint_name 
CHECK (column1 + column2 < some_value);

FOREIGN KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ

рдлреЙрд░реЗрди рдХреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рдЯреЗрдмрд▓реНрд╕ рдХреЗ рдХреЙрд▓рдореЛрдВ рдХреЛ рдЖрдкрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдбреЗрдЯрд╛ рдХреА рд░реЗрдлрд░реЗрдВрд╢рд┐рдпрд▓ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗред рдореВрд▓ рд░реВрдк рд╕реЗ, рдПрдХ рдЯреЗрдмрд▓ рдореЗрдВ рдлреЙрд░реЗрди рдХреА рджреВрд╕рд░реА рдЯреЗрдмрд▓ рдХреА рдкреНрд░рд╛рдЗрдорд░реА рдХреА рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрди рджреЛ рдЯреЗрдмрд▓реНрд╕ рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЖрдкрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдЗрд╕рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЯреЗрдмрд▓ рдореЗрдВ рдРрд╕рд╛ рдлреЙрд░реЗрди рдХреА рдорд╛рди рд╡рд╛рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдЬрд┐рд╕рдХрд╛ рдорд┐рд▓рд╛рди рд▓рд┐рдВрдХреНрдб рдЯреЗрдмрд▓ рдХреА рдкреНрд░рд╛рдЗрдорд░реА рдХреА рд╡рд╛рд▓реА рдХрд┐рд╕реА рдкрдВрдХреНрддрд┐ рд╕реЗ рди рд╣реЛрддрд╛ рд╣реЛред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, enrollments рдЯреЗрдмрд▓ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреНрд░рдорд╢рдГ student_id рдФрд░ course_id рдХреЙрд▓рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рдЫрд╛рддреНрд░ рдФрд░ рдХрд┐рд╕реА рдХреЛрд░реНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХреЗ, enrollments рдЯреЗрдмрд▓ рдореЗрдВ рдЗрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ students рдФрд░ courses рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ рдореМрдЬреВрджрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред

enrollments рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

CREATE TABLE enrollments (
    student_id INT,
    course_id INT,
    ...
    FOREIGN KEY (student_id) REFERENCES Students(student_id),
    FOREIGN KEY (course_id) REFERENCES Courses(course_id)
);

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрдирдХреЗ рдлреЙрд░реЗрди рдХреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпреЗ рдХреНрд░рдорд╢рдГ students рдФрд░ courses рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ рдкреНрд░рд╛рдЗрдорд░реА рдХреА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

рдЕрдиреНрдп рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреА рддрд░рд╣, рд╣рдо рдЗрдиреНрд╣реЗрдВ рдЯреЗрдмрд▓ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рднреА ALTER TABLE рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

ALTER TABLE enrollments
ADD CONSTRAINT fk_student_id
FOREIGN KEY (student_id)
REFERENCES students(student_id);

ALTER TABLE enrollments
ADD CONSTRAINT fk_course_id
FOREIGN KEY (course_id)
REFERENCES courses(course_id);

рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛

рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджреМрд░рд╛рди, рд╣рдордиреЗ рдХрдИ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рджрд┐рдЦрд╛рдП рдФрд░ рдпрд╣ рднреА рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣рд╛рдБ CREATE TABLE рдХрдорд╛рдВрдб рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ рдЕрдм рддрдХ рд╕реАрдЦреА рдЧрдИ рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдкрд╣рд▓реЗ, рд╣рдо students рдЯреЗрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    major TEXT DEFAULT 'Undeclared',
    enrollment_year INT,
    CONSTRAINT year_check CHECK (enrollment_year >= 1900),
    CHECK (major IN (
        'Undeclared',
        'Computer Science',
        'Mathematics',
        'Biology',
        'Physics',
        'Chemistry',
        'Biochemistry'
    ))
);

рдЕрдЧрд▓рд╛, рд╣рдо courses рдЯреЗрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:

CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    course_name TEXT NOT NULL,
    department TEXT NOT NULL,
    UNIQUE (course_name, department),
    CHECK (department IN (
        'Physics & Mathematics',
        'Sciences'
    ))
);

рдЕрдВрдд рдореЗрдВ, рд╣рдо enrollments рдЯреЗрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рдХреЛрд░реНрд╕реЗрдЬ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧреА:

CREATE TABLE enrollments (
    student_id INT,
    course_id INT,
    year INT CHECK (year >= 1900),
    grade INT NULL DEFAULT NULL,
    is_passing_grade BOOLEAN NULL DEFAULT NULL,
    CONSTRAINT grade_check CHECK (grade BETWEEN 0 AND 100),
    CONSTRAINT is_passing_grade CHECK (
        (grade IS NULL AND is_passing_grade IS NULL) OR
        (grade >= 60 AND is_passing_grade = TRUE) OR
        (grade < 60 AND is_passing_grade = FALSE)
    ),
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id),
    PRIMARY KEY (student_id, course_id, year)
);

рд╣рдордиреЗ рдЗрд╕ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдЬреЛрдбрд╝реА рд╣реИрдВред рдХрд┐рд╕реА рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рд╡рд┐рднрд╛рдЧреЛрдВ рдФрд░ рдореЗрдЬрд░реНрд╕ рдХрд╛ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, major рдФрд░ department рдХреЙрд▓рдо рдЬрд┐рди рдорд╛рдиреЛрдВ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХрд╛ рд╕рдореВрд╣ рд╕реАрдорд┐рдд рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реЛрддрд╛ рд╣реИред рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, CHECK рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ рддрд╛рдХрд┐ рдпреЗ рдХреЙрд▓рдо рдХреЗрд╡рд▓ рдЙрд╕реА рдЬреНрдЮрд╛рдд рд╕реЗрдЯ рдХреЗ рдорд╛рди рд▓реЗ рд╕рдХреЗрдВред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ SQL рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯреАрдЧреНрд░рд┐рдЯреА рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдФрд░ рдЙрдиреНрд╣реЗрдВ PostgreSQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдкреНрд░рд╛рдЗрдорд░реА рдХреА, NOT NULL рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕, UNIQUE рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕, DEFAULT рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕, CHECK рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕, рдФрд░ FOREIGN KEY рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯреНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдПред

рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрдХрд░, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреА рд╢реБрджреНрдзрддрд╛, рд╕реБрд╕рдВрдЧрддрд┐ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдЧрдард┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ Database Design рдкрд░ рдпрд╣ рдХреЛрд░реНрд╕ рджреЗрдЦреЗрдВред

Fran├зois Aubry

рд▓реЗрдЦрдХ

Fran├зois Aubry

Full-stack рдЗрдВрдЬреАрдирд┐рдпрд░ рдПрд╡рдВ рд╕рдВрд╕реНрдерд╛рдкрдХ, CheapGPT рдкрд░ред рдкрдврд╝рд╛рдирд╛ рд╣рдореЗрд╢рд╛ рд╕реЗ рдореЗрд░рд╛ рдЬреБрдиреВрди рд░рд╣рд╛ рд╣реИред рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдЬреАрд╡рди рд╕реЗ рд╣реА рдореИрдВ рдЙрддреНрд╕рд╛рд╣рдкреВрд░реНрд╡рдХ рдЯреНрдпреВрд╢рди рджреЗрдиреЗ рдФрд░ рдЕрдиреНрдп рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдпреЛрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рддрд▓рд╛рд╢рддрд╛ рд░рд╣рд╛ рд╣реВрдБред рдЗрд╕реА рдЬреБрдиреВрди рдиреЗ рдореБрдЭреЗ рдкреАрдПрдЪрдбреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рдЬрд╣рд╛рдБ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╢реИрдХреНрд╖рдгрд┐рдХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд╕рд╛рде рд╢рд┐рдХреНрд╖рдг рд╕рд╣рд╛рдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рдо рдХрд┐рдпрд╛ред рдЙрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХрдХреНрд╖рд╛-рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛, рд╕рдВрдмрдВрдз рдмрдирд╛рдирд╛ рдФрд░ рд╕реАрдЦрдиреЗ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдореБрдЭреЗ рдЕрддреНрдпрдВрдд рд╕рдВрддреЛрд╖ рджреЗрддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдСрдирд▓рд╛рдЗрди рд▓рд░реНрдирд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдбрд┐рдЬрд┐рдЯрд▓ рд╢рд┐рдХреНрд╖рд╛ рдХреА рд░реВрдкрд╛рдВрддрд░рдХрд╛рд░реА рдХреНрд╖рдорддрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реА рд╣реА рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдРрд╕реЗ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдореИрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдерд╛ред рдореИрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╢рд┐рдХреНрд╖рдг рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдирд╡реЛрдиреНрдореЗрд╖реА рдбрд┐рдЬрд┐рдЯрд▓ рдкрджреНрдзрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реВрдБред рдореЗрд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рдРрд╕реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рди рдХреЗрд╡рд▓ рд░реЛрдЪрдХ рдФрд░ рд╕реВрдЪрдирд╛рдкреНрд░рдж рд╣реЛрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕ рдбрд┐рдЬрд┐рдЯрд▓ рдпреБрдЧ рдХреЗ рд╢рд┐рдХреНрд╖рд╛рд░реНрдерд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдЧрдо рднреА рд╣реЛрдВред

рд╡рд┐рд╖рдп