CREATE TABLE ObjectA
(
Id CHAR(10) NOT NULL PRIMARY KEY,
Mode CHAR(10) NOT NULL,
Name CHAR(20) NOT NULL
);
CREATE TABLE ObjectA_Dict
(
Id CHAR(10) NOT NULL REFERENCES ObjectA,
Code CHAR(10) NOT NULL,
PRIMARY KEY(Id, Code)
);
CREATE TABLE ObjectA_DictEntry
(
Id CHAR(10) NOT NULL,
Code CHAR(10) NOT NULL,
FOREIGN KEY(Id, Code) REFERENCES ObjectA_Dict,
Index CHAR(10) NOT NULL,
Value VARCHAR(255) NOT NULL,
PRIMARY KEY(Id, Code, Index)
);
由于您没有告诉我们有关用于识别对象的字符串的组织结构,因此很难知道它们的大小。如果您愿意,您可以决定在表中使用某种自动分配的整数值;这将改变需要编写查询的方式,但可能会更好地使用一些处理 ORM(对象关系映射)的工具。由于您尚未确定您的目标是哪个 DBMS,因此也必须不进行说明。在ObjectA_DictEntry
中,您可以将其Id
作为外键引用ObjectA
,但这不是必需的。使用显示的复合键,您可以在ObjectA_DictEntry
不必参考其他表的情况下进行操作。如果您使用自动分配的值,您有时会被迫进行连接。
CREATE TABLE ObjectB
(
SysId CHAR(10) NOT NULL PRIMARY KEY,
Seates CHAR(20) NOT NULL
);
CREATE TABLE ObjectB_List
(
SysId CHAR(10) NOT NULL REFERENCES ObjectB,
Id CHAR(10) NOT NULL REFERENCES ObjectA,
PRIMARY KEY (SysId, Id)
);
这就是我认为您的ObjectB
架构应该是什么样子的。我认为你应该展示你认为它应该是什么样子的;它会改善你的问题。