1

这是一个可供任何其他需要使用它的表使用的表。因此,想象一下大量的使用。

delimiter $$

CREATE TABLE `sortorder` (
  `sortOrderId` int(11) NOT NULL AUTO_INCREMENT,
  `sortOrder` tinyint(4) NOT NULL,
  PRIMARY KEY (`sortOrderId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

需要什么来确保该表可以处理向其抛出的任何负载?

tinyint datatype例如,如果我在菜单中有 10 个选项卡或 5 个缩略图等,我只能想象需要一个sortOrder,那么您可以看到我们在这里不需要大的 INT 数据类型。

我需要学习和做的另一件事是在此表上设置外键约束。

例如,如果image表删除了一条记录,sortOrderId则需要在sortorder表中删除匹配记录。

这是怎么做到的?

ALTER TABLE 排序代码:

ALTER TABLE sortorder ADD FOREIGN KEY fk_sortorder;

CREATE TABLE 排序代码:

...

**编辑:image使用sortOrderId列的表。我必须确保如果在表中删除了一条记录image- 在表中删除了相应的记录sortorder

delimiter $$

CREATE TABLE `image` (
  `imageId` int(11) NOT NULL AUTO_INCREMENT,
  `imageFileName` varchar(45) DEFAULT NULL,
  `imagePath` varchar(255) DEFAULT NULL,
  `imageTitle` varchar(100) DEFAULT NULL,
  `imageAlt` varchar(100) DEFAULT NULL,
  `imageWidth` int(11) DEFAULT NULL,
  `imageHeight` int(11) DEFAULT NULL,
  `classId` int(11) DEFAULT NULL,
  `imageSizeId` tinyint(4) NOT NULL,
  `isImageEnabled` bit(1) DEFAULT b'0',
  `sortOrderId` int(11) DEFAULT NULL,
  PRIMARY KEY (`imageId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
4

1 回答 1

1

使该表快速使用索引的关键,如果它们具有高基数,您将选择和排序。如果您认为此键的差异很大,您可能应该在 sortOrder 上添加键。


要获得cascade delete你将需要这个:

ALTER TABLE sortorder
   add CONSTRAINT fk_sortOrderId
     FOREIGN KEY (sortOrderId)
     REFERENCES image(sortOrderId)
     ON DELETE CASCADE

我认为对 的索引sortOrder不会很有效。这是由于组成索引的 BTree 数据结构的性质所致。如果您考虑一下,大多数值sortOrder可能是低数字 1-10。几乎没有差异,指数的好处就会下降。

使用复合索引似乎会更好。

CREATE INDEX `sort_index` on `sortorder` (`sortOrderId`, `sortOrder`)

您必须在运行时监控性能才能真正感受到这是充分利用数据库的正确方法,我只是猜测。

于 2012-12-24T15:17:54.840 回答