MySql - 使用外键约束创建表`SortOrder`?

时间:2012-12-24 15:14:46

标签: mysql foreign-keys

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

delimiter $$

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

确保此表可以处理抛出的任何LOAD需要什么?

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

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

如果image表删除了带有sortOrderId的记录,则需要在sortorder表中删除匹配的记录。

这是怎么做到的?

ALTER TABLE sortorder代码:

ALTER TABLE sortorder ADD FOREIGN KEY fk_sortorder;

CREATE TABLE sortorder code:

...

**使用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$$

1 个答案:

答案 0 :(得分:1)

使这个表快速使用indexes对要选择的列的关键,如果它们具有高基数,则排序。如果您认为此密钥存在高度差异,则应该在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`)

你必须在运行时监控性能才能真正感受到这是获取大部分数据库的正确方法,我只是在猜测。