简体   繁体   中英

parent child table sql issue

i have 3 tables below which have many to many relation...In student table i have multiple foreign keys sec_id,ad_id but i dont know how to add foreign key as parent-child relation please help me out..

CREATE TABLE student(
s_id int AUTO_INCREMENT,
name varchar(30) NOT NULL,
PRIMARY KEY(s_id)
)

CREATE TABLE section(
sec_id int AUTO_INCREMENT,
name varchar(2) NOT NULL,
PRIMARY KEY(sec_id)
)


CREATE TABLE advisor(
ad_id int AUTO_INCREMENT,
name varchar(2) NOT NULL,
PRIMARY KEY(ad_id)
)

If a student can have at most one advisor , then it's a one-to-many relationship.

The normal pattern for implementing that relationship is to define a foreign key column in the child table, the table on the "many" side of the relationship. For example:

ALTER TABLE student ADD ad_id INT COMMENT 'fk ref advisor';

Further, some storage engines, like InnoDB, support and enforce foreign keys. That is, we can have the database enforce restrictions (constraints) on values that can be stored in columns defined as foreign keys.

For example, we can establish a rule that says that a value stored in the ad_id column in the student table... must be found in a row in the advisor table, in the ad_id column.

For example:

ALTER TABLE student ADD CONSTRAINT fk_student_advisor 
  FOREIGN KEY (ad_id) REFERENCES advisor(ad_id) 
  ON DELETE RESTRICT ON UPDATE CASCADE 

This also enforces a rule that a row from advisor table cannot be deleted if there are rows in student table that reference it.

That same pattern can be repeated for any one to-to-many relationship. For example, if a student can be related to at most one section we can add a foreign key in the same way.

If there's a many-to-many relationship, then we introduce a relationship table that has foreign keys referencing the two related entity tables.

If a student can be related to zero, one or more section , and a section can be related to zero, one or more student , that's an example of a many-to-many relationship.

We can introduce a new table like this (as an example):

CREATE TABLE student_section 
( student_id  INT NOT NULL COMMENT 'pk, fk ref student'
, section_id  INT NOT NULL COMMENT 'pk, fk ref section'
, PRIMARY KEY (student_id, section_id)
, CONSTRAINT fk_student_section_student
    FOREIGN KEY student_id REFERENCES student(s_id) 
    ON DELETE CASCADE ON UPDATE CASCADE
, CONSTRAINT fk_student_section_section
    FOREIGN KEY section_id REFERENCES section(sec_id) 
    ON DELETE CASCADE ON UPDATE CASCADE
)

With that in place, to establish a relationship between a student and a section , we insert a row to the new student_section table. If the student is related to another section , we add another row to the table, referencing the same student, but a different section.

The value stored in the student_id column refers to a row in the student table; and a value stored in the section_id column refers to a row in the section table.

(The many-to-many relationship is really composed of rows in a new table that has a one-to-many relationship to two other tables.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM