我正在开发一个管理公司客户的Web应用程序。为每个客户端保存电话,地址,电子邮件和名称等详细信息,数据库表中有相应的字段,用于保存这些详细信息。
应用程序的用户必须能够更改不同的详细信息。例如,他可能决定我们需要一个额外的字段来保存客户的传真号码,或者他可能决定不再需要地址字段并将其删除。
使用NoSql不是一种选择。我必须使用PHP和mySql。
我一直在考虑使用JSON字符串来保存数据库表字段,但我还没有提出解决方案。
改变我的db表的结构是解决我问题的唯一方法吗?我想阻止动态改变db表的结构,如果可能的话。
实现动态视图是否可行?但是,我想这不会解决插入新字段的必要性。
提前谢谢。
答案 0 :(得分:1)
您需要MySQL的键值对系统。 NoSQL数据库的想法是,您可以基于键/值创建自己的模式,基本上使用任何值来表示。
使用special_fields
列创建一个表field_name
,或者更具体地命名为字段名称的表。使用此表定义可用的字段名称,使用另一个表来存储client_id
和special_field_id
,然后存储值。
因此客户#1的地址(special_field记录#1)值为“123 x street”
我能想到的另一种方法是实际更改表的架构以添加/删除列。不要那样做。
答案 1 :(得分:1)
拥有另一个表是不是更有意义,让我们称之为'information',其中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检索信息,并且每次有人想要添加另一部分信息时都不必更改表格。