存储用户配置文件隐私设置

时间:2014-03-10 22:04:17

标签: mysql database-design

假设我有一个包含以下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表行。

0 个答案:

没有答案