0

我有这个需要插入数据库的对象(包括正确的关系)我试图找到用正确的字段和关系构建数据库表的最佳方法..

我的对象:

对象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我不知道如何正确处理字典......

提前致谢。

4

1 回答 1

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架构应该是什么样子的。我认为你应该展示你认为它应该是什么样子的;它会改善你的问题。

于 2012-12-21T02:55:58.083 回答