【发布时间】:2017-10-25 23:17:23
【问题描述】:
我的数据库的某些表的设计存在问题。问题是:
我有 2 张桌子:
Level
Id (PK)
Name
Union
Id (PK)
LevelId (FK)
CityId (FK)
PostalCodeId (FK)
CountryId (FK)
实际上,我有 3 个级别,ID 分别为 1、2 和 3。在并集表中,我只能有 1 个 FK 标记和 1 个级别。例如,ID 为 1 的 Level 始终与 City 相关联,因此 LevelId 字段将填充 1,CityId 将填充其对应的标识符(其他字段将为空)。 LevelId 2 和 PostalCodeId(其他字段将为空)和 LevelId 3 和 CountryId。
现在,我想同时引用现在的 CityId 和 PostalCodeId,但是它们有不同的级别(并且级别表不应该改变,因为是大师)。
您认为解决此问题的最佳方法是什么?我想到了 2 个解决方案:
1) 去掉Union表的Level列,后台控制填充参数的个数。但是如果 Union 中的列数(FK)增加,我需要控制这么多条件。而且可能效率低下。
2) 使用代表“新关卡”的 ID 创建另一个关卡。我认为这不是最好的解决方案,因为事实上,我只有 3 个真实关卡。另一个是混合关卡,高手不会是这样的高手。
我不知道是否有更好的解决方案,或者如果没有,最好的方法是什么。
提前致谢。
【问题讨论】:
-
我完全不明白你想在这里做什么。您可以发布表格的实际 ddl 而不是伪代码吗?对我来说,这似乎有点不对劲,但我对问题的理解不足以帮助解决它。
-
调用表 UNION 是个糟糕的主意。
-
您的表格应该代表您正在建模的业务/系统中的真实“事物”。如果没有对这些信息的深入了解,没有人可以安全地提供建议。你有一个猜测 - 这可能会或可能不会有帮助。可以说,这似乎是错误的做法。重来。如果您需要帮助,请讨论您的模型及其代表什么以及如何使用它。
标签: sql sql-server database database-design