数据库结构指导

时间:2012-12-21 02:08:40

标签: database database-design

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

我的观点:

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

提前感谢。

1 个答案:

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