我正在研究一个系统,其中要求是:
每个租户的数据都是未知的,因此他们应该可以灵活地添加他们想要的任何数据:
租户1> account_no | date_created | DUE_DATE
租户2> account_holder | start_date | end_date | customer_name | ...
我能看到的唯一解决方案是使用键值对数据库结构: - 例如
accounts table
id | tenant_id | key | value
1 1 account_no 12345
accounts_data table
account_id | key | value
1 date_created 01-01-2014
1 due_date 30-02-2014
从长远来看,我看到这种方法的缺点:
- Monster queries
- Inefficient with large data
- Lots of coding to handle data validation, since no data types are there and everything is saved as string
- Filtering can be lots of work
话虽如此,我会很感激建议,以及我可以用来实现这一目标的任何其他方法。
答案 0 :(得分:2)
警告,您正走进inner platform effect和Enterprisey design。
慢慢停下来,然后重新审视你对为什么你必须这样做的假设。
必须在这里给予一些东西;之一:
将无模式自由格式数据库用于无模式自由格式数据;
允许租户用户根据他们的需求为他们的数据定义有用的架构;或
与hstore
或json
存储
请不要在数据库的EAV模型中创建数据库。 Developers everywhere in the world will cry您的设计很快就会在The Daily WTF上讨论。