lin*_*ndy 3 mysql database schema logic database-design
我目前正在重建我的网站的数据库.由于我现在的模式不是最好的模式之一,我认为听取您的一些建议会很有用.
首先,我的网站实际上包含小部件.对于每个小部件,我需要一个表settings(其中小部件的每个实例都有其用户定义的设置),一个表common(用于同一小部件的实例之间的共享项)和userdata(用户在小部件实例中保存的数据).
到目前为止,我有以下架构,由2个数据库组成:
user_id,widget_id和unique_id).widget_id),我有三个表:[widget_id]_settings,[widget_id]_common和[widget_id]_userdata.在每个表中,每行都保存unique_id用户窗口小部件的行.实际上,这是存储在窗口小部件中的所有用户数据.举一个我的数据库如何工作的简短例子:
第一个数据库
users我的表中user_id = 1widgets我的表中widget_id = 1users_widgets我的表中user_id = 1, widget_id = 1, unique_id = 1第二数据库:
1_settings我有unique_id = 1, ...,其中...代表用户的小部件设置1_common我有几行代表同一小部件的实例之间的共享数据(所以,这里没有用户特定的数据)1_userdata我有unique_id = 1, ...,其中...代表用户的小部件数据.这里一个重要的通知是这个表可能包含几行相同的行unique_id(例如,对于任务小部件,用户可以为小部件实例创建多个任务)希望你能粗略理解我的数据库架构.
现在,我想开发一个"更清洁"的模式,因此没有必要在我的应用程序中拥有2个数据库并每次从一个数据库切换到另一个数据库.如果我找到一种不在第二个数据库(1_settings,2_settings,...,n_settings)中动态生成表格的方法,那也会很棒.
我将非常感谢任何建议任何更好的方法来实现这一目标.非常感谢你提前!
编辑: 重构我的数据库时,我的脑海中是否有像MongoDB或CouchDB这样的数据库?我的意思是,对于第二个数据库,如果我没有固定的模式会更好.此外,传统的SQL和NoSQL如何在同一网站上相处?
users_widgets表的可能模式可以是:
id | user_id | widget_id
Run Code Online (Sandbox Code Playgroud)
您不需要表中的unique_id字段users_widgets,除非您出于某种原因要隐藏主键.实际上,我会将此表重命名为更令人难忘的内容widget_instances,并widget_instance_id在第二个数据库的其余表中使用.
处理第二组表的一种方法是使用元数据样式:
widget_instance_settings
id | widget_instance_id | key | value
Run Code Online (Sandbox Code Playgroud)
这将包括userdata,因为user_id与widget_instance_id相关,除非您希望允许用户创建同一窗口小部件的多个实例,并且由于某种原因在所有实例中具有相同的数据.
widget_common_settings
id | widget_id | key | value
Run Code Online (Sandbox Code Playgroud)
这种类型的架构可以在像Elgg这样的包中看到.
| 归档时间: |
|
| 查看次数: |
646 次 |
| 最近记录: |