您好我正在使用Ruby on Rails开发日历应用程序。 Rails与数据库无关,所以在开发中我使用SQLite但在生产中我希望使用PostgreSQL。我面临的当前障碍是我设计数据库模式的方式。
首先,我有一个用户表,其中包含登录信息和电子邮件等信息。每个用户都有很多计划。
然后我有一个belongs_to用户的计划表,每个计划都有一个它引用的事件,日期,开始时间和结束时间。
因此计划表将引用事件表。
这是我的问题:
我想有两个事件表。一个是自定义事件。另一个是默认事件。 默认事件只是已定义的常见事件列表,因此用户可以从列表中进行选择。自定义事件表是由引用其ID的用户创建的事件列表。
这是我的解决方案:
将一个新的布尔列添加到名为" custom"的计划表中是否足够?如果为true,则event_id(在计划表中)将引用自定义事件表,如果为false,则它将引用默认事件表。这是一个有效的解决方案,如果是这样,我将如何将其实现到我的Rails应用程序中?
感谢您抽出宝贵时间阅读我的问题。对不起,我是个白痴。我每天都在练习,以便做得更好。
答案 0 :(得分:1)
尽量不考虑表格,而是考虑类及其实例的行为。最重要的不是你的设计有多少个表,而是责任是否正确归因于模型中的不同类。
在这种情况下,您看起来需要两个不同的类,因为某些事件将属于用户而其他事件则不属于用户。前者将由该用户创建,修改和删除,后者将由管理员管理。这些类的实例可以使用STI(单表继承)存储在同一个表中,并使用名为“type”的字符串列来使Rails能够为每个实例存储类。 UserEvent类将为belongs_to:user,而DefaultEvent则不会。这两个类都可以扩展Event,后者又扩展了ActiveRecord :: Base。
如果您需要进一步说明,请与我们联系。