考虑部分依赖信息的关系数据库设计?
Relational database design considering partly dependent information?
我有种强烈的感觉,只见树木不见森林,所以我需要你的帮助。
考虑以下两个 table:
create table Category (Category_ID integer,
Category_Desc nvarchar2(500));
create table Text (Text_Id integer,
Text nvarchar2(1000),
Category_Id integer references Category.Category_Id);
此代码没有遵循正确的语法,只是为了了解问题所在。
考虑为某些类别保存文本部分以在界面中使用它们的想法,例如消息("You can't do that!"、"Do this!"、...),但也为其他对象创建注释,即。 G。喜欢订单 ("Important customer! Prioritize this order!").
现在是我的问题。其中一些文本位会带来更多信息,例如,如果您在订单中添加 "Important customer" 注释,也会设置 Order.Prio_Flag
。
现在这是一个非常特殊的信息,仅考虑类别Order_Note
使用的文本。我不想将它添加到 Text
table,因为大多数条目不受此影响,并且 table 会因为特殊情况而变得越来越拥挤至少部分内容。
我觉得,设计有缺陷,但我也不希望每个类别都有一个 table,并尽可能保持通用。
请记住,这是问题的简化视图。
TL:DR: 如何在不添加新属性的情况下向 table 的内容添加信息,因为新属性只会填充最少的内容条目数。
子类型化和相关属性在关系数据库中很容易实现。例如,如果某些 Text
很重要并且需要具有依赖属性(例如 DisplayColor
),您可以将以下 table 添加到您的架构中:
CREATE TABLE ImportantText (
Text_Id integer NOT NULL ,
Display_Color integer NOT NULL ,
PRIMARY KEY (Text_Id),
CONSTRAINT ImportantTextSubtypeOfText
FOREIGN KEY (Text_Id) REFERENCES Text (Text_Id)
ON DELETE CASCADE ON UPDATE CASCADE
);
许多人认为外键约束建立实体之间的关系。那不是他们的目的。它们是约束,即它们将列中的值限制为另一列的子集。这样就建立了一个子类型关系,可以记录额外的属性。
在上面的 table 中,ImportantText
的任何元素都必须是 Text
的元素,并且将具有 Text
的所有属性(因为它必须是记录在Text
table),以及ImportantText
.
的附加属性
我有种强烈的感觉,只见树木不见森林,所以我需要你的帮助。
考虑以下两个 table:
create table Category (Category_ID integer,
Category_Desc nvarchar2(500));
create table Text (Text_Id integer,
Text nvarchar2(1000),
Category_Id integer references Category.Category_Id);
此代码没有遵循正确的语法,只是为了了解问题所在。
考虑为某些类别保存文本部分以在界面中使用它们的想法,例如消息("You can't do that!"、"Do this!"、...),但也为其他对象创建注释,即。 G。喜欢订单 ("Important customer! Prioritize this order!").
现在是我的问题。其中一些文本位会带来更多信息,例如,如果您在订单中添加 "Important customer" 注释,也会设置 Order.Prio_Flag
。
现在这是一个非常特殊的信息,仅考虑类别Order_Note
使用的文本。我不想将它添加到 Text
table,因为大多数条目不受此影响,并且 table 会因为特殊情况而变得越来越拥挤至少部分内容。
我觉得,设计有缺陷,但我也不希望每个类别都有一个 table,并尽可能保持通用。
请记住,这是问题的简化视图。
TL:DR: 如何在不添加新属性的情况下向 table 的内容添加信息,因为新属性只会填充最少的内容条目数。
子类型化和相关属性在关系数据库中很容易实现。例如,如果某些 Text
很重要并且需要具有依赖属性(例如 DisplayColor
),您可以将以下 table 添加到您的架构中:
CREATE TABLE ImportantText (
Text_Id integer NOT NULL ,
Display_Color integer NOT NULL ,
PRIMARY KEY (Text_Id),
CONSTRAINT ImportantTextSubtypeOfText
FOREIGN KEY (Text_Id) REFERENCES Text (Text_Id)
ON DELETE CASCADE ON UPDATE CASCADE
);
许多人认为外键约束建立实体之间的关系。那不是他们的目的。它们是约束,即它们将列中的值限制为另一列的子集。这样就建立了一个子类型关系,可以记录额外的属性。
在上面的 table 中,ImportantText
的任何元素都必须是 Text
的元素,并且将具有 Text
的所有属性(因为它必须是记录在Text
table),以及ImportantText
.