Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/05/2010, 17:16
negro1985
 
Fecha de Ingreso: febrero-2009
Ubicación: mexico
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 1
Pregunta Ayuda con interfaces

Miren estoy realizando altas. bajas. modificaciones y consultas con OOP y una base de datos, pero mi duda surge si las clases que manejo pueden implementar una interface

En mi BD tengo las tablas que comunmente se harian para una biblioteca

CREATE TABLE `libros` (
`id_libro` varchar(15) NOT NULL,
`id_autor` int(5) NOT NULL,
`id_libros_seccion` int(2) NOT NULL,
`id_editorial` int(5) NOT NULL,
`nombre` varchar(100) NOT NULL,
`paginas` int(5) NOT NULL,
`ano_edicion` date NOT NULL,
`fecha_alta` date NOT NULL,
`original` int(2) NOT NULL,
`copia` int(2) NOT NULL,
`descripcion` text NOT NULL,
`imagen` varchar(10) NOT NULL,
PRIMARY KEY (`id_libro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `libros_seccion` (
`id_libros_seccion` int(2) NOT NULL auto_increment,
`nombre` varchar(50) NOT NULL,
`descripcion` varchar(100) NOT NULL,
PRIMARY KEY (`id_libros_seccion`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE `editoriales` (
`id_editorial` int(5) NOT NULL auto_increment,
`nombre` varchar(50) NOT NULL,
PRIMARY KEY (`id_editorial`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

CREATE TABLE `autores` (
`id_autor` int(5) NOT NULL auto_increment,
`nombre` varchar(30) NOT NULL,
`apellidos` varchar(50) NOT NULL,
PRIMARY KEY (`id_autor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

Ahora para los prestamos de libros utilizo 2 tablas de usuarios ya que existen alumnos y empleados(docentes y administrativos)

CREATE TABLE `alumnos_prestamos_libros` (
`id_prestamo` int(5) NOT NULL auto_increment,
`id_libro` int(6) NOT NULL,
`id_alumno` varchar(15) NOT NULL,
`fecha_salida` date NOT NULL,
`fecha_devolucion` date NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id_prestamo`),
KEY `alumnos_prestamo` (`id_alumno`),
KEY `id_libro` (`id_libro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `empleados_prestamos_libros` (
`id_prestamo` int(5) NOT NULL auto_increment,
`id_libro` int(6) NOT NULL,
`id_empleado` varchar(15) NOT NULL,
`fecha_salida` date NOT NULL,
`fecha_devolucion` date NOT NULL,
`status` int(1) NOT NULL,
PRIMARY KEY (`id_prestamo`),
KEY `empleados_prestamo` (`id_empleado`),
KEY `id_libro` (`id_libro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Hasta ahi todo bien, ya tengo las clases para libros, libros_seccion, autores, editoriales las cuales por logica utilizan altas, bajas, consultas y modificaciones los cuales se ven reflejados en metodos o funciones dentro de cada clase, por ejemplo la clase autor es esta

<?php
class Autor
{
private $nombre;
private $apellidos;
private $cn;
private $id_autor;

public function __construct()
{
$this->cn = new Conexion();
}

public function agregar($nombre, $apellidos)
{
$this->nombre = $nombre;
$this->apellidos = $apellidos;
$query = "INSERT INTO autores (id_autor,nombre,apellidos) VALUES ('','$nombre','$apellidos')";
return $this->cn->dbExecute($query);
}

public function consultar()
{
$query = "SELECT * FROM autores";
return $this->cn->dbExecute($query);
}
public function consulta_id($id_autor)
{
$this->id_autor = $id_autor;
$query = "SELECT nombre,apellidos FROM autores WHERE id_autor='$id_autor'";
return $this->cn->dbExecute($query);
}
public function omite_id($id_autor){
$this->id_autor = $id_autor;
$query = "SELECT * FROM autores WHERE id_autor<>'$id_autor'";
return $this->cn->dbExecute($query);
}
public function modificar($nombre, $apellidos, $id_autor)
{
$this->nombre = $nombre;
$this->apellidos = $apellidos;
$this->id_autor = $id_autor;
$query = "UPDATE autores SET nombre='$nombre',apellidos='$apellidos' WHERE id_autor='$id_autor'";
return $this->cn->dbExecute($query);
}
public function eliminar($id_autor)
{
$this->id_autor = $id_autor;
$query = "DELETE FROM autores WHERE id_autor='$id_autor'";
return $this->cn->dbExecute($query);
}
public function relacion($id_autor){
$this->id_autor=$id_autor;
$query="SELECT COUNT(id_autor) AS id_autor FROM libros WHERE id_autor='$id_autor'";
return $this->cn->dbExecute($query);
}
}
?>

pero siento que hay simulitudes con las otras clases en lo metodos de eliminar, consultar, y quisiera saber si estas clases (libros, libros_seccion, autor y editoriales) pueden hacer con la ayuda de alguna inteface. Y por otro lado para el prestamos de libros si se dan cuenta las tablas de la BD tienen los mismos campos a excepcion del id_alumno y el id_empleado que son los usuario que harian prestamos de libros, pero creo que hacer dos clases serian repetir lo mismo pero estoy viendo que con una interface podria solucionar esto pero no se como hacerlo, si alguien puede ayudarme se lo agradeceria mucho, a lo mejor mi planteamiento no sea el correcto.