Especificar criterios de clasificación manualmente para un conjunto de registros de una relación de varios a varios

Estoy diseñando una relación de varios a varios entre dos modelos: Cell y Isolator:

CREATE TABLE `isolator` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(127) NOT NULL,
  `surname` varchar(127) NOT NULL,
  PRIMARY KEY (`id`),
);

CREATE TABLE `cell` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(127) NOT NULL,
  `gen` varchar(127) NOT NULL,
  PRIMARY KEY (`id`),
);

CREATE TABLE `cell_isolators` (
  `cell_id` bigint(20) NOT NULL DEFAULT '0',
  `isolator_id` bigint(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`cell_id`,`isolator_id`),
  CONSTRAINT `cell_isolator_id` FOREIGN KEY (`isolator_id`) REFERENCES `isolator` (`id`),
  CONSTRAINT `isolator_cell_id` FOREIGN KEY (`cell_id`) REFERENCES `cell` (`id`) ON DELETE CASCADE
);

El cliente me ha pedido la posibilidad de especificar el orden en el que se muestra la lista de aisladores para una celda, ya que es importante para fines de publicación.

¿Cuál es el mejor enfoque para modelar eso? Estaba pensando en agregar un tercer campo a la relación de muchos a muchos (p. Ej. sort_order), pero me gustaría saber si existen otras alternativas.

¡Gracias!

preguntado el 08 de noviembre de 11 a las 14:11

Así es exactamente como lo habría modelado, asumiendo que el orden es específico de la relación y no del aislador en sí. -

@TomH. Así es como es. Una lista completa de Isolator se ordenaría por (apellido, nombre), pero la relación tiene sus propios criterios:

1 Respuestas

La única forma de hacerlo en el caso general es agregar una columna a "cell_isolators".

El tipo de datos depende de la aplicación hasta cierto punto. He visto esto hecho con columnas como números enteros, flotantes o decimales y alfanuméricos (varchar (n)).

Sin embargo, poblarlo y mantenerlo puede ser problemático. Eso no tiene nada que ver con el diseño de la base de datos; Es doloroso mantener el orden de clasificación para más de unas pocas filas, especialmente si hay inserciones regulares en la tabla y cambios en el orden de clasificación. Afortunadamente, ese trabajo generalmente recae en la interfaz de usuario, no en el dbms.

respondido 10 nov., 11:16

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.