Como implementar relações um-para-um, um-para-muitos e muitos-para-muitos ao projetar tabelas?

Alguém pode explicar como implementar relacionamentos um-para-um, um-para-muitos e muitos-para-muitos ao projetar tabelas com alguns exemplos?

    Um-para-um: use uma chave estrangeira para a tabela referenciada:

    student: student_id, first_name, last_name, address_id address: address_id, address, city, zipcode, student_id # you can have a # "link back" if you need 

    Um-para-muitos : use uma chave estrangeira no lado de muitos da relação que liga de volta ao lado “um”:

     teachers: teacher_id, first_name, last_name # the "one" side classs: class_id, class_name, teacher_id # the "many" side 

    Muitos-para-muitos : use uma tabela de junit ( exemplo ):

     student: student_id, first_name, last_name classs: class_id, name, teacher_id student_classs: class_id, student_id # the junction table 

    Exemplo de consultas:

      -- Getting all students for a class: SELECT s.student_id, last_name FROM student_classs sc INNER JOIN students s ON s.student_id = sc.student_id WHERE sc.class_id = X -- Getting all classs for a student: SELECT c.class_id, name FROM student_classs sc INNER JOIN classs c ON c.class_id = sc.class_id WHERE sc.student_id = Y 

    Aqui estão alguns exemplos do mundo real para os tipos de relacionamentos:

    1: 1

    Um relacionamento é de um para um se, e somente se, um registro da tabela A estiver relacionado a um máximo de um registro em uma tabela B.

    Para estabelecer um relacionamento um para um, a chave primária da tabela B (sem registro órfão) deve ser a chave secundária da tabela A (com registros órfãos).

    Por exemplo:

     CREATE TABLE Gov( GID number(6) PRIMARY KEY, Name varchar2(25), Address varchar2(30), TermBegin date, TermEnd date ); CREATE TABLE State( SID number(3) PRIMARY KEY, StateName varchar2(15), Population number(10), SGID Number(4) REFERENCES Gov(GID), CONSTRAINT GOV_SDID UNIQUE (SGID) ); INSERT INTO gov(GID, Name, Address, TermBegin) values(110, 'Bob', '123 Any St', '1-Jan-2009'); INSERT INTO STATE values(111, 'Virginia', 2000000, 110); 

    1: M

    Um relacionamento é de um para muitos se e somente se um registro da tabela A estiver relacionado a um ou mais registros na tabela B. No entanto, um registro na tabela B não pode estar relacionado a mais um registro na tabela A.

    Para estabelecer um relacionamento um para muitos, a chave primária da tabela A (a tabela “um”) deve ser a chave secundária da tabela B (a tabela “muitos”).

    Por exemplo:

     CREATE TABLE Vendor( VendorNumber number(4) PRIMARY KEY, Name varchar2(20), Address varchar2(20), City varchar2(15), Street varchar2(2), ZipCode varchar2(10), Contact varchar2(16), PhoneNumber varchar2(12), Status varchar2(8), StampDate date ); CREATE TABLE Inventory( Item varchar2(6) PRIMARY KEY, Description varchar2(30), CurrentQuantity number(4) NOT NULL, VendorNumber number(2) REFERENCES Vendor(VendorNumber), ReorderQuantity number(3) NOT NULL ); 

    M: N

    Um relacionamento é muitos para muitos se e somente se um registro da tabela A estiver relacionado a um ou mais registros na tabela B e vice-versa.

    Para estabelecer um relacionamento muitos-para-muitos, crie uma terceira tabela chamada “ClassStudentRelation”, que terá as chaves primárias da tabela A e da tabela B.

     CREATE TABLE Class( ClassID varchar2(10) PRIMARY KEY, Title varchar2(30), Instructor varchar2(30), Day varchar2(15), Time varchar2(10) ); CREATE TABLE Student( StudentID varchar2(15) PRIMARY KEY, Name varchar2(35), Major varchar2(35), ClassYear varchar2(10), Statusvarchar2(10) ); CREATE TABLE ClassStudentRelation( StudentID varchar2(15) NOT NULL, ClassID varchar2(14) NOT NULL, FOREIGN KEY (StudentID) REFERENCES Student(StudentID), FOREIGN KEY (ClassID) REFERENCES Class(ClassID), UNIQUE (StudentID, ClassID) ); 

    Relação de um para um (1-1): Esta é a relação entre a chave primária e a chave estrangeira (chave primária relacionada à chave estrangeira apenas um registro). Esse é um relacionamento de um para um.

    Um para muitos (1-M) relacionamento: Este é também o relacionamento entre os principais e estrangeiras chaves relacionamentos, mas aqui chave primária relativa a vários registros (ou seja, Tabela A tem informações livro e Tabela B tem vários editores de um livro).

    Muitos para muitos (MM): muitos para muitos inclui duas dimensões, explicadas totalmente como abaixo com amostra.

     -- This table will hold our phone calls. CREATE TABLE dbo.PhoneCalls ( ID INT IDENTITY(1, 1) NOT NULL, CallTime DATETIME NOT NULL DEFAULT GETDATE(), CallerPhoneNumber CHAR(10) NOT NULL ) -- This table will hold our "tickets" (or cases). CREATE TABLE dbo.Tickets ( ID INT IDENTITY(1, 1) NOT NULL, CreatedTime DATETIME NOT NULL DEFAULT GETDATE(), Subject VARCHAR(250) NOT NULL, Notes VARCHAR(8000) NOT NULL, Completed BIT NOT NULL DEFAULT 0 ) -- This table will link a phone call with a ticket. CREATE TABLE dbo.PhoneCalls_Tickets ( PhoneCallID INT NOT NULL, TicketID INT NOT NULL )