灵活的自定义属性,如何设计表

时间:2016-07-01 02:33:49

标签: database database-design data-modeling modeling

我的作业是用户类型,每种类型都有很多自定义属性。每个属性都有不同的显示类型,不同的子属性和值。 例如 我创建了一个名为" 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'

enter image description here enter image description here enter image description here

但是sys_user_ext表,value列有问题 如果type为复选框,则该值将具有多个值,由","分隔,如" 1,2,3",但不能保证分离的值顺序,它可能是2,3,1 并且值应为sys_user_type_ext_val表id或值。 enter image description here

我的选择页面就像 enter image description here 我知道桌子设计很糟糕。 请帮帮我,给我一些建议。

0 个答案:

没有答案