我正在尝试设计一个 SQL 模式来表示电子邮件的文件夹结构,但是我遇到了一些困难,虽然关于 SQL 模式的堆栈溢出还有许多其他问题来表示分层文件夹/电子邮件结构,但没有似乎回答了我所有的问题。
我的要求如下:
- 每个用户都有一个邮箱,这个邮箱包含一些强制文件夹(例如收件箱或已发送)。
- 每个邮箱还可能包含用户可以创建以组织其邮件的自定义文件夹。
- 文件夹可以出现在层次结构中,但强制文件夹必须位于根级别。
我想在数据库级别执行许多事情,但无法全部容纳。
- 强制文件夹每个邮箱只能出现一次。应该不可能在同一个邮箱中插入另一个强制文件夹。
- 在层次结构方面,父文件夹和子文件夹必须都属于同一个邮箱。
到目前为止,我有两个表,一个“文件夹”表将包含所有邮箱的所有文件夹和一个“系统文件夹”表,其中包含强制表的定义:
CREATE TABLE Folders(
ID Int
, Mailbox_ID Int
, Name varchar(25)
, Parent_ID Int
, SystemFolder_ID Int
, PRIMARY KEY (ID)
);
CREATE TABLE SystemFolders(
ID Int
, Name varchar(25)
, PRIMARY KEY (ID)
);
我现在的问题是如何添加约束。
- 如何强制执行分层完整性(父文件夹或子文件夹必须都属于同一个邮箱)?**
- 如何确保在单个邮箱的上下文中只能存在每种类型的一个系统文件夹?**
理想情况下,该解决方案不会特定于任何特定风格的 SQL。任何帮助表示赞赏。