php - 将数据保存为数组或单个字段 (php/MySQL)

标签 php mysql database serialization

我正在为用户/客户设计一个新系统,并且我的系统用户首选项中有。在我开始创建代码和数据库之前,我想确保我做的事情是正确的。

我有这些偏好:

  • 字体大小
  • 字体
  • 字体颜色
  • 主题
  • 主页
  • 仪表板选项
  • 很少有真/假选项,例如启用共享等...

还有更多。

我的想法是为每个首选项创建每个字段,但我认为也许我可以将对象或数组保存在 blob 中。

这是个好主意吗?

最佳答案

您可以制作一个辅助表来保存属性名称的引用。然后,您可以将该表与合并表链接——在用户 ID 和其中一个属性的 ID 之间。这样做,您可以随时更改属性。

使用外键,您还可以“级联删除”具有不再存在的属性的用户详细信息。此外,您可以确保只添加对有效属性名称的引用,并使用索引优化搜索。

让我们这么说:

CREATE TABLE user_preferences_headers
(
  `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL
);

CREATE TABLE `users`
(
   `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
   `name` VARCHAR(255) NOT NULL,
   `pass` VARCHAR(255) NOT NULL
);

CREATE TABLE `user_preferences`
(
  `id_user` INT NOT NULL,
  `id_preference_entity` INT NOT NULL,
  `value` VARCHAR(255)
);

ALTER TABLE `user_preferences` ADD INDEX ( `id_user` );
ALTER TABLE `user_preferences` ADD INDEX ( `id_preference_entity` );

ALTER TABLE `user_preferences` ADD FOREIGN KEY ( `id_user` ) REFERENCES `users` (
`id`
) ON DELETE CASCADE ON UPDATE CASCADE ; 
ALTER TABLE `user_preferences` ADD FOREIGN KEY ( `id_preference_entity` ) REFERENCES `user_preferences_headers` (
`id`
) ON DELETE CASCADE ON UPDATE CASCADE ; 

现在您首先按名称选择 user_preferences_headers 中的所有 header ,然后使用 id 从 user_preferences< 中选择所需的用户偏好值(也由 id 标识)/。请注意,当您删除 user_preferences_headers 中的条目时,链接到已删除行的 id 的所有条目也将被删除。

关于php - 将数据保存为数组或单个字段 (php/MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584148/

相关文章:

PHP 在 apache 服务器上执行

python - 如何从 SQL 表中下载大数据并通过一次获取 1000 条左右的记录连续保存到 csv 中

java - 如何从 MYSQL 存储过程调用 Java 文件?

php - 我们何时/何地使用 PDO?

database - 什么是 "opaque" key ?

php - 使用 PHP 变量作为 MySQL 中的表名

php - 我无法使用 Codeigniter 发送任何电子邮件

php - 无法通过 PEAR 安装 PHPUnit,需要 PEAR Installer >= 1.9.2,无法从 1.9.0 升级 PEAR

php - 不同的包装背景图像 wordpress 自定义模板

mysql - 在 MySQL 中交换列值