这是一个表,可供任何其他需要使用它的表使用。因此,想象一下大量使用。
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$$
答案 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`)
你必须在运行时监控性能才能真正感受到这是获取大部分数据库的正确方法,我只是在猜测。