若要同时支持系统预定义和用户自定义输入,可以在数据建模时采取以下策略:
数据模型设计
-
预定义优先级表:
创建一张名为PriorityLevels
的表,包含字段如Id
(主键)、Name
(优先级名称,比如’高’、‘中’、‘低’)等,用于存储系统预设的各种优先级等级。CREATE TABLE PriorityLevels ( Id INT PRIMARY KEY, Name VARCHAR(50) NOT NULL, // 其他可能的描述或排序字段 );
-
任务表关联优先级:
在任务表Tasks
中,设置一个外键字段PriorityLevelId
,默认关联到预定义的优先级表。CREATE TABLE Tasks ( TaskId INT PRIMARY KEY, Title VARCHAR(255), Description TEXT, DueDate DATE, PriorityLevelId INT, FOREIGN KEY (PriorityLevelId) REFERENCES PriorityLevels(Id) );
-
自定义优先级字段:
为了支持用户自定义优先级,可以在Tasks
表中增加一个额外字段,如CustomPriority
,用来存储用户自己输入的优先级信息。这个字段可以是一个字符串或者其他适合表示优先级的形式。ALTER TABLE Tasks ADD CustomPriority VARCHAR(50);
业务逻辑处理
-
用户在选择任务优先级时,界面显示预定义的优先级列表供用户选择,并且提供一个开关或额外输入框,允许用户开启自定义模式并输入他们自己的优先级标签。
-
如果用户选择了预定义的优先级,就将
PriorityLevelId
字段关联到选定的预设优先级ID。 -
如果用户选择了自定义优先级,则将
CustomPriority
字段填入用户输入的值,并确保PriorityLevelId
为空或关联到一个特殊标识(如-1)代表自定义优先级。
查询与展现
查询时可以根据PriorityLevelId
或CustomPriority
字段进行过滤和排序。在展示时,如果PriorityLevelId
有效,则显示预定义的优先级名称;否则,显示CustomPriority
字段的内容。
这样的设计既保留了系统规范性,又赋予了用户一定的灵活性,同时保持了数据结构的合理性与一致性。