1

我正在开发一个管理公司客户的 Web 应用程序。为每个客户保存电话、地址、电子邮件和姓名等详细信息,并且在我保存这些详细信息的数据库表中有相应的字段。

应用程序的用户必须能够更改不同的细节。例如,他可能决定我们需要一个额外的字段来保存客户的传真号码,或者他可能决定不再需要地址字段并将其删除。

使用 NoSql 不是一种选择。我必须使用 PHP 和 mySql。

我一直在考虑使用 JSON 字符串来保存数据库表字段,但我还没有提出解决方案。

改变我的数据库表的结构是解决我的问题的唯一方法吗?如果可能的话,我想防止动态改变 db 表的结构。

实现动态视图是否可行?但是,我想这不会解决插入新字段的必要性。

先感谢您。

4

2 回答 2

1

你需要一个 MySQL 的键值对系统。NoSQL 数据库的想法是,您可以基于键/值创建自己的模式,基本上可以使用任何值作为值。

创建一个包含列的表special_fieldsfield_name或者更具体地命名为字段名称的表。使用此表来定义可用的字段名称,并使用另一个表来存储client_idspecial_field_id然后一个值。

因此客户端 #1 的地址(特殊字段记录 #1)值为“123 x street”

我能想到的唯一其他方法是实际更改表的架构以添加/删除列。不要那样做。

于 2013-11-09T07:44:55.273 回答
1

拥有另一个表不是更有意义吗,让我们称它为具有 user_id 作为外键的“信息”?

所以你有了:

CREATE TABLE user (
user_id ...
/* necessary information */
);

CREATE TABLE information (
user_id ...
information_type /* maybe enum, maybe just string, maybe int, depending how you want to do that */
information_blob
);

然后,您可以使用 JOIN 检索信息,并且不必在每次有人想要添加另一位信息时都更改表。

于 2013-11-09T07:45:42.253 回答