我有这个对象,我需要插入数据库(包括正确的关系) 我试图找到使用正确的字段和关系构建数据库表的最佳方法..
我的观点:
对象A:
String id;
String mode;
String name;
Dictionary dict<String code,List<Pair<String index,String val>>
对象B:
String sysId;
List<objectA> objectAs;
String seates;
它应该是objectB.sysId与objectA.id之间的一对多关系(很多objectA到一个objectB)
在objectB中,sysId是主键。
现在关于objectA我不知道如何处理字典......
提前感谢。
答案 0 :(得分:0)
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
架构应该是这样的。我想你应该展示你认为应该是什么样子;它会改善你的问题。