varios una tablas tabla relaciones relacion muchos misma llenar intermedia hacer datos consigo como sql oracle database-design

sql - una - relacion uno a varios access



¿Cómo implementar relaciones uno a uno, uno a muchos y muchos a muchos al diseñar tablas? (3)

¿Alguien puede explicar cómo implementar relaciones uno a uno, uno a muchos y muchos a muchos al diseñar tablas con algunos ejemplos?


El ejemplo es un poco extraño para mí. Entonces, ¿un estudiante no puede tener muchas direcciones? En realidad puede. Creo que un ejemplo del mundo real, para los tres tipos de relación, según el artículo que escribí, es el siguiente:

1: 1

Una relación es uno a uno si y solo si un registro de la Tabla A está relacionado con un máximo de un registro en una tabla B.

Para establecer una relación uno a uno, la clave principal de la Tabla B (sin registro huérfano) debe ser la clave secundaria de la Tabla A (con registros huérfanos)

Ejemplo:

Create table Gov(GID number(6) primary key, Name varchar2(25), Address VarCHAR2(30), Term_begin date,Term_end Date); Create table State(SID number(3) primary key, State_name varchar2(15), Population number(10), SGID Number(4) references GOV(GID), CONSTRAINT GOV_SDID UNIQUE (SGID)); insert into gov(GID, Name, Address, term_begin) values(110, ''Bob'', ''123 any st'', ''1-Jan-2009''); insert into state values(111, ''Virginia'', 2000000, 110);

1: M

Una relación es una con Muchos si y solo si Un registro de la Tabla A está relacionado con uno o más reacuerdos en una tabla B. Pero un registro en la tabla B no puede relacionarse con más de un registro en la tabla A.

Para establecer una relación uno a Muchos, la clave principal de la Tabla A (la única tabla) debe ser la clave secundaria de la Tabla B (la tabla Muchos).

create table vendor1 ( vendor_no number(4) primary key, name varchar2(20), address varchar2(20), city varchar2(15), st varchar2(2), zip varchar2(10), contact varchar2(16), phone_no varchar2(12), status varchar2(8), stamp_date date); create table inventory1 ( item varchar2(6) primary key, description varchar2(30), quantity_on_hand number(4) not null, vendor_no number(2) references vendor1(vendor_no), reorder_qty number(3) not null );

Una relación es de muchos a muchos si y solo si un registro de la tabla A está relacionado con uno o más registros en una tabla B y viceversa.

Para establecer una relación Muchos a Muchos, cree una tercera tabla llamada "Relación" que tendrá las claves principales de las Tablas A y B.

Create table Class (ClsID varchar2(10) primary Key, title Varchar2(30), Instructor Varchar2(30), Day Varchar2(15), time Varchar2(10)); Create table Student (StudID varchar2(15) primary Key, Name Varchar2(35), Major Varchar2(35), Classyr Varchar2(10), Status Varchar2(10)); Create table Stud_class (studid Varchar2 (15) not null, ClsId varchar2 (14) not null, Foreign key (Studid) references Student(Studid), Foreign key (ClsId) references Class(ClsID), UNIQUE (Studid,ClsID));


Relación de uno a uno (1-1): esta es la relación entre la clave primaria y la externa (la clave principal relacionada con la clave externa es solo un registro). esta es una relación uno a uno.

Relación de Uno a Muchos (1-M): Esta es también la relación entre las relaciones de claves primarias y extranjeras pero aquí la clave principal relacionada con múltiples registros (es decir, la Tabla A tiene información del libro y la Tabla B tiene múltiples publicadores de un libro).

Muchos a muchos (MM): muchos a muchos incluyen dos dimensiones, explicadas completamente a continuación como muestra.

-- 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 )


Uno a uno: use una clave externa a la tabla 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

Uno-a-muchos : use una clave externa en los muchos lados de la relación que lo vinculan con el lado "uno":

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

Muchos a muchos : use una tabla de unión ( example ):

student: student_id, first_name, last_name classes: class_id, name, teacher_id student_classes: class_id, student_id # the junction table

Consultas de ejemplo:

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