【发布时间】:2014-07-21 17:18:19
【问题描述】:
我有四个表和三个联结表来指示多对多关系。
这是使用项目二进制文件将包含多个应用程序二进制文件的一般信息创建的,每个应用程序二进制文件可以由多个存档、共享对象、对象、二进制文件等构建。每个存档或共享对象或二进制文件可以由多个源文件(.c , .cpp, .hpp, .h , sh , .java)。
问题如下。
1.这个设计够好吗?或者有更好的方法来做到这一点。
2.如果我需要删除一个项目二进制文件,可以用什么sql查询。
3. 如果我只需要从 BinaryList_table 中删除一些二进制文件,什么可以是 sql 查询及其对其他表的影响,因为存在多对多关系。
ProjectList_table
-----
ProjectBinaryId ProjectBinary VersionInfo etc. Market
1 NTG5_App 1.2 Japan
2 NTG5_App 1.3 Europe
------
AppList_table
-------
Appld ApplicationBinary VersionInfo
1 CarFU
2 NavHU 1.1
3 MediaHU
4 Connectivity
5 QNX binaries
6 NavHU 1.2
-------
ProjectBinary_AppJunctionTable
-------
ProjectBinaryId AppId
1 1
1 2
1 3
1 4
1 5
2 5
2 4
2 6
------------------
BInaryList_Table
--------------
BinaryId BinaryFileName LicenseDetails
1 .so
2 .a
3 .so
4 binary
5 .a
6 .a
7 .so
8 .o
9 .a
10 .so
11 .so
12 .a
13 binary (shell command wo extn)
-------------------------
App_BinaryJunctionTable
---------------------
AppId BinaryId
1 1
1 2
1 3
1 4
2 5
2 3
3 7
3 8
4 1
4 10
5 11
5 12
5 13
-----------
SourceInfo_Table
--------
SourceId Source file License Details
1 .c, .cpp, .h,.sh .etc
2 .c, .cpp, .h,.sh .etc
3 .c, .cpp, .h,.sh .etc
4 .c, .cpp, .h,.sh .etc
5 .c, .cpp, .h,.sh .etc
6 .c, .cpp, .h,.sh .etc
7 .c, .cpp, .h,.sh .etc
8 .c, .cpp, .h,.sh .etc
9 .c, .cpp, .h,.sh .etc
10 .c, .cpp, .h,.sh .etc
11 .c, .cpp, .h,.sh .etc
12 .c, .cpp, .h,.sh .etc
13 .c, .cpp, .h,.sh .etc
------------
Binary_SourceJunctionTable
-------------
BinaryId SourceId
1 1
1 2
1 3
1 4
2 5
2 3
2 6
2 7
4 1
4 2
4 8
4 9
-------------
嗨凯文
首先,我创建了所有项目、应用程序和源信息表。然后我成功创建了 projectbinary_AppJunctionTable,但是当我尝试创建 app_binaryJunction 表时。我收到如下粘贴的错误 -
-ERROR 1022: Can't write; duplicate key in table 'appid_objid_junctiontable'
SQL Statement:
CREATE TABLE `trial`.`appid_objid_junctiontable` (
`Id` INT NOT NULL,
`app_id` INT NULL,
`obj_id` INT NULL,
PRIMARY KEY (`Id`),
INDEX `app_id_idx` (`app_id` ASC),
INDEX `obj_id_idx` (`obj_id` ASC),
CONSTRAINT `app_id_fk`
FOREIGN KEY (`app_id`)
REFERENCES `trial`.`applisttable` (`Appld`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `obj_id_fk`
FOREIGN KEY (`obj_id`)
REFERENCES `trial`.`objectlist_table` (`ObjectId`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
-- 请帮忙。
7 月 21 日编辑
嗨,凯文,感谢您的 sql 查询。我尝试在 projectbinary 表和 applisttable 之间创建联结表,但失败如下。
CREATE TABLE trial.projid_appid_junctiontable (
proj_id INT NOT NULL,
app_id INT NOT NULL,
PRIMARY KEY (proj_id, app_id),
FOREIGN KEY (proj_id) REFERENCES trial.projectlisttable (ProjectBinaryId) ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY (app_id) REFERENCES trial.applisttable (AppId) ON DELETE NO ACTION
);
Error code: 1215 Cannot add foreign key constraint.
【问题讨论】:
标签: mysql sql database database-design many-to-many