我正在为一个组织创建一个会员目录,并试图找出一种很好的方法来保持每个人的详细信息的顺序和可更新的方式。我有3个表:数据库架构建议
Person表处理实际的人
CREATE TABLE `person` (
`personid` BIGINT PRIMARY KEY AUTO_INCREMENT,
`personuuid` CHAR(32) NOT NULL,
`first_name` VARCHAR(50) DEFAULT '',
`middle_name` VARCHAR(50) DEFAULT '',
`last_name` VARCHAR(50) DEFAULT '',
`prefix` VARCHAR(32) DEFAULT '',
`suffix` VARCHAR(32) DEFAULT '',
`nickname` VARCHAR(50) DEFAULT '',
`username` VARCHAR(32) ,
`created_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` CHAR(33) DEFAULT '000000000000000000000000000000000',
`last_updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`last_updated_by` CHAR(33) DEFAULT '000000000000000000000000000000000'
) ENGINE=InnoDB, COMMENT='people';
关于一个人的信息。例如学校,电话号码,电子邮件,Twitter名称等。所有这些值都将作为json存储在“value”中,我的程序将处理所有内容。在用户的每次更新中,会创建一个新条目以显示更改的转换。
CREATE TABLE `person_info` (
`person_infoid` BIGINT PRIMARY KEY AUTO_INCREMENT,
`person_infouuid` CHAR(32) NOT NULL,
`person_info_type` INT(4) NOT NULL DEFAULT 9999,
`value` TEXT,
`created_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_by` CHAR(33) DEFAULT '000000000000000000000000000000000',
`last_updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`last_updated_by` CHAR(33) DEFAULT '000000000000000000000000000000000'
) ENGINE=InnoDB, COMMENT="Personal Details";
人之间person_info表
CREATE TABLE `person_info_map` (
`personuuid` CHAR(32),
`person_infouuid` CHAR(32) ,
`created_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_by` CHAR(33) DEFAULT '000000000000000000000000000000000',
`is_active` INTEGER(1)
) ENGINE=InnoDB, COMMENT="Map between person and person info";
所以考虑到我创建一个新的进入person_info
每次有更新,我想知道我是否应该担心的I/O的地图错误,表格变大等。如果是这样,有什么可能的解决方案?我从来没有真正使用过这样的数据库模式,所以我想我应该寻求帮助,而不是在将来搞砸。
我确信有人可能会问更新可能发生的频率。说实话我并不期待太多。我们目前在我们的目录中有2k个成员,我不指望我们在任何时候都有超过10K的活跃成员。我还认为我们最多可以有50种不同的选项类型,但为了安全和未来的目的,我允许多达1000种不同的选项类型。
考虑到这一小块,有没有人有任何意见,我应该如何从这里出发?
这是一张多地图,但由于'人'也可以更新(与'person_info'相同的方法,我想要一个简单的方法来知道哪个personuuid与哪个person_infouuid相匹配,因为这两个人的ID都会变化。我也不明白如何使用id而不是UUID来建立连接。如果person a亲自有2条记录,那么我是如何知道这些是同一个人的记录,但是数据发生了变化? –