我的作业是用户类型,每种类型都有很多自定义属性。每个属性都有不同的显示类型,不同的子属性和值。 例如 我创建了一个名为" usertype1"的用户类型,它具有不同的属性 例如:"性","爱好","概要" ... 性别展示类型是" radio" 它的子属性名称为" man"," women",各自的值为1,0
爱好显示类型是"复选框" 它的子属性名称是"唱歌","阅读","烹饪",各自的值是1,0,0
概要显示类型是" text", 它没有子属性。
用户可以拥有多个复选框类型的子属性 这样的使用可以唱歌和阅读,但不能做饭 并且只有一种无线电类型的性别或女性,用户可以有概要值或没有。
所有这些属性都是动态的,我的设计是
'CREATE TABLE `sys_user_type` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(60) NOT NULL,
`creater` bigint(20) NOT NULL,
`creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`status` int(1) NOT NULL DEFAULT ''1'',
`version` bigint(20) NOT NULL DEFAULT ''0'',
`describes` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sys_user_type_name` (`name`),
KEY `sys_user_type_creater` (`creater`),
CONSTRAINT `sys_user_type_creater` FOREIGN KEY (`creater`) REFERENCES `sys_user` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8'
'CREATE TABLE `sys_user_type_ext` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_type_id` bigint(20) NOT NULL,
`name` varchar(20) NOT NULL,
`type` varchar(20) NOT NULL,
`status` int(1) NOT NULL DEFAULT ''1'',
`version` bigint(20) NOT NULL DEFAULT ''0'',
`isnull` int(1) NOT NULL DEFAULT ''1'',
PRIMARY KEY (`id`),
KEY `sys_user_type_ext_user_type_id` (`user_type_id`),
CONSTRAINT `sys_user_type_ext_user_type_id` FOREIGN KEY (`user_type_id`) REFERENCES `sys_user_type` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8'
'CREATE TABLE `sys_user_type_ext_val` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_type_ext_id` bigint(20) NOT NULL,
`version` bigint(20) NOT NULL DEFAULT ''0'',
`name` varchar(60) NOT NULL,
`value` varchar(60) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sys_user_type_ext_id_name` (`user_type_ext_id`,`name`),
UNIQUE KEY `sys_user_type_ext_id_value` (`user_type_ext_id`,`value`),
KEY `sys_user_type_ext_val_type_ext_id` (`user_type_ext_id`),
CONSTRAINT `sys_user_type_ext_val_type_ext_id` FOREIGN KEY (`user_type_ext_id`) REFERENCES `sys_user_type_ext` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8'
'CREATE TABLE `sys_user_ext` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`user_type_ext_id` bigint(20) NOT NULL,
`creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`version` bigint(20) NOT NULL DEFAULT ''0'',
`value` varchar(60) NOT NULL,
PRIMARY KEY (`id`),
KEY `sys_user_ext_user_id` (`user_id`),
KEY `sys_user_ext_type_ext_id` (`user_type_ext_id`),
CONSTRAINT `sys_user_ext_type_ext_id` FOREIGN KEY (`user_type_ext_id`) REFERENCES `sys_user_type_ext` (`id`) ON UPDATE CASCADE,
CONSTRAINT `sys_user_ext_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8'
但是sys_user_ext表,value列有问题 如果type为复选框,则该值将具有多个值,由","分隔,如" 1,2,3",但不能保证分离的值顺序,它可能是2,3,1 并且值应为sys_user_type_ext_val表id或值。