为多对多关系的一组记录手动指定排序条件

时间:2011-11-08 14:53:06

标签: sql database-design sorting many-to-many

我正在设计两个模型之间的多对多关系:CellIsolator

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

客户问我是否有可能指定显示单元隔离器列表的顺序,因为它对于发布目的很重要。

建模的最佳方法是什么?我正在考虑在多对多关系中添加第三个字段(例如sort_order),但我想知道是否还有其他选择。

谢谢!

1 个答案:

答案 0 :(得分:1)

在一般情况下,唯一的方法是向“cell_isolators”添加一列。

数据类型在某种程度上取决于应用程序。我已经看到这个用列作为整数,浮点数或小数,以及字母数字(varchar(n))。

但是,填充和维护它可能很麻烦。这与数据库设计没有任何关系;维护多行的排序顺序是很痛苦的,特别是如果对表进行常规插入并更改排序顺序。幸运的是,该作业通常属于用户界面,而不属于dbms。