Ayuda Con Una Base de Datos.

kikin29

Bovino maduro
#1


Ok Mi pregunta es esta como veran en Cliente y Proveedor existe Direccion, pero dentro de direccion existe (Calle, NUmero, Comuna, Ciudad)...Yo quiero hacer o no se si se pueda o se mas complicado, pero quiero hacer una Tabla llamada Direccion ...Pero que me guarde una la direccion del Cliente cuando sea su caso o en caso contrario guardar la direccion del proveedor pero quiero saber como seria su codoigo o alguien mas o menos que me oriente...estoy haciendo la base de datos en sql server.



Digamos que esta una solucion pero yo quiero hacer la pero con la tabla de Direccion:

CREATE DATABASE VENTAS;
GO
--drop database ventas
USE VENTAS;
GO

CREATE TABLE Proveedor
(
idProveedor INT NOT NULL IDENTITY(1,1),
RFC CHAR(13) NOT NULL,
nombre VARCHAR(50) NOT NULL,
telefono VARCHAR(15) NOT NULL,
web VARCHAR(40),
calle VARCHAR(30) NOT NULL,
numero VARCHAR(5) NOT NULL,
colonia VARCHAR(40) NOT NULL,
ciudad VARCHAR(40) NOT NULL,
CONSTRAINT PK_Proveedor PRIMARY KEY (idProveedor),
CONSTRAINT UI_Proveedor_RFC UNIQUE (RFC)
)
GO

CREATE TABLE Categoria
(
idCategoria INT NOT NULL IDENTITY(1,1),
nombre VARCHAR(20) NOT NULL,
descripcion VARCHAR(50) NOT NULL,
CONSTRAINT PK_Categoria PRIMARY KEY (idCategoria)
)
GO
--DROP TABLE PRODUCTO
CREATE TABLE Producto
(
idProducto INT NOT NULL IDENTITY(1,1),
idProveedor INT,
idCategoria INT,
nombre VARCHAR(20) NOT NULL,
Precio NUMERIC(10,2) NOT NULL CONSTRAINT DF_Producto_Precio DEFAULT 0,
stock INT NOT NULL CONSTRAINT DF_Producto_Stock DEFAULT 0,
CONSTRAINT PK_Producto PRIMARY KEY (idProducto),
CONSTRAINT FK_Producto_Proveedor FOREIGN KEY (idProveedor)
REFERENCES Proveedor(idProveedor),
CONSTRAINT FK_Producto_Categoria FOREIGN KEY (idCategoria)
REFERENCES Categoria(idCategoria)
)
GO

CREATE TABLE Cliente
(
idCliente INT NOT NULL IDENTITY(1,1),
RFC CHAR(13) NOT NULL,
nombre VARCHAR(50) NOT NULL,
calle VARCHAR(30) NOT NULL,
numero VARCHAR(5) NOT NULL,
colonia VARCHAR(40) NOT NULL,
ciudad VARCHAR(40) NOT NULL,
CONSTRAINT PK_Cliente PRIMARY KEY (idCliente),
CONSTRAINT UI_Cliente_RFC UNIQUE (RFC),
CONSTRAINT UI_Cliente_NOMBRE UNIQUE (NOMBRE)
)
GO

CREATE TABLE Telefono
(
idCliente INT NOT NULL,
telefono VARCHAR(15) NOT NULL,
CONSTRAINT PK_Telefono PRIMARY KEY(idCliente, telefono),
CONSTRAINT FK_Telefono_Cliente FOREIGN KEY (idCliente) REFERENCES Cliente(idCliente)
)
GO

CREATE TABLE Venta
(
idVenta INT NOT NULL IDENTITY(1,1),
idCliente INT NOT NULL,
Fecha DATE NOT NULL CONSTRAINT DF_Venta_Fecha DEFAULT CONVERT(date, GetDate()),
Descuento numeric(10, 2) NOT NULL,
CONSTRAINT PK_Venta PRIMARY KEY (idVenta),
CONSTRAINT FK_Venta_Cliente FOREIGN KEY (idCliente) REFERENCES Cliente(idCliente)
);
GO

CREATE TABLE Detalle
(
IdProducto INT NOT NULL,
IdVenta INT NOT NULL,
Cantidad INT NOT NULL,
Precio NUMERIC(10,2) NOT NULL,
MontoTotal AS ([Cantidad] * [Precio]),
CONSTRAINT PK_DETALLE PRIMARY KEY(IdProducto, IdVenta),
CONSTRAINT CK_CANTIDAD CHECK (CANTIDAD > 0),
CONSTRAINT FK_Detalle_Producto FOREIGN KEY (idProducto) REFERENCES Producto(IdProducto),
CONSTRAINT FK_Detalle_Venta FOREIGN KEY (idVenta) REFERENCES Venta(idVenta)
);
GO


espero y se tomen su tiempo en ayudarme...!!
 

expirata

Bovino adicto
#3
Bueno en si es bastante sencillo , basta con agregar un campo bandera, en donde grabes el tipo de direccion que estas grabando, 1, Cliente, 2 Proveedor, para representarlo en el mdiagrama de flujo seria poner la tabal de direccion linkeada desde los modulos de cliente y proveedor.

saludos
 

kikin29

Bovino maduro
#4
Bueno en si es bastante sencillo , basta con agregar un campo bandera, en donde grabes el tipo de direccion que estas grabando, 1, Cliente, 2 Proveedor, para representarlo en el mdiagrama de flujo seria poner la tabal de direccion linkeada desde los modulos de cliente y proveedor.

saludos

Muchas Gracias vere que puedo hacer...!!
 

registro500

Bovino adolescente
#5
el amigo anterio tiene razon; yo lo haria algo asi:
direccion(ID_direcc, ciudad calle, comuna); //tabla
direccion_proveedor(ID_direcc, ID_proveedor); //tabla
direccion_cliente(ID_direcc, ID_cliente); //tabla

esa seria una posible solucion..
 

rodrigy

Bovino maduro
#6
Bueno, como complemente.
Ami punto de vista, no se porque tienes 2 tablas (Proveedor, Cliente), porque son la misma entidad, podrias tener una sola tabla con un campo que sea "IDTipo", donde 1 = cliente y 2 = Proveedor.
 
Arriba