设计数据库模式 - 所有用户通用或定制的数据

Designing a Database Schema - Data that is common to all users or custom made

您好,我正在 Rails 上使用 Ruby 开发日历应用程序。 Rails 与数据库无关,所以在开发中我使用 SQLite 但在生产中我希望使用 PostgreSQL.The 我目前面临的障碍是我设计数据库模式的方式。

首先,我有一个用户 table,其中包含登录信息和电子邮件等信息。每个用户 has_many 计划。

然后我有一个 table 计划 belongs_to 用户,每个计划都有一个它引用的事件、日期、开始时间和结束时间。

所以计划 tables 将引用事件 table。

这是我的问题:

我想举办两个活动 table。一种是自定义事件。另一个是默认事件。 默认事件只是已定义的常见事件列表,因此用户可以从列表中 select。自定义事件 table 是由用户创建的引用其 ID 的事件列表。

这是我的解决方案:

向名为 "custom" 的计划 table 添加一个新的布尔列是否足够?如果为真,则 event_id(在计划 table 中)将引用自定义事件 table,如果为假,则将引用默认事件 table。这是一个有效的解决方案吗?如果是,我将如何在我的 Rails 应用程序中实施它?

感谢您花时间阅读我的问题。对不起,我是个白痴。我每天都在练习,让自己变得更好。

尽量不要首先考虑 table,而是考虑 class 及其实例的行为。最终最重要的不是你的设计有多少 table,而是你的模型中是否正确地将职责分配给了不同的 class。

在这种情况下,您似乎需要两个不同的 class,因为有些事件会 belong_to 用户,而其他事件则不会。前者将由该用户创建、修改和删除,而后者将由管理员管理。这些 classes 的实例可以使用 STI(单一 Table 继承)存储在相同的 table 中,并使用名为 'type' 的字符串列来启用 Rails为每个实例存储 class。 UserEvent class 将 belong_to :user,而 DefaultEvent 不会。两个 classes 都可以扩展 Event,后者又扩展了 ActiveRecord::Base.

如果您需要进一步说明,请告诉我。