假设我有一个包含以下Users表的数据库:
CREATE TABLE IF NOT EXISTS `users (
`id` varchar(20) NOT NULL,
`first_name` varchar(30) NOT NULL,
`last_name` varchar(50) DEFAULT NULL,
`date_of_birth` date DEFAULT NULL,
`home_phone` varchar(25) DEFAULT NULL,
`mobile_phone` varchar(25) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`image` longblob,
`added` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='User Profile';
存储这些信息是公开信息还是私信信息的最佳方法是什么。
目前我所做的涉及有一个单独的表来存储这个字段是公共的(public = 1)还是没有(public = 0或不在表中)
CREATE TABLE IF NOT EXISTS `user_perms` (
`user` varchar(20) NOT NULL,
`field` varchar(30) NOT NULL,
`public` tinyint(1) NOT NULL,
PRIMARY KEY (`user`,`field`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(关系未显示,但user_perms.user
引用users.id
)
因此,要将用户的名字设为公开,我会执行以下操作:
INSERT INTO `user_perms` (`user`, `field`, `public`)
VALUES ('123', 'first_name', 1);
我的问题是:有更好的方法在数据库中表示此个人资料吗?
我想过可能会存储每个个人资料字段,在他们自己的表格中引用其所有者用户ID及其隐私设置:
| UserID | Field | Field_Value | Public |
123 first_name Marco 1
这似乎是一个很好的解决方案,因为每次我需要添加新的配置文件字段时,它都不需要我更新users
表。这会很好吗?在1m用户,假设每个用户填写5个字段,将有5m表行。