Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

problema con el modelo de una tabla

Estas en el tema de problema con el modelo de una tabla en el foro de Bases de Datos General en Foros del Web. hola, tengo la siguiente duda, tengo diseñada una tabla (en MySQL) de tal modo que sirva para almacenar los permisos que tienen ciertas entidades sobre ...
  #1 (permalink)  
Antiguo 27/12/2004, 08:37
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 6 meses
Puntos: 4
problema con el modelo de una tabla

hola, tengo la siguiente duda,

tengo diseñada una tabla (en MySQL) de tal modo que sirva para almacenar los permisos que tienen ciertas entidades sobre una determinada area de la web (programada en php).

de modo q los campos son estos:

TARGET || ENTITY_TYPE || ENTITY_ID || PERMISSION


de modo q target es el area de la web restringida con un permiso (por ejemplo subir archivos, acceder a un area oculta, enviar comentarios, etc...), Entity_type es para definir si estoy hablando de un nivel (anonimo, registrado, admin) o un grupo o un usuario en particular, Entity_id para saber q usuario o grupo o nivel tiene el permiso y permission es para saber si tiene el permiso habilitado o deshabilitado.

el problema esta en que como los targets pueden ser iguales o diferentes, al igual que todos los campos, podría existir la posibilidad de que (por ejemplo) un grupo tenga 2 veces el mismo permiso para el mismo target y además que sean contradictorios, entonces, ¿como puedo hacer q no se puedan almacenar 2 filas diferentes con el mismo Target, entity_type y entity_id a la vez?
  #2 (permalink)  
Antiguo 27/12/2004, 11:23
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Tienes dos formas de hacerlo: una por programación, comprobando que no exista el terceto en la tabla, la otra por definición de tabla por medio de una primary key con los tres campos.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #3 (permalink)  
Antiguo 27/12/2004, 13:03
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 6 meses
Puntos: 4
no entiendo la segunda, como le asigno una llave primaria a 3 campos de una vez?
recuerda que dije q los datos de las 3 columnas pueden repetirse, pero no pueden ser identicos en 2 filas a la vez.

esta es la estructura de la tabla:

CREATE TABLE `site_permissions` (
`target` varchar(100) NOT NULL default '',
`entity_type` varchar(100) NOT NULL default '',
`entity_id` varchar(100) NOT NULL default '',
`permission` varchar(100) NOT NULL default ''
) TYPE=MyISAM;
  #4 (permalink)  
Antiguo 28/12/2004, 02:06
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Una tabla sólo puede tener una clave primaria, pero esta puede ser compuesta, no es que definas cada campo como clave primaria.
Lo que tienes es que el terceto (TARGET,ENTITY_TYPE,ENTITY_ID) debe de ser único. Esto no impide que dos se repitan si el tercero es diferente.
Para crear la clave primaria con tres campos sólo tienes que poner los tres campos en la creación de la clave primaria:
primary key (TARGET, ENTITY_TYPE, ENTITY_ID )
Si la tabla ya la tienes creada y quieres añadirle la clave primaria:
alter table nombre_tabla add primary key (TARGET, ENTITY_TYPE, ENTITY_ID )

De esta manera no puedes repetir el terceto que forma parte de la clave primaria.

Un saludo.
__________________
Estoy contagiado de Generación-I
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:01.